Зачем подключать кассовый аппарат к 1С?
Сейчас все кассовые аппараты должны данные о продажах в налоговую инспекцию. Эту функцию можно использовать и для личного учета. Если вы ведете учет в 1С (любой конфигурации), то чтоб ваш бухгалтер не вручную с чеков переписывал данные о продажах, можно настроить автоматический прием документов с кассового аппарата. Плюс, еще можно не выходя из офиса программировать кассовый аппарат (передавать на него список товаров, цен, штрих кодов). За последние годы все больше и больше предприятий и предпринимателей переходят на автоматический удаленный учет, это очень сокращает время на ведение бухгалтерии и уменьшает риск ошибок.
Как это работает:
1. Кассовый аппарат MINI-T 400МЕ в своей памяти запоминает все чеки (продажи; возвраты; отчеты).
2. Через определенное время; например, каждые 30 минут;кассовый аппарат передает на сервер все чеки со своей памяти.
3. Когда вам нужно получить данные о продажах вы: запускаете 1С и нажимаете кнопку "Получить все чеки". 1С подключается к серверу получает от него данные и у вас в 1С формируются документы "продажа"; "возврат" и т.д. В зависимости от настроек, можно видеть каждый чек или все одним документом.
4. Если нужно на кассовый аппарат передать новый список товаров или новые цены, то в 1С нажимаете кнопку "Передать новый прайс" и на кассовый аппарат передаются новые товары и цены.
Что это за сервер?
Сервер к которому подключается кассовый аппарат и 1С, это защищенный компьютер который хранит все ваши чеки. Связь с ним происходить по защищенному каналу связи. Это сервер может быть ваш, или можно взять в аренду наш сервер.
Что такое UNS.dll?
UNS.dll - это вспомогательная компонента/библиотека для продуктов фирмы 1С. Эта компонента связывается с сервером по защищенному каналу связи, получает с сервера чеки и отправляет на сервер прайсы. Без нее 1С не сможет получать данные с кассового аппарата. Компонента эта платная, на каждый аппарат нужно покупать лицензию (идет привязка к номеру аппарата). Обратите внимание, что лицензия не имеет временных ограничений - 1 раз купили и можно пользоваться постоянно.
Как подключить компоненту UNS.dll к 1С
Подключение UNS.dll к 1С должен осуществлять 1С-программист обслуживающий вашу систему. Мы даем полную документацию по подключению компоненты, и поддерживаем в телефонном режиме. В среднем подключение занимает от 1 до 3-х часов, в зависимости от вашей конфигурации 1С и квалификации 1С-программиста.
Инструкция по подключению UNSDLL к 1С
UniUNS.dll – вспомогательная библиотека для связи программ на платформе 1С (7.7, 8.х) с сервером/шлюзом RETEKO (сервер обмена данными с кассовыми аппаратами).
У вас должно быть одно из двух:
1. Акаунт на сервере RETEKO (https://cp.reteko.com/) (далее WEB-шлюз).
2. Установлена программа “ШЛЮЗ ЮНИСИСТЕМ” на вашем компьютере (далее «локальный шлюз»).
1. Распаковать содержимое архива «ручная установка», например, в папку: «C:\UniUNS\1.3.1\»
UniUNS.dll – это библиотека (СОМ-объект) для связи.
2. В эту папку нужно поместить файлы:
- *.ekkalic - файл с лицензией на право использования конкретных кассовых аппаратов. Его дает организация, которая предоставила вам UniUNS.dll.
Если используете WEB-шлюз, то еще файл:
- *.pem – сертификат шифрования данных (файл подписи). Его дает организация, которая дала вам доступ к WEB-шлюзу RETEKO.
в папке у вас должны быть файлы, пример:
WEB-шлюз (минимум три файла) Локальный шлюз (минимум два файла)
UniUNS.dll
4101235596.ekkalic
ivanov.pem UniUNS.dll
4101235596.ekkalic
3. Настройки кассового аппарата MINI-T400:
3.1. Зайти в меню: [%] [КТ]
3.2. Выбрать "Змінити користувача" -> "Адмін"
пароль: 12321 [ОК]
3.3. Выбираем "Налаштування" -> "Налашт.застосувань" ->"Reteko" ->"Зв'язок з сервером"
"URL серверу" - пишем внешний статический IP сервера где установлен шлюз.
"Порт серверу" - 12700 (по умолчанию)
3.4. Можно выходить с меню.
По умолчанию кассовый аппарат каждые 60 минут отправляет отчеты на шлюз, и каждые 180 минут проверяет наличие нового прайс-листа на шлюзе.
Если нужно вручную немедленно отправить или получить прайс лист, то:
1. Зайти в меню: [%] [КТ]
2. Выбрать "Reteko"
"Відправити звіти"
"Оновити прайс-лист"
4. Подключаем к 1С, пример подключения находится в файле «UNSDLLТестОбработка-8-2-man.epf».
4.1. Подключаем к 1С библиотеку:
Перем UniUNSDLL Экспорт;
ЗагрузитьВнешнююКомпоненту("C:\UniUNS\1.3.1\UniUNS.dll");
UniUNSDLL = Новый ("AddIn.UniUNSDLL");
///////////////////////////////////////////////////////////////////////////////
// Компонента по умолчания настроена на работу с WEB-шлюзом RETEKO
// (кассовый аппарат на заводских настройках настроен на работу с WEB-шлюзом)
// Если вы используете локальный шлюз - на вашем сервере стоит специальная программа,
// и кассовый аппарат напрямую на нее передает отчеты, тогда нужно указать адрес вашего сервера:
//
// UniUNSDLL.ВыбратьСервер( "192.168.5.29", 12702, 1 );
// UniUNSDLL.ВыбратьСервер( "a1.qqq.ua", 4321, 1 );
// UniUNSDLL.ВыбратьСервер( "reteko.com", 443, 0 );
//
// параметры:
// 1-й домен или IP-адрес вашего сервера (тип:строка)
// 2-й порт (тип:число)
// 3-й признак шлюза: (тип:число)
// 0 - WEB-шлюз Reteko
// 1 - локальный шлюз
//Вызывать функцию только если работаем с локальным шлюзом
UniUNSDLL.ВыбратьСервер( "17.123.21.35", 12702, 1 );
4.2. Отправляем прайс-лист на сервер для программирования кассовых аппаратов:
/////////////////////////////////////////////////////////////
// Создаем новый прайс
// 1-й параметр дата начала действия прайса, тип - строка.
// пример1: 20130729 (ГГГГММДД)
// пример2: 20101229173500 (ГГГГММДДhhmmss)
// 2-й параметр число:
// 1 - очистить все товары в кассовом аппарате перед применением нового прайса
// 0 - не очищать предварительно товары в кассовом аппарате
Если UniUNSDLL.СоздатьПрайс("20130729", 1) <> 0 Тогда
// ошибка
Сообщить(UniUNSDLL.ТекстОшибки);
КонецЕсли;
/////////////////////////////////////////////////////////////
// Добавляем номера кассовых аппаратов для каких создаем прайс
// 1-й параметр - числовой заводской номер аппарата, тип - строка
//
Если UniUNSDLL.ДобавитьУстройствоКПрайсу("4101424321") <> 0 Тогда
Сообщить(UniUNSDLL.ТекстОшибки);
КонецЕсли;
////////////////////////////////////////////////////////////
// Добавляем товары в прайс
//
Если 0 <> UniUNSDLL.ДобавитьТовар(
"ШОКОЛАД FRYE ТЕМНЫЙ", // Имя товара (до 48 символов)
"1", // Код товара на аппарате (до 6 символов)
1578, // Цена в копейках (макс: 999 999 999)
9999999, // Количество в граммах (макс: 9 999 999)
"1", // Налоговая группа (АБВГД, 12345)
"7616500553705", // Штрих код (до 19 знаков)
1, // Признак весового товара
0 // Запретить продажу «в минус»
)
Тогда
// ошибка
Сообщить(UniUNSDLL.ТекстОшибки);
КонецЕсли;
// ... добавляем еще товары в прайс:
/////////////////////////////////////////////////////////////
// Отправляем прайс на сервер Reteko
//
Если 0 <> UniUNSDLL.ОтправитьПрайс() Тогда
// ошибка
Сообщить(UniUNSDLL.ТекстОшибки);
Иначе
Сообщить("Прайс лист успешно отправлен на сервер.");
КонецЕсли;
4.3. Получаем в 1С все чеки (продажа, возврат, служебные чеки)
Перем ДатаС;
Перем ДатаПО;
Перем КоличествоЧеков;
Перем КоличествоОтчетов;
Перем ЧекКоличествоТоваров;
Перем ЧекНомерРРО;
Перем ЧекСумма;
Перем ЧекДатаВремя;
Перем ЧекКоличествоОплат; // если по чеку платили и картой, и наличкой, и т.д.
Перем ЧекИдентификатор; // строка в которой зашифрованы номер аппарата, дата/время чека, и уникальный номер в пределах апппарта
// эту строку можно использовать как глобальный идентификатор чека.
Перем ЧекТип; //Тип чека:
// 0 - чек продажи
// 1 - чек возврата
// 2 - служебный чек
Перем ТоварШтрихКод;
Перем ТоварКод;
Перем ТоварИмя;
Перем ТоварСумма;
Перем ТоварКоличество;
Перем ТоварЦена;
Перем ТоварНалогГруппа; // 1 = А, 2 = Б, и т.д.
Перем ТоварОтменен; // Отменена продажи даного товара в чеке
Перем ОплатаСумма;
Перем ОплатаТип; // Число от 0 и дальше (засит от аппарата). 0 - наличные, 1 и дальше ваучер/карта/и т.д.
Перем ОплатаИмяТипа; // Может не указыватся
ДатаС = Формат(ПолеВводаДатаС, "ДФ=гггг-ММ-дд");
ДатаПО= Формат(ПолеВводаДатаПо, "ДФ=гггг-ММ-дд");
/////////////////////////////////////////////////////////////
// Получаем все чеки и Z-отчеты
// ДатаС, ДатаПО : дата в формате "YYYY-MM-DD-HH", или "YYYY-MM-DD", например:
// "2012-10-04" или с часами: "2012-10-04-15"
// ПолеВводаНомераРРО - номер кассового аппарата, или нескольких через ";", например:
// "4101235596"
// "4101235596;41012357899;410099001"
Если 0 <> UniUNSDLL.ПолучитьЧеки(ДатаС, ДатаПО, ПолеВводаНомераРРО, КоличествоЧеков, КоличествоОтчетов)
Тогда
// ошибка
Сообщить(UniUNSDLL.ТекстОшибки, СтатусСообщения.ОченьВажное);
КонецЕсли;
Сообщить("Чеков:"+Строка(КоличествоЧеков)+" Отчетов:"+Строка(КоличествоОтчетов));
////////////////////////////////////////////////////////////
// Перебираем все чеки
Для НомерЧека=1 по Число(КоличествоЧеков) Цикл
Если 0 <> UniUNSDLL.ПолучитьЧекИД(НомерЧека,
ЧекКоличествоТоваров,
ЧекНомерРРО,
ЧекСумма,
ЧекДатаВремя,
ЧекТип,
ЧекКоличествоОплат,
ЧекИдентификатор )
Тогда
// ошибка
Сообщить(UniUNSDLL.ТекстОшибки);
Иначе
Сообщить(" Чек:"+Строка(НомерЧека)
+"; Товаров:"+Строка(ЧекКоличествоТоваров)
+"; НомерРРО:"+Строка(ЧекНомерРРО)
+"; Сумма:"+Строка(ЧекСумма)
+ "; Дата:"+Строка(ЧекДатаВремя)
+ "; ТипЧека:"+Строка(ЧекТип)
+ "; ИДЧека:"+Строка(ЧекИдентификатор) );
КонецЕсли;
////////////////////////////////////////////////////////////
// Если чек продажа или возврат, тогда перебираем товары
Если (ЧекТип = 0) Или (ЧекТип = 1) Тогда
////////////////////////////////////////////////////////////
// Перебираем все товары в чеке
Для НомерТовара=1 по Число(ЧекКоличествоТоваров) Цикл
Если 0 <> UniUNSDLL.ПолучитьТоварЧека(НомерТовара,
ТоварШтрихКод,
ТоварКод,
ТоварИмя,
ТоварСумма, //Сумма со скидкой
ТоварКоличество,
ТоварЦена, //Цена без скидки
ТоварНалогГруппа,
ТоварОтменен
)
Тогда
// ошибка
Сообщить(UniUNSDLL.ТекстОшибки, СтатусСообщения.ОченьВажное);
Иначе
Сообщить(" "+Строка(НомерТовара)
+". ШтрихКод:"+Строка(ТоварШтрихКод)
+"; Код:"+Строка(ТоварКод)
+"; Имя:'"+Строка(ТоварИмя)
+"'; Сумма:"+Строка(ТоварСумма)
+ "; К-во:"+Строка(ТоварКоличество)
+ "; Цена:"+Строка(ТоварЦена)
+ "; НДС:"+Строка(ТоварНалогГруппа)
+ "; Отменен:"+Строка(ТоварОтменен));
КонецЕсли;
КонецЦикла;
////////////////////////////////////////////////////////////
// Перебираем все типы оплат в чеке
Для НомерОплаты=1 по Число(ЧекКоличествоОплат) Цикл
Если 0 <> UniUNSDLL.ПолучитьТипОплаты(НомерОплаты,
ОплатаИмяТипа,
ОплатаСумма,
ОплатаТип )
Тогда
Сообщить(UniUNSDLL.ТекстОшибки, СтатусСообщения.ОченьВажное);
Иначе
Сообщить(" "+Строка(НомерОплаты)
+"; ИмяТипа:'"+Строка(ОплатаИмяТипа)
+"'; Сумма:"+Строка(ОплатаСумма)
+ "; КодТипа:"+Строка(ОплатаТип),
СтатусСообщения.Обычное);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;