Долгая генерация штрих-кода
Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.
Читают тему
Вход в личный кабинет
Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.
{{ formTitle ? formTitle : 'Заказ обратного звонка' }}
{{ formDescription }}
Сообщить об ошибке
При использовании ААА 4.1 столкнулись с проблемой, что проводка некоторых документов стала занимать неприлично много времени (в среднем 30-40 секунд). С помощью отладчика выяснили, что практически все оно тратится на генерацию штрих-кода, которая происходит не совсем очевидным, на мой взгляд, способом: основная часть штрих-кода формируется рандомно, затем добавляется вся необходимая служебная информация, и, наконец, полученный таким образом штрих-код проверяется на уникальность. Процедура повторяется до тех пор, пока не будет найден уникальный штрих-код. Проведя еще несколько замеров, выяснили, что таким способом нужный (т. е. уникальный) штрих-код получается после примерно 8 000 итераций. И вполне очевидно, что с течением времени ситуация будет отнюдь не улучшаться.
Собственно, вопрос заключается в том, чем обусловлен выбор именно такого метода генерации? Ведь поиск свободной позиции среди уже имеющихся штрих-кодов на первый взгляд выглядит более производительным. Или я ошибаюсь?
Это сколько же у Вас штрихкодов заведено?
Получается что свободных скоро и не будет...
Уточните номер релиза конфигурации.
В релизе 4.1.01.23 алгоритмы формирования ШК были переработаны именно для ускорения генерации уникальных ШК. Можно взять оттуда только саму обработку ШтрихКоды.
Это сколько же у Вас штрихкодов заведено?
Уточните номер релиза конфигурации.
С момента внедрения мы ни разу не сталкивались с процедурой обновления. Каким образом мы можем получить новую версию
после обновления до 23 все "полетело"
Что касается генерации ШК то вся проблема была в генерации случайных чисел для нового ШК. А с этим в 1С не разбежаться. Пробовали разные варианты ... но гонялось все на синтетических тестах. Если помогло на реальных базах это хорошо.
Полетело
За скорость работы, пришедшую с 23 релизом всем разработчикам огромная благодарность.
Хотя, с другой стороны, ребят... уже 23 релиз...
Я ее переписал вот так
Можете попробовать.
11 релиз
Функция СформироватьШтрихКодТовара(Весовой=Ложь) Экспорт
СчПопыток=0;
Если Весовой Тогда
К = 5; //Для весового товара длина штрихкода 7 (2 - префикс)
ПрефиксКода = Строка(ПрефиксВесовогоШК);
НовыйКод = ПрефиксКода + СтрокаПривести(СформироватьПроизвольныйКод(К), "0", 4, 2);
Пока Не ШтрихКодУникален(НовыйКод) ИЛИ ШтрихКодЗапрещен(НовыйКод) Цикл
НовыйКод = ПрефиксКода + СтрокаПривести(СформироватьПроизвольныйКод(К), "0", 4, 2);
СчПопыток=СчПопыток+1;
Если СчПопыток=50 Тогда
СчПопыток=0;
КонецЕсли;
КонецЦикла;
Иначе
К = 10; //Для невесового товара длина штрихкода 12 (2 - префикс)
ПрефиксКода = ПрефиксШтучногоШК;
НовыйКод = EAN13(Строка(ПрефиксКода) + СтрокаПривести(СформироватьПроизвольныйКод(К), "0", 10, 2));
Пока Не ШтрихКодУникален(НовыйКод) ИЛИ ШтрихКодЗапрещен(НовыйКод) Цикл
НовыйКод = EAN13(Строка(ПрефиксКода) + СтрокаПривести(СформироватьПроизвольныйКод(К), "0", 10, 2));
СчПопыток=СчПопыток+1;
Если СчПопыток=50 Тогда
СчПопыток=0;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат НовыйКод;
КонецФункции // СформироватьШтрихКод()
23 релиз
Функция СформироватьШтрихКодТовара(Весовой=Ложь) Экспорт
СчПопыток=0;
Если Весовой Тогда
К = 5; //Для весового товара длина штрихкода 7 (2 - префикс)
ПрефиксКода = Строка(ПрефиксВесовогоШК);
НовыйКод = ПрефиксКода + СтрокаПривести(СформироватьПроизвольныйКод(К), "0", 4, 2);
Пока НЕ ШтрихКодУникален(НовыйКод) ИЛИ ШтрихКодЗапрещен(НовыйКод) Цикл
НовыйКод = ПрефиксКода + СтрокаПривести(СформироватьПроизвольныйКод(К), "0", 4, 2);
СчПопыток=СчПопыток+1;
Если СчПопыток=50 Тогда
СчПопыток=0;
КонецЕсли;
КонецЦикла;
Иначе
К = 10; //Для невесового товара длина штрихкода 12 (2 - префикс)
ПрефиксКода = ПрефиксШтучногоШК;
НовыйКод = EAN13(Строка(ПрефиксКода) + СтрокаПривести(СформироватьПроизвольныйКод(К), "0", 10, 2));
Пока НЕ ШтрихКодУникален(НовыйКод) ИЛИ ШтрихКодЗапрещен(НовыйКод) Цикл
НовыйКод = EAN13(Строка(ПрефиксКода) + СтрокаПривести(СформироватьПроизвольныйКод(К), "0", 10, 2));
СчПопыток=СчПопыток+1;
Если СчПопыток=50 Тогда
СчПопыток=0;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат НовыйКод;
КонецФункции // СформироватьШтрихКод()
в чем улучшилось быстродействие???
Было:
Стало:
но никто никому ничего не доказывал.
у всех бывает, не заметила при сравнении отличий, у нас только числа в штрих-коде
после замены обработки, бысьродействие действительно улучшилось.большое спасибо
Алексей Веревочников - проблема решена?