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