Не так давно попалась публикация на тему штрихкодирования объектов информационной базы.
Естественно, что вариантов решения по этой теме может быть море, но после ознакомления с данной публикацией и комментариями, которыми она обросла, хочется внести очередные 5 копеек и представить свое решение по данному вопросу, которое было проверено в условиях реальной эксплуатации на самописной конфигурации для логистики и, в небольшом объеме, на УПП.
На входе имеем задачу – сделать так, чтобы каждому документы или справочнику в базе можно было назначить штрихкод, позволяющий однозначно этот объект идентифицировать. (В общем-то распространить на планы видов характеристик, планы счетов и планы видов расчета и пр. это тоже можно, но смысла в этом применительно к своей базе не увидел) Штрихкод с одной стороны не должен быть слишком огромен для размещения его на печатной форме, с другой стороны – длины его должно быть достаточно, чтобы хватило всем.
Т.к. одним из предполагавшихся к печать вариантов был code128, то само собой наложилось условие – по возможности использовать только цифры, ибо описание данного кода прямо указывает на то, что они размещаются в нем в два раза плотнее, чем прочие символы. Так же практика показала, что штрихкодировать все объекты совсем не обязательно, набор документов и справочников, нуждающихся в этом, весьма ограничен и в идеале должен настраиваться. Т.к. у нас используется распределенная база данных, это тоже накладывает свой след.
Учитывая все входные условия пришел к формуле, позволяющей закодировать в базе все, что требуется:
BBPPPPPPYYYYMMDDHHmmSSOOOOOOFFFF (28 + 4 символов)
ГДЕ:
BB (2 знака) - префикс информационной базы, сгенерировавшей код. Актуально для распределенных БД. Настраивается в регистре сведений "Префикс ИБ" (шосПрефиксИБ). Значение по умолчанию – «00»
PPPPPP (6 знаков) - префикс типа объекта. Настраивается в регистре сведений Настройка штрихкодирования объектов системы (шос)(шосНастройкаШтрихкодированияОбъектовСистемы). Эта настройка может быть выполнена по умолчанию, при этом справочникам будут назначены префиксы, начинающиеся с 1, плюс номер таблицы справочника в структуре хранения БД, дополненный нулями до пяти символов. Документам - начинающиеся с 2, плюс номер таблицы документа в структуре хранения БД, дополненный нулями до пяти символов.
YYYYMMDDHHmmSS (14 знаков) - дата и время генерации штрихкода
OOOOOO (6 знаков) - порядковый номер сгенерированного в пределах одной секунды объекта
FFFF (4 знаков) - суффикс печатной формы. Выводится только при печати документов, в БД не хранится, если при печати суффикс не указан выводится "0000"
Непосредственно генерацию штрихкода выполняет специально созданная подписка на событие «При записи» для «СправочникОбъект» и «ДокументОбъект». Штрихкоды назначаются только тем типам объектов, которые были указаны в настройках (регистр шосНастройкаШтрихкодированияОбъектовСистемы). Сгенерированный код записывается в регистр шосКодыОбъектовСистемы, который может использоваться для поиска объектов или выведения на печать.
Для использования - подтягиваем объекты из файла поставки в свою конфигурацию, настраиваем префикс базы и объекты, которые нужно кодировать и проверяем.
Если все хорошо, то при записи объектов, типы которых выбраны в настройках, должны генерироваться штрихкоды, по правилам, которые описаны выше.
Не рекомендуется включать штрихкодирование все подряд видов объектов без надобности, а если подобную надобность для себя обнаружили – включение выполнять постепенно, иначе велик риск возрастания нагрузки на базу в короткий промежуток времени за счет массовой генерации кодов на все объекты, активно используемые пользователями.