Быстрый старт  UniUNS.dll

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.ТекстОшибки, СтатусСообщения.ОченьВажное);			
				Иначе
					
					Сообщить("          "+Строка(НомерОплаты)
								+"; ИмяТипа:'"+Строка(ОплатаИмяТипа)
								+"'; Сумма:"+Строка(ОплатаСумма)
								+ "; КодТипа:"+Строка(ОплатаТип), 
								СтатусСообщения.Обычное); 
				КонецЕсли;			
			КонецЦикла;
			
		КонецЕсли; 
		
	КонецЦикла;