Frontol 6. Руководство интегратора - описание не подробное.
По ключевым словам найден единственный в интернете (!) пример файла выгрузки на ККМ.
https://1cl.su/download/fileId=50787
$$$ADDCCARDTYPES
1000010001;Карта лояльности(1);Карта лояльности(1);1,0,1,1;0;1;0;1;1;0001;1;1000;1;4;1;4
$$$ADDCCARDDISCS
$$$DELETEMARKETINGACTIONSBYCODE
1000000000;1999999997
2000000000
$$$CHANGEMARKETINGACTIONSUNION
2;1
$$$ADDMARKETINGACTIONS
1000000001;07.09.2018;07.09.2019;;;Сумма чека >=1000 руб;Сумма чека >=1000 руб;1;0;;1;2
1000000002;07.09.2018;07.09.2019;;;Скидка на товар 3%;Скидка на товар 3%;1;0;;1;2
1000000003;07.09.2018;07.09.2019;;;Скидка на товар 5%;Скидка на товар 5%;1;0;;1;2
$$$ADDMARKETINGEVENTS
1000000001;1000000001;Сумма чека >=1000 руб;Сумма чека >=1000 руб;1;1;3;
1000000002;1000000002;Скидка на товар 3% / 1000010001;Скидка на товар 3%;2;16228•21561•26031;;3•3•3;;;;
1000000003;1000000003;Скидка на товар 5% / 1000010001;Скидка на товар 5%;2;22743•6029•18827;;5•5•5;;;;
$$$ADDMARKETINGCONDITIONS
1000000001;1;>=;1000
1000000002;17;1000010001
1000000002;6;07:00:00;23:59:59
1000000003;17;1000010001
Есть два типа скидок: за набор и по условиям. Если установить за набор, например 2 штуки скидка 5% - тогда нечетное количество товара будет иметь такую же скидку по сумме, как ближайшее четное. Например, сумма скидки для 3 штук равна 5% от цены 2 штуки, сумма скидки для 5 штук равна 5% от цены 4 штуки. Скидка по условию более привычная.
Необходим дополнительный регистр сведений с измерения Склад-Номенклатура-КоличествоОт-КоличествоДо; ресурс - Скидка. Фрагмент кода 1С для выгрузки.
&НаСервере
Функция ТоварыСкидки(КассаККМ)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| бит_СкидкиККМ.Номенклатура КАК Номенклатура,
| бит_СкидкиККМ.КоличествоОт КАК КоличествоОт,
| бит_СкидкиККМ.КоличествоДо КАК КоличествоДо,
| бит_СкидкиККМ.Скидка КАК Скидка
|ПОМЕСТИТЬ ВсеСкидки
|ИЗ
| РегистрСведений.бит_СкидкиККМ КАК бит_СкидкиККМ
|ГДЕ
| (бит_СкидкиККМ.Склад = &Склад
| ИЛИ бит_СкидкиККМ.Склад.Ссылка ЕСТЬ NULL)
| И бит_СкидкиККМ.КоличествоОт > 0
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КодыТоваров.Код КАК Код,
| ВсеСкидки.Номенклатура КАК Номенклатура,
| ВсеСкидки.КоличествоОт КАК КоличествоОт,
| ВсеСкидки.КоличествоДо КАК КоличествоДо,
| ВсеСкидки.Скидка КАК Скидка
|ИЗ
| РегистрСведений.КодыТоваровПодключаемогоОборудованияOffline КАК КодыТоваров
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеСкидки КАК ВсеСкидки
| ПО КодыТоваров.Номенклатура = ВсеСкидки.Номенклатура
| И (КодыТоваров.ПравилоОбмена = &ПравилоОбмена)
|
|УПОРЯДОЧИТЬ ПО
| Скидка
|ИТОГИ ПО
| Скидка";
Запрос.УстановитьПараметр("Склад", КассаККМ.ПравилоОбмена.Склад);
Запрос.УстановитьПараметр("ПравилоОбмена", КассаККМ.ПравилоОбмена);
РезультатЗапроса = Запрос.Выполнить();
Возврат РезультатЗапроса.Выбрать( ОбходРезультатаЗапроса.ПоГруппировкам );
КонецФункции
&НаСервере
Процедура ВыгрузитьНаККМЕще(Файл, КассыЦикл, ТоварыСкидки)
СчетчикАкций = 2100000000;
События = Новый Массив;
Условия = Новый Массив;
Сегодня = Формат( ТекущаяДата(), "ДФ=dd.MM.yyyy" );
Завтра = Формат( КонецДня( ТекущаяДата() ) + 1, "ДФ=dd.MM.yyyy" );
ИмяАкции = "Скидка за количество";
Пока ТоварыСкидки.Следующий() Цикл
Приоритет = 9;
КодАкции = Формат( СчетчикАкций,"ЧГ=0" );
Файл.ДобавитьСтроку( СтрШаблон("%1;%2;%3;;;%4;%4;1;%5;0;1;2", КодАкции, Сегодня, Завтра, ИмяАкции, Приоритет) );
ТСкидок = "";
ТТоваров = "";
СкидкиЦикл = ТоварыСкидки.Выбрать( ОбходРезультатаЗапроса.Прямой );
Пока СкидкиЦикл.Следующий() Цикл
Условия.Добавить( СтрШаблон( "%1;2;>=;%2", КодАкции, СкидкиЦикл.КоличествоОт ) );
Если СкидкиЦикл.КоличествоДо <> 0 Тогда
Условия.Добавить( СтрШаблон( "%1;2;<;%2", КодАкции, СкидкиЦикл.КоличествоДо ) );
КонецЕсли;
ТСкидок = ?( ТСкидок = "", "", ТСкидок + "•" ) + СкидкиЦикл.Скидка;
ТТоваров = ?( ТТоваров = "", "", ТТоваров + "•" ) + Формат(СкидкиЦикл.Код, "ЧГ=0");
КонецЦикла;
События.Добавить( СтрШаблон( "%1;%1;%2;%2;2;%3;;%4;;;;", КодАкции, ИмяАкции, ТТоваров, ТСкидок ) );
СчетчикАкций = СчетчикАкций + 1;
КонецЦикла;
Файл.ДобавитьСтроку( "$$$ADDMARKETINGEVENTS" );
Для Каждого СобытияЦикл ИЗ События Цикл Файл.ДобавитьСтроку( СобытияЦикл ); КонецЦикла;
Файл.ДобавитьСтроку( "$$$ADDMARKETINGCONDITIONS" );
Для Каждого УсловияЦикл ИЗ Условия Цикл Файл.ДобавитьСтроку( УсловияЦикл ); КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ВыгрузитьНаККМСервер()
Для каждого КассыЦикл Из Объект.Кассы Цикл
Если НЕ КассыЦикл.Отметка Тогда Продолжить; КонецЕсли;
ТоварыСкидки = ТоварыСкидки( КассыЦикл.ПодключаемоеОборудование );
Если ТоварыСкидки.Количество() = 0 Тогда Продолжить; КонецЕсли;
Файл = Новый ТекстовыйДокумент();
Файл.ДобавитьСтроку( "##@@&&" );
Файл.ДобавитьСтроку( "#" );
Файл.ДобавитьСтроку( "$$$DELETEALLMARKETINGACTIONS" );
Файл.ДобавитьСтроку( "$$$CHANGEMARKETINGACTIONSUNION" );
Файл.ДобавитьСтроку( "2;2" );
Файл.ДобавитьСтроку( "$$$ADDMARKETINGACTIONS" );
ВыгрузитьНаККМЕще(Файл, КассыЦикл, ТоварыСкидки);
ПараметрыВыгрузки = КассыЦикл.ПодключаемоеОборудование.Параметры.Получить();
Попытка
Файл.Записать(ПараметрыВыгрузки.БазаТоваров, КодировкаТекста.ANSI);
Если Не ПустаяСтрока( ПараметрыВыгрузки.ФлагВыгрузки ) Тогда
Файл.Очистить();
Файл.Записать( ПараметрыВыгрузки.ФлагВыгрузки, КодировкаТекста.ANSI );
КонецЕсли;
КассыЦикл.Результат = "Файл выгружен";
Исключение
Сообщить(ОписаниеОшибки());
КассыЦикл.Результат = "Ошибка";
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Вступайте в нашу телеграмм-группу Инфостарт
