Регистрация изменений для узла обмена с ККМOffline
Добрый день.
Есть задача. Организовать в УТ11.1 выгрузку в ККМOffline актуальных остатков. То есть, вечером магазины присылают продажи, УТ их загружает и утром, перед открытием магазина, выгружает справочники с актуальными остатками.
Что сделал:
1. Завел рабочее место ХХХ, к которому подключил все ККМOffline, работающие на Штрих-М:Кассире (которым нужны файлы со справочником товаров);
2. Сделал регламентное задание, которое использует типовые механизмы формирования списка товаров для выгрузки.
В результате РЗ отрабатывает, но файлы пустые. Ни продажи, ни перемещения товаров по складам никакой реакции не вызывают - файлы справочников пустые. такое ощущение, что для узла обмена с ККМ, который я завел, не регистрируются изменения остатков товаров при движениях...
Прошу подсказать каким образом вообще регистрируются изменения остатков по каждой ККМ в УТ (не могу разобраться в принципе) или как можно решить подобную проблему? Возможно принудительно регистрировать изменения для узла...
В УТ есть штатная функция, которая возвращает список товаров для выгрузки, возможно в ней что-то не так... Для моего случая...
Есть задача. Организовать в УТ11.1 выгрузку в ККМOffline актуальных остатков. То есть, вечером магазины присылают продажи, УТ их загружает и утром, перед открытием магазина, выгружает справочники с актуальными остатками.
Что сделал:
1. Завел рабочее место ХХХ, к которому подключил все ККМOffline, работающие на Штрих-М:Кассире (которым нужны файлы со справочником товаров);
2. Сделал регламентное задание, которое использует типовые механизмы формирования списка товаров для выгрузки.
В результате РЗ отрабатывает, но файлы пустые. Ни продажи, ни перемещения товаров по складам никакой реакции не вызывают - файлы справочников пустые. такое ощущение, что для узла обмена с ККМ, который я завел, не регистрируются изменения остатков товаров при движениях...
Прошу подсказать каким образом вообще регистрируются изменения остатков по каждой ККМ в УТ (не могу разобраться в принципе) или как можно решить подобную проблему? Возможно принудительно регистрировать изменения для узла...
В УТ есть штатная функция, которая возвращает список товаров для выгрузки, возможно в ней что-то не так... Для моего случая...
// Функция возвращает таблицу товаров с данными к выгрузке в устройство
//
// Параметры:
// Устройство - <СправочникСсылка.ПодключаемоеОборудование> - Устройство для которого необходимо получить данные
// ТолькоИзмененные - <Булево> - Флаг получения только измененных данных
// ОбновитьКодыТоваров - <Булево> - Флаг обновления кодов товаров перед получением данных.
//
// Возвращаемое значение:
// <ТаблицаЗначений> товаров к выгрузке
//
Функция ПолучитьТаблицуТоваровКВыгрузке(Устройство, Параметры, ОбновитьКодыТоваров = Ложь) Экспорт
УстановитьПривилегированныйРежим(Истина);
ПрефиксУзлаШтрихкода = РегистрыСведений.ШтрихкодыНоменклатуры.ПрефиксУзлаШтрихкода();
МаксимальноеЗначениеКодаВесовыхШтрихкодов = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьМаксимальноеЗначениеКодаВесовыхШтрихкодов();
МаксимальныйКодВесовогоТовара = РегистрыСведений.ШтрихкодыНоменклатуры.МаксимальныйКодВесовогоТовара();
ИспользоватьСерииНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатурыСклад", Новый Структура("Склад", Параметры.Склад));
Если ОбновитьКодыТоваров Тогда
ОбновитьКодыТоваров(Параметры.ПравилоОбмена);
КонецЕсли;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| КодыТоваровПодключаемогоОборудованияOffline.Используется КАК Используется,
| КодыТоваровПодключаемогоОборудованияOffline.Код КАК Код,
| КодыТоваровПодключаемогоОборудованияOffline.Номенклатура КАК Номенклатура,
| ЕСТЬNULL(КодыТоваровПодключаемогоОборудованияOffline.Номенклатура.Наименование,"""") КАК НоменклатураНаименование,
| ЕСТЬNULL(КодыТоваровПодключаемогоОборудованияOffline.Номенклатура.НаименованиеПолное,"""") КАК НоменклатураНаименованиеПолное,
| КодыТоваровПодключаемогоОборудованияOffline.Характеристика КАК Характеристика,
| ЕСТЬNULL(КодыТоваровПодключаемогоОборудованияOffline.Характеристика.Наименование, """") КАК ХарактеристикаНаименование,
| ЕСТЬNULL(КодыТоваровПодключаемогоОборудованияOffline.Характеристика.НаименованиеПолное, """") КАК ХарактеристикаНаименованиеПолное,
| ЕСТЬNULL(КодыТоваровПодключаемогоОборудованияOffline.Номенклатура.ЕдиницаИзмерения.Наименование, """") КАК ЕдиницаИзмеренияНаименование,
| КодыТоваровПодключаемогоОборудованияOffline.Упаковка КАК Упаковка,
| ЕСТЬNULL(КодыТоваровПодключаемогоОборудованияOffline.Упаковка.Наименование, """") КАК УпаковкаНаименование,
| ЕСТЬNULL(ШтрихкодыНоменклатуры.Штрихкод, """") КАК Штрихкод,
| (ЕСТЬNULL(КодыТоваровПодключаемогоОборудованияOffline.Упаковка.Коэффициент, 1)
| / ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Упаковка.Коэффициент, 1)) *
| ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
| ЕСТЬNULL(СвободныеОстатки.ВНаличииОстаток - СвободныеОстатки.ВРезервеСоСкладаОстаток - СвободныеОстатки.ВРезервеПодЗаказОстаток, 0) КАК Остаток,
| ВЫБОР
| КОГДА КодыТоваровПодключаемогоОборудованияOffline.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
| ТОГДА ВЫБОР КОГДА КодыТоваровПодключаемогоОборудованияOffline.Номенклатура.ЕдиницаИзмерения.ТипЕдиницыИзмерения = ЗНАЧЕНИЕ(Перечисление.ТипыЕдиницИзмерения.Весовая) ТОГДА Истина Иначе Ложь КОНЕЦ
| ИНАЧЕ ВЫБОР КОГДА КодыТоваровПодключаемогоОборудованияOffline.Упаковка.ЕдиницаИзмерения.ТипЕдиницыИзмерения = ЗНАЧЕНИЕ(Перечисление.ТипыЕдиницИзмерения.Весовая) ТОГДА Истина Иначе Ложь КОНЕЦ
| КОНЕЦ КАК Весовой,
|
| //ИспользованиеСерий ВЫБОР КОГДА 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК Т ГДЕ Т.Склад = &ПравилоОбменаСклад И Т.ПолитикаУчетаСерий.УказыватьПриОтгрузкеВРозницу И Т.Ссылка = КодыТоваровПодключаемогоОборудованияOffline.Номенклатура.ВидНоменклатуры) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК УказыватьСерииПриОтгрузкеВРозницу,
|
| ВЫБОР
| КОГДА КодыТоваровПодключаемогоОборудованияOfflineИзменения.Узел = &УзелИнформационнойБазы
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ИндексКартинкиЕстьИзменения
|ИЗ
| РегистрСведений.КодыТоваровПодключаемогоОборудованияOffline КАК КодыТоваровПодключаемогоОборудованияOffline
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(&ТекущаяДата, Склад = &ПравилоОбменаСклад) КАК СвободныеОстатки
| ПО КодыТоваровПодключаемогоОборудованияOffline.Номенклатура = СвободныеОстатки.Номенклатура
| И КодыТоваровПодключаемогоОборудованияOffline.Характеристика = СвободныеОстатки.Характеристика
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
| ПО КодыТоваровПодключаемогоОборудованияOffline.Номенклатура = ШтрихкодыНоменклатуры.Номенклатура
| И КодыТоваровПодключаемогоОборудованияOffline.Характеристика = ШтрихкодыНоменклатуры.Характеристика
| И КодыТоваровПодключаемогоОборудованияOffline.Упаковка = ШтрихкодыНоменклатуры.Упаковка
| //ВесыСПечатьюЭтикеток И ШтрихкодыНоменклатуры.Штрихкод ПОДОБНО &ФорматШтрихкода
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекущаяДата, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
| ПО КодыТоваровПодключаемогоОборудованияOffline.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
| И КодыТоваровПодключаемогоОборудованияOffline.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КодыТоваровПодключаемогоОборудованияOffline.Изменения КАК КодыТоваровПодключаемогоОборудованияOfflineИзменения
| ПО КодыТоваровПодключаемогоОборудованияOffline.Код = КодыТоваровПодключаемогоОборудованияOfflineИзменения.Код
| И КодыТоваровПодключаемогоОборудованияOfflineИзменения.ПравилоОбмена = &ПравилоОбмена
| И КодыТоваровПодключаемогоОборудованияOfflineИзменения.Узел = &УзелИнформационнойБазы
|ГДЕ
| КодыТоваровПодключаемогоОборудованияOffline.ПравилоОбмена = &ПравилоОбмена
| И КодыТоваровПодключаемогоОборудованияOffline.Номенклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|//ТолькоИзмененные И КодыТоваровПодключаемогоОборудованияOfflineИзменения.ПравилоОбмена = &ПравилоОбмена
|//ТолькоИзмененные И КодыТоваровПодключаемогоОборудованияOfflineИзменения.Узел = &УзелИнформационнойБазы
|ИТОГИ
| МАКСИМУМ(Штрихкод)
|ПО
| Код");
Если Параметры.ЧастичнаяВыгрузка Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"//ТолькоИзмененные","");
КонецЕсли;
Если ИспользоватьСерииНоменклатуры Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"//ИспользованиеСерий","");
КонецЕсли;
Если Параметры.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ВесыСПечатьюЭтикеток Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"//ВесыСПечатьюЭтикеток","");
КонецЕсли;
Если Параметры.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ВесыСПечатьюЭтикеток Тогда
Запрос.УстановитьПараметр("ФорматШтрихкода", РегистрыСведений.ШтрихкодыНоменклатуры.ФорматВесовогоШтрихкода("_"));
КонецЕсли;
Запрос.УстановитьПараметр("ПравилоОбмена", Параметры.ПравилоОбмена);
Запрос.УстановитьПараметр("ПравилоОбменаСклад", Параметры.Склад);
Запрос.УстановитьПараметр("ВидЦены", Параметры.ВидЦены);
Запрос.УстановитьПараметр("УзелИнформационнойБазы", Параметры.УзелИнформационнойБазы);
Запрос.УстановитьПараметр("ТекущаяДата", КонецДня(ТекущаяДата()));
ТаблицаТоваров = Новый ТаблицаЗначений;
ТаблицаТоваров.Колонки.Добавить("Используется", Новый ОписаниеТипов("Булево"));
ТаблицаТоваров.Колонки.Добавить("Код", Новый ОписаниеТипов("Число"));
ТаблицаТоваров.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТаблицаТоваров.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
ТаблицаТоваров.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиНоменклатуры"));
ТаблицаТоваров.Колонки.Добавить("ЕдиницаИзмерения", Новый ОписаниеТипов("Строка"));
ТаблицаТоваров.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
ТаблицаТоваров.Колонки.Добавить("НаименованиеПолное", Новый ОписаниеТипов("Строка"));
ТаблицаТоваров.Колонки.Добавить("Штрихкод", Новый ОписаниеТипов("Строка"));
ТаблицаТоваров.Колонки.Добавить("МассивШтрихкодов", Новый ОписаниеТипов("Массив"));
ТаблицаТоваров.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
ТаблицаТоваров.Колонки.Добавить("Остаток", Новый ОписаниеТипов("Число"));
ТаблицаТоваров.Колонки.Добавить("Весовой", Новый ОписаниеТипов("Булево"));
ТаблицаТоваров.Колонки.Добавить("ТребуетсяУказаниеСерий", Новый ОписаниеТипов("Булево"));
ТаблицаТоваров.Колонки.Добавить("ЕстьОшибки", Новый ОписаниеТипов("Булево"));
ТаблицаТоваров.Колонки.Добавить("ИндексКартинкиЕстьИзменения", Новый ОписаниеТипов("Число"));
ВыборкаПоКодам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоКодам.Следующий() Цикл
НоваяСтрока = ТаблицаТоваров.Добавить();
Выборка = ВыборкаПоКодам.Выбрать();
Пока Выборка.Следующий() Цикл
Штрихкод = СокрЛП(Выборка.Штрихкод);
Если Не ЗначениеЗаполнено(НоваяСтрока.Код) Тогда
НоваяСтрока.Используется = Выборка.Используется;
НоваяСтрока.Код = Выборка.Код;
НоваяСтрока.Номенклатура = Выборка.Номенклатура;
НоваяСтрока.Характеристика = Выборка.Характеристика;
НоваяСтрока.Упаковка = Выборка.Упаковка;
НоваяСтрока.Наименование = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(Выборка.НоменклатураНаименование, Выборка.ХарактеристикаНаименование) + ?(ЗначениеЗаполнено(Выборка.УпаковкаНаименование),", " + Выборка.УпаковкаНаименование + ")","");
НоваяСтрока.НаименованиеПолное = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(Выборка.НоменклатураНаименованиеПолное, Выборка.ХарактеристикаНаименованиеПолное) + ?(ЗначениеЗаполнено(Выборка.УпаковкаНаименование),", " + Выборка.УпаковкаНаименование + ")","");
НоваяСтрока.Цена = Выборка.Цена;
НоваяСтрока.Остаток = Выборка.Остаток;
НоваяСтрока.Весовой = Выборка.Весовой;
НоваяСтрока.ИндексКартинкиЕстьИзменения = Выборка.ИндексКартинкиЕстьИзменения;
НоваяСтрока.Штрихкод = Штрихкод;
Если ИспользоватьСерииНоменклатуры Тогда
НоваяСтрока.ТребуетсяУказаниеСерий = Выборка.УказыватьСерииПриОтгрузкеВРозницу;
КонецЕсли;
Иначе
НоваяСтрока.Штрихкод = НоваяСтрока.Штрихкод + ", " + Штрихкод;
КонецЕсли;
Если ЗначениеЗаполнено(Штрихкод) Тогда
НоваяСтрока.МассивШтрихкодов.Добавить(Штрихкод);
КонецЕсли;
КонецЦикла;
Если НоваяСтрока.Весовой
И ОбновитьКодыТоваров
И (Не ЗначениеЗаполнено(НоваяСтрока.Штрихкод)) Тогда
Если МаксимальноеЗначениеКодаВесовыхШтрихкодов = Неопределено ИЛИ МаксимальноеЗначениеКодаВесовыхШтрихкодов >= МаксимальныйКодВесовогоТовара Тогда
ВызватьИсключение РегистрыСведений.ШтрихкодыНоменклатуры.ТекстСообщенияНетСвободныхКодовВесовыхШтрихкодов();
КонецЕсли;
МаксимальноеЗначениеКодаВесовыхШтрихкодов = МаксимальноеЗначениеКодаВесовыхШтрихкодов + 1;
Штрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьШтрихкодВесовогоТовараПоКоду(МаксимальноеЗначениеКодаВесовыхШтрихкодов, ПрефиксУзлаШтрихкода);
НоваяСтрока.Штрихкод = Штрихкод;
НоваяСтрока.МассивШтрихкодов.Добавить(НоваяСтрока.Штрихкод);
Попытка
МенеджерЗаписиШтрихкода = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписиШтрихкода.Номенклатура = НоваяСтрока.Номенклатура;
МенеджерЗаписиШтрихкода.Характеристика = НоваяСтрока.Характеристика;
МенеджерЗаписиШтрихкода.Упаковка = НоваяСтрока.Упаковка;
МенеджерЗаписиШтрихкода.Штрихкод = НоваяСтрока.Штрихкод;
МенеджерЗаписиШтрихкода.Записать();
Исключение
НоваяСтрока.Штрихкод = "";
НоваяСтрока.МассивШтрихкодов.Очистить();
КонецПопытки;
КонецЕсли;
Если НоваяСтрока.Весовой Тогда
Если НоваяСтрока.МассивШтрихкодов.Количество() = 0 Тогда
НоваяСтрока.ЕстьОшибки = Истина;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(НоваяСтрока.Цена)
ИЛИ НоваяСтрока.ТребуетсяУказаниеСерий
ИЛИ Не ЗначениеЗаполнено(НоваяСтрока.Наименование)
ИЛИ (Не ЗначениеЗаполнено(НоваяСтрока.Штрихкод) И Параметры.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ВесыСПечатьюЭтикеток)
ИЛИ (ЗначениеЗаполнено(Параметры.МаксимальныйКод) И НоваяСтрока.Код > Параметры.МаксимальныйКод) Тогда
НоваяСтрока.ЕстьОшибки = Истина;
КонецЕсли;
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
Возврат ТаблицаТоваров;
КонецФункции
Показать
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот