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