Как узнать дату создания штрихкода номенклатуры в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

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

Причина отсутствия даты создания у штрихкодов

Проанализируем структуру хранения данных в платформе 1С. Штрихкоды хранятся в независимом непериодическом регистре сведений РегистрСведений.Штрихкоды. В отличие от справочников или документов, непериодический независимый регистр сведений имеет следующие особенности:

  1. Отсутствие ссылочного типа: Записи регистра идентифицируются по ключу записи, а не по уникальному идентификатору (GUID). У них нет метода УникальныйИдентификатор().
  2. Отсутствие хронологических полей: В физической таблице базы данных для непериодического регистра не создаются системные реквизиты Период или Регистратор. Платформа фиксирует только измерения и реквизиты, заданные разработчиком.

Поэтому штатными средствами конфигурации получить дату записи штрихкода из самого регистра сведений невозможно.

Извлечение даты по ГУИД для элементов справочника

Для ссылочных объектов (например, для элементов справочника Номенклатура) дата создания действительно вычисляется из структуры GUID (UUID version 1). Рассмотрим код, который позволяет получить дату создания самой номенклатуры:


ГУИД = Номенклатура.УникальныйИдентификатор();
Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
Разрядность = СтрДлина(Строка16);
ЧислоСек = 0;

Для Позиция = 1 По Разрядность Цикл
    ЧислоСек = ЧислоСек + Найти("123456789abcdef", Сред(Строка16, Позиция, 1)) * Pow(16, Разрядность - Позиция);
КонецЦикла;

ЧислоСек = ЧислоСек / 10000000;
ДатаСоздания = Дата(1582, 10, 15, 04, 00, 00) + ЧислоСек;

Важно: данный алгоритм работает исключительно для ссылочных данных (справочники, документы) и неприменим к записям независимых регистров сведений.

Варианты решения задачи для регистра штрихкодов

Рассмотрев ограничения платформы, выделим проверенные способы решения задачи получения даты создания штрихкода.

1. Программная обработка Журнала регистрации

Если в системе включена фиксация событий записи данных в журнал регистрации, событие создания записи регистра сохраняется там. Чтобы не искать информацию вручную, можно написать обработку или отчет, который использует функцию ЗагрузитьЖурналРегистрации().

В параметрах отбора задаются следующие настройки:

  1. Событие: Данные.Изменение (или запись данных).
  2. Метаданные: Регистр сведений «Штрихкоды».

В комментарии или данных события содержится ключ записи регистра, включающий конкретное значение штрихкода и номенклатуру. Анализируя самую раннюю запись в журнале регистрации по заданному штрихкоду, можно определить точную дату и время его создания.

2. Доработка регистра через расширение конфигурации

Чтобы фиксировать дату создания штрихкода на будущее без снятия конфигурации с поддержки, можно использовать расширение:

  1. Добавляем в регистр сведений Штрихкоды новый реквизит ДатаСоздания с типом Дата.
  2. В модуль набора записей регистра добавляем обработчик события ПередЗаписью.
  3. В обработчике заполняем значение реквизита:

Для Каждого Запись Из ЭтотОбъект Цикл
    Если Не ЗначениеЗаполнено(Запись.ДатаСоздания) Тогда
        Запись.ДатаСоздания = ТекущаяДатаСеанса();
    КонецЕсли;
КонецЦикла;

Для ранее созданных записей поле останется пустым, но для всех новых штрихкодов дата будет фиксироваться автоматически.

3. Использование механизма «История данных»

В платформе 8.3 предусмотрен системный механизм История данных (Data History). При включении истории данных для регистра сведений Штрихкоды платформа начнет автоматически сохранять все версии записей, дату и время их создания, а также автора изменений.

← На главную