В 1с 7.7 у справочников были интересные реквизиты – периодические, они могли запоминать значение реквизита с привязкой к времени, работать с ними было не так чтобы очень уж удобно но, за неимением альтернатив, приходилось. После перехода на 8-ку многие программисты с удивлением обнаружили отсутствие периодических реквизитов в справочниках.
Типовые задачи, которые решаются с помощью периодических регистров сведений это хранение информации с привязкой к времени. Информация может быть разнородной это и цены на номенклатуру, и занимаемое работником должности в разные периоды времени, и параметры налогового учета предприятия. В 8 аналогом периодических реквизитов выступают периодические регистры сведенный.
Для того чтобы повторить функционал 7,7 нужно проделать следующее:
Создать регистр сведенный «ПереодическиеДанныеКонтрагента», указать, что это периодический регистр сведений с периодичностью день.
Теперь нам нужно добавить на закладке «Данные» - измерение «Контрагент» тип, которого совпадает со справочником, в котором мы хотим реализовать аналогичный периодическому реквизиту функционал. В ветку «Реквизиты» добавляем те реквизиты данные, которых привязаны ко времени. Для контрагента это могут быть юридический и физический адрес, основной телефон, имя руководителя, основной факс и т.д.
После сохранения конфигурации, получить доступ к регистру сведений можно будет через боковое меню (в режиме управляемого приложения), см. скриншот.
В режиме обычного приложения через кнопку «Перейти»
Но если мы посмотрим на заполненный регистр, то заметим что понять какая информация актуальная довольно сложно, поскольку мы видим весь набор данных вцелом, а не только актуальную на данный момент информацию.
Когда информации много можно легко ошибиться, желательно показывать актуальную на сегодня информацию в карточке контрагента. Тут уже без программирования не обойтись.
Для начала добавим на форму группу, которую назовем «Контактные данные» в нее добавим два реквизита «Руководитель» и «Телефон»
А в модуле формы на событие «ПриОткрытии» повесим действия по получению актуальных данных:
&НаКлиенте Процедура ПриОткрытии(Отказ) //Вставити вміст обробника дані=ОтриматиАктуальніДані(); попытка Директор =дані.керівник; исключение конецпопытки; попытка телефон =дані.телефон; исключение конецпопытки; КонецПроцедуры
Функция получения актуальных данных следующая:
функция ОтриматиАктуальніДані() //Вставити вміст обробника //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Даний фрагмент побудований конструктором. // При повторному використанні конструктора, внесені вручну зміни будуть втрачені!!! Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПеріодичніДанніКонтрагентаСрезПоследних.Контрагент, | ПеріодичніДанніКонтрагентаСрезПоследних.Керівник, | ПеріодичніДанніКонтрагентаСрезПоследних.Адреса, | ПеріодичніДанніКонтрагентаСрезПоследних.Телефон |ИЗ | РегистрСведений.ПеріодичніДанніКонтрагента.СрезПоследних КАК ПеріодичніДанніКонтрагентаСрезПоследних |ГДЕ | ПеріодичніДанніКонтрагентаСрезПоследних.Контрагент = &Контрагент"; Запрос.УстановитьПараметр("Контрагент", объект.Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); дані= новый структура; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставити обробку вибірки ВыборкаДетальныеЗаписи //ВыборкаДетальныеЗаписи.Керівник; дані.Вставить("керівник", ВыборкаДетальныеЗаписи.Керівник); дані.Вставить("телефон", ВыборкаДетальныеЗаписи.Телефон); Сообщить(ВыборкаДетальныеЗаписи.Телефон); КонецЦикла; Возврат дані ; //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА Конецфункции
Я воспользовался запросом, хотя можно использовать для этих целей и менее громоздкой конструкцией:
отбор = новый структура; отбор.Вставить("Контрагент",объект); данные = регистрысведений.КонтактнаІнформація.ПолучитьПоследнее(,отбор); сообщить(данные.Керівник); сообщить(данные.Количество());
Обратите внимание, то в функцию ПолучитьПоследнее передаются два параметра момент времени и отбор, но если нам нужно на текущий момент то первый параметр можно опустить, в отборе название ключа должно совпадать со значением измерения регистра.
Главное не забыть в регистре выставить соответствующие галочки на закладке «Прочие»
Если разобраться, то периодический регистр сведений это намного более гибкий инструмент по сравнению с периодическими реквизитами в 7.7. В типовых конфигурациях он широко используется.