В процессе ведения учета в программе 1С:Бухгалтерия 8.3 (редакция 3.0) пользователи часто сталкиваются с необходимостью изменить наименование товара. Однако простое редактирование карточки Номенклатура таит в себе скрытую угрозу: при перепечатке старых документов (накладных, счетов-фактур) за прошлые периоды программа подставит актуальное (новое) название. Это может привести к расхождениям с бумажными оригиналами и проблемам при проверках.
В этой статье мы подробно разберем, как активировать механизмы отслеживания изменений, выясним, почему типовая печать не хранит историю, и рассмотрим технические способы решения задачи «исторической» печати.
Самый простой и правильный способ увидеть, кто, когда и что изменил в карточке товара — это стандартное версионирование. По умолчанию в конфигурации «Бухгалтерия предприятия» оно может быть отключено для экономии места в базе данных. Проанализируем процесс его включения и настройки:
Номенклатура.После включения этой опции в карточке номенклатуры появится кнопка История изменений (обычно находится в меню «Еще» или в верхней панели). Рассмотрим, что это дает: программа будет сохранять «снимки» объекта при каждом нажатии кнопки «Записать». Мы сможем сравнить две версии и увидеть, что поле НаименованиеПолное изменилось с «Товар А» на «Товар Б».
Если версионирование не было включено заранее, а узнать автора изменений нужно «вчера», попробуем обратиться к Журналу регистрации. Разберем, как это сделать:
Перейдем в Администрирование — Обслуживание — Журнал регистрации. Установим отбор по событию «Данные. Изменение» и выберем в качестве объекта конкретную позицию номенклатуры. Проанализируем ситуацию: стандартный журнал зафиксирует факт записи объекта пользователем, но, к сожалению, в базовом режиме он не покажет старое значение реквизита. Этот метод полезен только для выявления ответственного за правку.
Важно понимать фундаментальный принцип работы 1С: при формировании печатной формы (например, ТОРГ-12) программа обращается к ссылке на объект. Ссылка не меняется при переименовании, но данные по этой ссылке (название) теперь другие. Выясним, почему это критично:
Если вы отгрузили «Кабель медный» в январе, а в марте переименовали его в «Провод ПВ-3», то при попытке напечатать январскую накладную программа напишет в ней «Провод ПВ-3». С точки зрения методологии учета 1С, существенное переименование требует создания новой карточки номенклатуры. Для старой карточки в последних версиях БП 3.0 предусмотрен флаг Использование завершено, который скрывает ее из списков выбора.
Если бизнес-процесс компании все же требует автоматической печати старых названий без создания новых карточек, нам потребуется доработка. Рассмотрим по шагам, как реализовать механизм «периодического наименования» с помощью расширения, не снимая конфигурацию с поддержки:
Шаг 1. Создание периодического регистра сведений. В расширении создадим регистр ИсторияНаименований с измерением Номенклатура (тип СправочникСсылка.Номенклатура) и ресурсом НаименованиеДляПечати (тип Строка). Установим периодичность регистра «В пределах дня» или «Секунды».
Шаг 2. Подписка на событие. Создадим подписку на событие ПриЗаписи для справочника Номенклатура. При каждом изменении названия будем записывать в наш регистр новую запись с текущей датой.
Шаг 3. Модификация печатных форм. Нам потребуется перехватить запрос, который собирает данные для печати. Посмотрим на пример кода, который должен выполняться в процедуре формирования данных:
// Пример получения названия на дату документа
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИсторияНаименованийСрезПоследних.НаименованиеДляПечати КАК Наименование
|ИЗ
| РегистрСведений.ИсторияНаименований.СрезПоследних(&ДатаДокумента, Номенклатура = &Номенклатура) КАК ИсторияНаименованийСрезПоследних";
Запрос.УстановитьПараметр("ДатаДокумента", СсылкаНаДокумент.Дата);
Запрос.УстановитьПараметр("Номенклатура", ТекущаяСтрока.Номенклатура);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
НаименованиеДляВывода = Результат.Наименование;
КонецЕсли;
Проанализировав данный подход, мы увидим, что программа начнет искать название, актуальное именно на момент совершения операции, что полностью закроет вопрос соответствия документов.
Если переименование связано с тем, что разные поставщики называют один и тот же товар по-разному, разберем типовой механизм Номенклатура поставщиков. Он позволяет:
Однако помните, что для исходящих документов (ваших продаж) этот механизм напрямую не предназначен, и здесь лучше придерживаться стратегии создания новых карточек или использования расширения.
Подводя итоги, выделим основные тезисы нашего разбора:
Применение этих подходов позволит вам поддерживать порядок в справочниках и избежать претензий со стороны контролирующих органов при проверке первичной документации.