Удалить весовые штрихкоды
2024-02-07
Информация актуальна для конфигураций 1С: Комплексная автоматизация и Управление торговлей.
В продолжение темы о нехватке свободных штрихкодов в 1с, я написал простенькую обработку для поиска неиспользуемой номенклатуры и удаления, у нее, штрихкодов и кодов для весов.
При использовании обработки, можно самостоятельно указать период, который определит границы поиска движений номенклатуры. Вся весовая номенклатура, по которой не было движений, в указанный период попадет в список неиспользуемой. А значит ее штрихкоды и PLU-коды можно удалять.
Суть обработки: ищем номенклатуру по которой нет движений в регистре товары на складах за указанный период, у найденной номенклатуры удаляем штрихкод и весовой plu-код.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура |ПОМЕСТИТЬ ВТоборот |ИЗ | РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода, &ОкончаниеПериода, Период, ) КАК ТоварыНаСкладахОбороты |ГДЕ | ТоварыНаСкладахОбороты.Номенклатура.ЕдиницаИзмерения = &ЕдИзм | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОбороты.Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод, | ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура |ИЗ | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры | ЛЕВОЕ СОЕДИНЕНИЕ ВТоборот КАК Оборот | ПО ШтрихкодыНоменклатуры.Номенклатура = Оборот.Номенклатура |ГДЕ | ШтрихкодыНоменклатуры.Номенклатура.ЕдиницаИзмерения = &ЕдИзм | И | Оборот.Номенклатура is NULL |"; Запрос.УстановитьПараметр("ЕдИзм", Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию("кг")); Запрос.УстановитьПараметр("НачалоПериода", Объект.ПериодПоиска.ДатаНачала); Запрос.УстановитьПараметр("ОкончаниеПериода", Объект.ПериодПоиска.ДатаОкончания); НеиспользуемаяНоменклатура = Новый СписокЗначений; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); КоличествоУдаленныхШК = 0; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Набор = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей(); Набор.Отбор.Штрихкод.Установить(ВыборкаДетальныеЗаписи.Штрихкод); Набор.Записать(); КоличествоУдаленныхШК = КоличествоУдаленныхШК + 1; НеиспользуемаяНоменклатура.Добавить(ВыборкаДетальныеЗаписи.Номенклатура,,,) КонецЦикла; Сообщить("Удалено штрихкодов: " + КоличествоУдаленныхШК); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ * |ИЗ | РегистрСведений.КодыТоваровПодключаемогоОборудованияOffline КАК КодыТоваровПодключаемогоОборудованияOffline |ГДЕ | КодыТоваровПодключаемогоОборудованияOffline.Номенклатура.Ссылка В(&СписокНоменклатуры)"; Запрос.УстановитьПараметр("СписокНоменклатуры", НеиспользуемаяНоменклатура); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); КоличествоУдаленныхШК = 0; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл МЗ = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(МЗ, ВыборкаДетальныеЗаписи); МЗ.Удалить(); КоличествоУдаленныхШК = КоличествоУдаленныхШК + 1; КонецЦикла; Сообщить("Удалено кодов: " + КоличествоУдаленныхШК);
После того как обработка закончит рабочий цикл, выведется сообщение с количеством удаленных штрихкодов и PLU-кодов. А в результате работы этой обработки у нас удалятся уже ненужные штрихкоды, а следовательно они освободятся для новой номенклатуры. На скриншоте ниже видно много пропущенных штрихкодов.
Для максимального эффекта, рекомендую так же установить расширение для формирования штрихкодов. После чего новые штрихкоды будут использовать свободные позиции внутри пула всех весовых штрихкодов.