Каталог решений - Поиск свободного штрихкода (EAN-13) внутри одного префикса

Поиск свободного штрихкода (EAN-13) внутри одного префикса

Поиск свободного штрихкода (EAN-13) внутри одного префикса

В наличии

Частая ситуация: Крупная компания покупает штрихкод например на 99999 позиций. Пользователь ручками случайно внес штрихкод 99999.
Но в выданных пределах еще много пропусков.

Категория:

Описание

В обработке использовался коммент из публикации на инфостарте http://forum.infostart.ru/forum26/topic125338/

Первая функция подготавливает таблицу свободных штрихкодов. (на 77000 позициях работает 2.5-3 секунды). Ее нужно использовать до цикла присваивания штрихкодов.

Вторая выжимает из этой таблицы штрихкоды.

&НаСервере
Функция ПодготовитьТаблицуСвободныхШтрихкодов() Экспорт
 
 Запрос = Новый Запрос;
 Запрос.Текст =
 "ВЫБРАТЬ
 | ""0"" КАК Цифра,0 КАК Позиция, 1 КАК Вес
 |ПОМЕСТИТЬ СистемаСчисления
 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""1"",1,10
 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""2"",2,100
 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""3"",3,1000
 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""4"",4,10000
 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""5"",5,100000
 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""6"",6,1000000
 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""7"",7,10000000
 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""8"",8,100000000
 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""9"",9,1000000000
 |;
 |
 |////////////////////////////////////////////////////////////////////////////////
 |ВЫБРАТЬ
 | ""0"" + ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 8, 5) КАК Номер,
 | ШтрихкодыНоменклатуры.Штрихкод
 |ПОМЕСТИТЬ Дано
 |ИЗ
 | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
 |ГДЕ
 | ШтрихкодыНоменклатуры.Штрихкод ПОДОБНО &ПрефиксЕАН
 |;
 |
 |////////////////////////////////////////////////////////////////////////////////
 |ВЫБРАТЬ
 | Дано.Штрихкод,
 | СУММА(СтепениДесяти.Вес * Цифры.Позиция) / МИНИМУМ(СтепениДесяти.Вес) КАК номер
 |ПОМЕСТИТЬ ЗанятыеШтрихкоды
 |ИЗ
 | Дано КАК Дано
 |  ВНУТРЕННЕЕ СОЕДИНЕНИЕ СистемаСчисления КАК СтепениДесяти
 |  ПО (ИСТИНА)
 |  ВНУТРЕННЕЕ СОЕДИНЕНИЕ СистемаСчисления КАК Цифры
 |  ПО (ПОДСТРОКА(Дано.Номер, 6 - СтепениДесяти.Позиция, 1) = Цифры.Цифра)
 |
 |СГРУППИРОВАТЬ ПО
 | Дано.Штрихкод
 |;
 |
 |////////////////////////////////////////////////////////////////////////////////
 |ВЫБРАТЬ РАЗЛИЧНЫЕ
 | 10000 * Таб5.Позиция + 1000 * Таб4.Позиция + 100 * Таб3.Позиция + 10 * Таб2.Позиция + Таб1.Позиция + 1 КАК Число
 |ПОМЕСТИТЬ ВТ_Числа
 |ИЗ
 | СистемаСчисления КАК Таб1,
 | СистемаСчисления КАК Таб2,
 | СистемаСчисления КАК Таб3,
 | СистемаСчисления КАК Таб4,
 | СистемаСчисления КАК Таб5
 |;
 |
 |////////////////////////////////////////////////////////////////////////////////
 |ВЫБРАТЬ
 | ВТ_Числа.Число КАК Номер,
 | ЕСТЬNULL(ЗанятыеШтрихкоды.Штрихкод, """") КАК Штрихкод
 |ПОМЕСТИТЬ ИндексШК
 |ИЗ
 | ВТ_Числа КАК ВТ_Числа
 |  ЛЕВОЕ СОЕДИНЕНИЕ ЗанятыеШтрихкоды КАК ЗанятыеШтрихкоды
 |  ПО (ЗанятыеШтрихкоды.Номер = ВТ_Числа.Число)
 |ГДЕ
 | ВТ_Числа.Число < 100000
 |;
 |
 |////////////////////////////////////////////////////////////////////////////////
 |ВЫБРАТЬ РАЗЛИЧНЫЕ
 | Свободные.Номер
 |ИЗ
 | ИндексШК КАК Свободные
 |ГДЕ
 | Свободные.Штрихкод = """"";
 Запрос.УстановитьПараметр("ПрефиксЕАН","%4590009%");  //Офиальный выданный компании префикс
 ДиапазоныШтучныхШтрихкодов = Запрос.Выполнить().Выгрузить();
 Если ДиапазоныШтучныхШтрихкодов.Количество() = 0 Тогда
  Возврат Неопределено;
 Иначе
  Возврат ДиапазоныШтучныхШтрихкодов;
 КонецЕсли;


КонецФункции

&НаСервере
Функция ЗанятьШтрихкод(Таблица) Экспорт
 Если Таблица.Количество() = 0 Тогда
  Возврат Неопределено;
 КонецЕсли;
 ШК = Таблица[0].Код;
 Таблица.Удалить(0); //штрихкод занят. удаляем из таблицы
 Возврат ШК;
КонецФункции 

» |ВЫБРАТЬ РАЗЛИЧНЫЕ » использована, потому что код расчета числового ряда создает дубли через каждые 10 чисел. Обойти это ошибку не смог. Главное работает. Так же пришлось добавить к текстовому индексу «0». Почему в данном случае глючит, пусть решают авторы кода создания числового ряда в запросе. Я взял их код без изменения.

Основное преимущество данного кода: Нет необходимости создания воспомогательных сущностей(регистры, справочники и т.д.) в конфигурации 1С.

has been added to your cart:
Оформление заказа