Найти в Дзене

04.06.2021 - 05.06.2021. 1С Розница 2.3: автоматизация списания остатков ЕГАИС с 1 регистра

с сайта Rus-pic.ru
с сайта Rus-pic.ru

Сегодня 4 июня 2021 года 15 часов 50 минут. Светит солнце.

Предыдущая статья

01.06.2021 - 04.06.2021. Списание остатков ЕГАИС в 1С Розница 2.3

натолкнула на мысль автоматизировать списание остатков ЕГАИС с первого регистра в 1С Розница. Необходимость списывать остатки возникает довольно часто и тыркать руками более 400 позиций (без учета их количества) напрягает.

Итак, приступим. Для начала посмотрим структуру Акта списания. Сделаем подбор нескольких элементов и завершим подбор.

Если прописать таблицу товары и акцизные марки

Для каждого Строка из Результат Цикл
стр = Списание.Товары.Добавить();
стр.АлкогольнаяПродукция = Строка.АлкогольнаяПродукция;
стр.Количество = Строка.Количество;
стр.КоличествоУпаковок = Строка.Количество;
стр.Номенклатура = Строка.Номенклатура;
стр.Справка2 = Строка.Справка2;
Попытка
стр.НеобходимостьВводаАкцизнойМарки = Строка.Номенклатура.ВидАлкогольнойПродукцииЕГАИС.Маркируемый;
Исключение
КонецПопытки;
КонецЦикла;
Списание.Записать();

Для каждого Строка из Результат Цикл
стр = Списание.АкцизныеМарки.Добавить();
стр.АкцизнаяМарка = Строка.АкцизнаяМарка;
стр.Количество = Строка.Количество;
стр.Справка2 = Строка.Справка2;
КонецЦикла;
Списание.Записать();

Отправка происходит без проблем.

Попробуем записать только акцизные марки.

Запись только акцизных марок не работает.

05 июня 2021 года 9 часов 40 минут. Светит солнце.

Таким образом, можно получить алгоритм: обращаемся к документу остатки, собираем в отбор Алкогольную продукцию, Справку, затем запросом обращаемся к регистру сведений по отбору и собираем акцизные марки "В наличии".

При количестве набора акцизных марок более нуля в табличную часть прописываем необходимы строки, в количество указываем количество набора, далее пишем в табличную часть "Акцизные марки" догадайтесь что.

Итак, приступим...

10 часов 45 минут

Работаем в консоли запросов. Пока как-то так:

Списание = Документы.АктСписанияЕГАИС.НайтиПоНомеру("004Н-000139",Дата(2021,06,05));
Списание = Списание.ПолучитьОбъект();
Списание.Товары.Очистить();
Списание.АкцизныеМарки.Очистить();
Запрос = Новый Запрос("Выбрать М.АкцизнаяМарка
| из РегистрСведений.АкцизныеМаркиЕГАИС как М
| где М.АлкогольнаяПродукция =&Ал
| И М.Справка2 = &Спр
| И М.Статус = &Статус");
Запрос.УстановитьПараметр("Статус",Перечисления.СтатусыАкцизныхМарок.ВНаличии);
н=0;
Для каждого Строка из Результат Цикл
н=н+1;
Запрос.УстановитьПараметр("Ал",Строка.АлкогольнаяПродукция);
Запрос.УстановитьПараметр("Спр",Строка.Справка2);
Марки = Запрос.Выполнить().Выбрать();
Сообщить(Марки.Количество());
Если н=10 тогда
прервать;
КонецЕсли;
КонецЦикла;

Марки собирает, можно приступать к записи документа.

Списание = Документы.АктСписанияЕГАИС.НайтиПоНомеру("004Н-000139",Дата(2021,06,05));
Списание = Списание.ПолучитьОбъект();
Списание.Товары.Очистить();
Списание.АкцизныеМарки.Очистить();
Запрос = Новый Запрос("Выбрать М.АкцизнаяМарка
| из РегистрСведений.АкцизныеМаркиЕГАИС как М
| где М.АлкогольнаяПродукция =&Ал
| И М.Справка2 = &Спр
| И М.Статус = &Статус");
Запрос.УстановитьПараметр("Статус",Перечисления.СтатусыАкцизныхМарок.ВНаличии);
н=0;
Для каждого Строка из Результат Цикл
н=н+1;
Запрос.УстановитьПараметр("Ал",Строка.АлкогольнаяПродукция);
Запрос.УстановитьПараметр("Спр",Строка.Справка2);
Марки = Запрос.Выполнить().Выбрать();
//Сообщить(Марки.Количество());
Если Марки.Количество()>0 тогда
стр = Списание.Товары.Добавить();
стр.АлкогольнаяПродукция =
Строка.АлкогольнаяПродукция;
стр.Количество = Марки.Количество();
стр.КоличествоУпаковок = Марки.Количество();
стр.Номенклатура = Строка.Номенклатура;
стр.Справка2 = Строка.Справка2;
Попытка
стр.НеобходимостьВводаАкцизнойМарки =
Строка.Номенклатура.ВидАлкогольнойПродукцииЕГАИС.Маркируемый;
Исключение
КонецПопытки;
Пока Марки.Следующий() цикл
Сообщить(Марки.АкцизнаяМарка);
КонецЦикла;
КонецЕсли;
Если н=10 тогда
Списание.Записать();
прервать;
КонецЕсли;
КонецЦикла;
Списание.Записать();

12 часов 48 минут.

Рабочий вариант

Списание = Документы.АктСписанияЕГАИС.НайтиПоНомеру("004Н-000139",Дата(2021,06,05));
Списание = Списание.ПолучитьОбъект();
Списание.Товары.Очистить();
Списание.АкцизныеМарки.Очистить();
Запрос = Новый Запрос("Выбрать М.АкцизнаяМарка
| из РегистрСведений.АкцизныеМаркиЕГАИС как М
| где М.АлкогольнаяПродукция =&Ал
| И М.Справка2 = &Спр
| И М.Статус = &Статус");
Запрос.УстановитьПараметр("Статус",Перечисления.СтатусыАкцизныхМарок.ВНаличии);
н=0;
Для каждого Строка из Результат Цикл
н=н+1;
Запрос.УстановитьПараметр("Ал",Строка.АлкогольнаяПродукция);
Запрос.УстановитьПараметр("Спр",Строка.Справка2);
Марки = Запрос.Выполнить().Выбрать();
//Сообщить(Марки.Количество());
Если Марки.Количество()>0 тогда
стр = Списание.Товары.Добавить();
стр.АлкогольнаяПродукция = Строка.АлкогольнаяПродукция;
стр.Количество = Марки.Количество();
стр.КоличествоУпаковок = Марки.Количество();
стр.Номенклатура = Строка.Номенклатура;
стр.Справка2 = Строка.Справка2;
Попытка
стр.НеобходимостьВводаАкцизнойМарки = Строка.Номенклатура.ВидАлкогольнойПродукцииЕГАИС.Маркируемый;
Исключение
КонецПопытки;
Пока Марки.Следующий() цикл
//Сообщить(Марки.АкцизнаяМарка);
стр = Списание.АкцизныеМарки.Добавить();
стр.АкцизнаяМарка = Марки.АкцизнаяМарка;
стр.Количество = 1;
стр.Справка2 = Строка.Справка2;
КонецЦикла;
КонецЕсли;
Если н=10 тогда
Списание.Записать();
прервать;
КонецЕсли;
КонецЦикла;
Списание.Записать();

Заполняем акт списания и отправляем.

авторский скриншот
авторский скриншот

Бинго! Теперь списывать остатки ЕГАИС в 1С Розница можно автоматически.

Чуть не забыл сам запрос к Остаткам ЕГАИС.

ВЫБРАТЬ
ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.АлкогольнаяПродукция.Код,
ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.Количество КАК Количество,
СоответствиеНоменклатурыЕГАИС.Номенклатура,
ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.Справка2
ИЗ
Документ.ОстаткиЕГАИС.ОстаткиПоДаннымЕГАИС КАК ОстаткиЕГАИСОстаткиПоДаннымЕГАИС
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеНоменклатурыЕГАИС КАК СоответствиеНоменклатурыЕГАИС
ПО (ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.АлкогольнаяПродукция = СоответствиеНоменклатурыЕГАИС.АлкогольнаяПродукция
И СоответствиеНоменклатурыЕГАИС.Справка2 = Значение(Справочник.Справки2ЕГАИС.ПустаяСсылка)
и СоответствиеНоменклатурыЕГАИС.ИдентификаторУпаковки ="")
ГДЕ
ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.Ссылка = &Ссылка
И ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.Количество > 0

Запрос работает некорректно, если одной позиции Алкогольной Продукции соответствует несколько позиций номенклатуры, что не есть хорошо, но часто встречается.

Канал "Дневник программиста 1С"