В процессе работы с платформой 1С 7.7 многие пользователи сталкиваются с тем, что справочники являются «плоскими» структурами. Когда вы изменяете наименование в карточке элемента справочника, это изменение моментально вступает в силу для всей базы данных — в том числе для старых документов, которые были проведены годы назад. Разберем, почему это происходит и как можно исправить ситуацию, сохранив корректность архивных данных.
Важно понимать архитектуру системы: документ в 1С хранит не текстовое значение наименования, а Ссылка (уникальный внутренний идентификатор) на элемент справочника. Когда вы открываете старый документ, система берет этот идентификатор, обращается к соответствующему элементу в справочнике и считывает его текущее значение реквизита Наименование. Поскольку справочник не хранит историю переименований, старые записи «подтягивают» текущее, измененное имя.
Самый надежный и архитектурно правильный способ избежать путаницы — это не переименовывать существующие элементы, а создавать новые. Рассмотрим шаги, которые необходимо предпринять:
Число или Булево).ОсновнаяГруппа (тип Справочник.Подразделения).ОсновнаяГруппа. Это позволит объединить показатели старого и нового элемента в один общий итог.Если создание новых элементов справочника категорически невозможно, можно пойти по пути «заморозки» данных непосредственно в документе. Разберем этот подход:
НаименованиеПодразделенияАрхив (тип Строка).
// Пример логики заполнения в модуле формы документа
Процедура ПриЗаписи()
// Запоминаем текущее название, чтобы оно осталось в документе навсегда
Если ПустоеЗначение(НаименованиеПодразделенияАрхив) = 1 Тогда
НаименованиеПодразделенияАрхив = Подразделение.Наименование;
КонецЕсли;
КонецПроцедуры
Минус этого метода: он требует внесения изменений во все модули документов и печатные формы, а также усложняет структуру базы данных. Если данные в документе потребуют корректировки, вам придется вручную обновлять этот «архивный» реквизит.
В 1С 7.7 существует мощный механизм — Периодический реквизит. Однако важно помнить, что штатный реквизит Наименование справочника не является периодическим. Если вы попытаетесь решить задачу через периодический реквизит, вам придется:
НаименованиеДляПечати.ПолучитьНаДату() для получения значения.
// Пример получения периодического значения на дату документа
ЗначениеНаДату = Подразделение.ПолучитьНаДату(ТекущаяДатаДокумента(), "НаименованиеДляПечати");
Этот путь является самым сложным с технической точки зрения и требует глубокого вмешательства в конфигурацию. Мы не рекомендуем этот метод, если вы не готовы к серьезной поддержке доработанного кода и возможных ошибок при обновлении конфигурации.
Проанализировав ситуацию, мы рекомендуем остановиться на первом варианте. Создание новых элементов справочника — это стандартная практика в управленческом учете. Она обеспечивает прозрачность данных: вы всегда видите, в каком именно подразделении работал сотрудник на момент принятия на работу. Сложности с отчетами, возникающие при этом методе, легко нивелируются созданием «связующего» реквизита для группировки данных в отчетах. Это позволит вам сохранить порядок в базе данных и избежать проблем с аудитом в будущем.