новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Периодические реквизиты в 1с 8

  • Добавить свою публикацию
  • для этого требуется регистрация

В 1с 7.7 у справочников были интересные реквизиты – периодические, они могли запоминать значение реквизита с привязкой к времени, работать с ними было не так чтобы очень уж удобно но, за неимением альтернатив, приходилось. После перехода на 8-ку многие программисты с удивлением обнаружили отсутствие периодических реквизитов в справочниках.

Типовые задачи, которые решаются с помощью периодических регистров сведений это хранение информации с привязкой к времени. Информация может быть разнородной это и цены на номенклатуру, и занимаемое работником должности в разные периоды времени, и параметры налогового учета предприятия. В 8 аналогом периодических реквизитов выступают периодические регистры сведенный.

 

Для того чтобы повторить функционал 7,7 нужно проделать следующее:

Создать регистр сведенный «ПереодическиеДанныеКонтрагента», указать, что это периодический регистр сведений с периодичностью день.

 Изображение

Теперь нам нужно добавить на закладке «Данные» - измерение «Контрагент» тип, которого совпадает со справочником, в котором мы хотим реализовать аналогичный периодическому реквизиту функционал. В ветку «Реквизиты» добавляем те реквизиты данные, которых привязаны ко времени. Для контрагента это могут быть юридический и физический адрес, основной телефон, имя руководителя, основной факс и т.д.

 Изображение

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

Изображение 

В режиме обычного приложения через кнопку «Перейти»

Изображение 

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

ИзображениеКогда информации много можно легко ошибиться, желательно показывать актуальную на сегодня информацию в карточке контрагента. Тут уже без программирования не обойтись.

Для начала добавим на форму группу, которую назовем «Контактные данные» в нее добавим два реквизита «Руководитель» и «Телефон»

Изображение
 

А в модуле формы на событие «ПриОткрытии» повесим действия по получению актуальных данных:

 

&НаКлиенте

Процедура ПриОткрытии(Отказ)

            //Вставити вміст обробника

дані=ОтриматиАктуальніДані();    

попытка

Директор =дані.керівник;

исключение

конецпопытки;

 

попытка

телефон =дані.телефон;

исключение

конецпопытки;

 

КонецПроцедуры

 

 

 

Функция получения актуальных данных следующая:

 

функция ОтриматиАктуальніДані()

            //Вставити вміст обробника

            //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

            // Даний фрагмент побудований конструктором.

            // При повторному використанні конструктора, внесені вручну зміни будуть втрачені!!!

 

            Запрос = Новый Запрос;

            Запрос.Текст =

                        "ВЫБРАТЬ

 | ПеріодичніДанніКонтрагентаСрезПоследних.Контрагент,

 | ПеріодичніДанніКонтрагентаСрезПоследних.Керівник,

 | ПеріодичніДанніКонтрагентаСрезПоследних.Адреса,

 | ПеріодичніДанніКонтрагентаСрезПоследних.Телефон

 |ИЗ

 | РегистрСведений.ПеріодичніДанніКонтрагента.СрезПоследних КАК ПеріодичніДанніКонтрагентаСрезПоследних

 |ГДЕ

 | ПеріодичніДанніКонтрагентаСрезПоследних.Контрагент = &Контрагент";

 

            Запрос.УстановитьПараметр("Контрагент", объект.Ссылка);

 

            РезультатЗапроса = Запрос.Выполнить();

 

            ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

дані= новый структура;

            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

                        // Вставити обробку вибірки ВыборкаДетальныеЗаписи

                        //ВыборкаДетальныеЗаписи.Керівник;

                        дані.Вставить("керівник", ВыборкаДетальныеЗаписи.Керівник);

                        дані.Вставить("телефон", ВыборкаДетальныеЗаписи.Телефон);

                        Сообщить(ВыборкаДетальныеЗаписи.Телефон);

 

            КонецЦикла;

Возврат дані ;

            //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

           

Конецфункции

 

 

 

Я воспользовался запросом, хотя можно использовать для этих целей и менее громоздкой конструкцией:

 

        

отбор = новый структура;

            отбор.Вставить("Контрагент",объект);

            данные = регистрысведений.КонтактнаІнформація.ПолучитьПоследнее(,отбор);

            сообщить(данные.Керівник);

            сообщить(данные.Количество());

 

 

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

Главное не забыть в регистре выставить соответствующие галочки на закладке «Прочие»

 Изображение

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

 
0
Читайте также
Опасность в реквизите с типом "ХранилищеЗначения"
Почему не надо хранить данные двоичные в реквизите документов
Общие реквизиты и серверная SQL-база
"Снижают ли общие реквизиты производительность конфигурации"
Разработки
Перенос данных (подокументно) из Бухгалтерии, Комплексной, Зарплата+Кадры в Комплексную автоматизацию и УПП
Обработка для переноса данных из Бузгалтерии, Комплексной, ЗиК в УПП и Комплексную автоматизацию
Прайс для УТ 10.3
Прайс-лист (УТ 10.3)
Заполнение Статьи движения денежных средств в документах
Позволяет проставить реквизит в шапке документа
Еще от автора
≡ к списку статей