Как в 1С:Бухгалтерия 3.0 посмотреть историю изменения наименований номенклатуры и печатать документы со старыми названиями?

Программист 1C:Бухгалтерия Бухгалтерский учет
← На главную

В процессе ведения учета в программе 1С:Бухгалтерия 8.3 (редакция 3.0) пользователи часто сталкиваются с необходимостью изменить наименование товара. Однако простое редактирование карточки Номенклатура таит в себе скрытую угрозу: при перепечатке старых документов (накладных, счетов-фактур) за прошлые периоды программа подставит актуальное (новое) название. Это может привести к расхождениям с бумажными оригиналами и проблемам при проверках.

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

Вариант 1. Использование типового механизма версионирования объектов

Самый простой и правильный способ увидеть, кто, когда и что изменил в карточке товара — это стандартное версионирование. По умолчанию в конфигурации «Бухгалтерия предприятия» оно может быть отключено для экономии места в базе данных. Проанализируем процесс его включения и настройки:

  1. Перейдем в раздел Администрирование — Общие настройки.
  2. Развернем группу История изменений и установим флаг Хранить историю изменений.
  3. Нажмем на ссылку Настройки хранения. В открывшемся списке найдем справочник Номенклатура.
  4. В колонке «Установлено» выберем режим Версионировать при записи.
  5. Для оптимизации объема базы данных рекомендуется установить срок хранения версий (например, «За последний год»), так как справочник номенклатуры может быть очень объемным.

После включения этой опции в карточке номенклатуры появится кнопка История изменений (обычно находится в меню «Еще» или в верхней панели). Рассмотрим, что это дает: программа будет сохранять «снимки» объекта при каждом нажатии кнопки «Записать». Мы сможем сравнить две версии и увидеть, что поле НаименованиеПолное изменилось с «Товар А» на «Товар Б».

Вариант 2. Проверка через Журнал регистрации

Если версионирование не было включено заранее, а узнать автора изменений нужно «вчера», попробуем обратиться к Журналу регистрации. Разберем, как это сделать:

Перейдем в Администрирование — Обслуживание — Журнал регистрации. Установим отбор по событию «Данные. Изменение» и выберем в качестве объекта конкретную позицию номенклатуры. Проанализируем ситуацию: стандартный журнал зафиксирует факт записи объекта пользователем, но, к сожалению, в базовом режиме он не покажет старое значение реквизита. Этот метод полезен только для выявления ответственного за правку.

Вариант 3. Особенности печатных форм и проблема «Текущего значения»

Важно понимать фундаментальный принцип работы 1С: при формировании печатной формы (например, ТОРГ-12) программа обращается к ссылке на объект. Ссылка не меняется при переименовании, но данные по этой ссылке (название) теперь другие. Выясним, почему это критично:

Если вы отгрузили «Кабель медный» в январе, а в марте переименовали его в «Провод ПВ-3», то при попытке напечатать январскую накладную программа напишет в ней «Провод ПВ-3». С точки зрения методологии учета 1С, существенное переименование требует создания новой карточки номенклатуры. Для старой карточки в последних версиях БП 3.0 предусмотрен флаг Использование завершено, который скрывает ее из списков выбора.

Вариант 4. Техническое решение через расширение конфигурации

Если бизнес-процесс компании все же требует автоматической печати старых названий без создания новых карточек, нам потребуется доработка. Рассмотрим по шагам, как реализовать механизм «периодического наименования» с помощью расширения, не снимая конфигурацию с поддержки:

Шаг 1. Создание периодического регистра сведений. В расширении создадим регистр ИсторияНаименований с измерением Номенклатура (тип СправочникСсылка.Номенклатура) и ресурсом НаименованиеДляПечати (тип Строка). Установим периодичность регистра «В пределах дня» или «Секунды».

Шаг 2. Подписка на событие. Создадим подписку на событие ПриЗаписи для справочника Номенклатура. При каждом изменении названия будем записывать в наш регистр новую запись с текущей датой.

Шаг 3. Модификация печатных форм. Нам потребуется перехватить запрос, который собирает данные для печати. Посмотрим на пример кода, который должен выполняться в процедуре формирования данных:


// Пример получения названия на дату документа
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ИсторияНаименованийСрезПоследних.НаименованиеДляПечати КАК Наименование
    |ИЗ
    |	РегистрСведений.ИсторияНаименований.СрезПоследних(&ДатаДокумента, Номенклатура = &Номенклатура) КАК ИсторияНаименованийСрезПоследних";

Запрос.УстановитьПараметр("ДатаДокумента", СсылкаНаДокумент.Дата);
Запрос.УстановитьПараметр("Номенклатура", ТекущаяСтрока.Номенклатура);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
    НаименованиеДляВывода = Результат.Наименование;
КонецЕсли;

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

Вариант 5. Использование справочника «Номенклатура поставщиков»

Если переименование связано с тем, что разные поставщики называют один и тот же товар по-разному, разберем типовой механизм Номенклатура поставщиков. Он позволяет:

Однако помните, что для исходящих документов (ваших продаж) этот механизм напрямую не предназначен, и здесь лучше придерживаться стратегии создания новых карточек или использования расширения.

Итоги и рекомендации

Подводя итоги, выделим основные тезисы нашего разбора:

  1. Для контроля за действиями пользователей всегда включайте Версионирование объектов.
  2. Помните, что 1С печатает текущие данные. Переименование «задним числом» — это методологическая ошибка.
  3. Если название изменилось принципиально (был «Стол», стал «Стул») — создавайте новую карточку.
  4. Для реализации сложной логики печати «как было тогда» используйте расширения конфигурации и периодические регистры сведений.

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

← На главную