Ликвидация бизнеса. Приказы. Оборудование для бизнеса. Бухгалтерия и кадры
Поиск по сайту

Периодические регистры сведений. Периодические регистры сведений Что такое периодические регистры сведений в 1с

Очень часто в запросах 1С приходится работать с датами. Особенно когда запрос строится к объектам метаданных в которых содержится периодическая информация. Как правило это регистры (сведений, накопления, расчета, бухгалтерии). Рассмотрим наиболее часто используемые функции языка запросов 1С для работы с датами. Примеры будем строить на основе регистра сведений РаботникиОрганизаций Конфигурации ЗУП редакция 2.5.

  • ДАТАВРЕМЯ

    Позволяет получить в запросе дату (со временем или без) путем указания года, месяца, дня, часа, минуты, секунды.
    Синтаксис:
    ДАТАВРЕМЯ(Год, Месяц, День, Час, Минута, Секунда)
    Обычно час, минута и секунда не указываются. Давайте приведем мини пример. Введите в консоли запросов следующий текст:

    ВЫБРАТЬ ДАТАВРЕМЯ(2016, 1, 1)

    В результате выполнения запроса получаем дату - 01.01.2016
    На самом деле трудно представить ситуацию в которой в запросе дата будет указываться таким образом. Ведь когда надо указать период используются параметры. Но есть случай когда эта функция представляет особую ценность. Это когда нам надо в полях или в условиях запроса указать пустую дату. Напомню, что для языка 1С пустая дата имеет вид - 0001.01.01. Таким образом, чтобы получить пустую дату в запросе достаточно указать ДАТАВРЕМЯ(1, 1, 1) . В качестве примера выберем из регистра сведений РаботникиОрганизаций записи у которых не заполнен ПериодЗавершения :

    ВЫБРАТЬ РаботникиОрганизаций.Период, РаботникиОрганизаций.Сотрудник, РаботникиОрганизаций.Должность, РаботникиОрганизаций.ПодразделениеОрганизации ИЗ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций ГДЕ РаботникиОрганизаций.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)

  • НАЧАЛОПЕРИОДА

    Для указанной даты возвращает начало периода в который она входит.
    Синтаксис:
    НАЧАЛОПЕРИОДА(Дата, ТипПериода)
    ТипПериода может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ
    В консоли запросов введите:

    ВЫБРАТЬ НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2016, 1, 15), МЕСЯЦ)

    Запрос вернет - 01.01.2016
    А теперь пример. Как известно периодичность у регистра РаботникиОрганизаций один день. Составим запрос в котором вместо действительного периода записей будет отображаться дата начала месяца.

    ВЫБРАТЬ НАЧАЛОПЕРИОДА(РаботникиОрганизаций.Период, МЕСЯЦ) КАК НачалоМесяца, РаботникиОрганизаций.Сотрудник, РаботникиОрганизаций.Должность, РаботникиОрганизаций.ПодразделениеОрганизации ИЗ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций

  • КОНЕЦПЕРИОДА

    Синтаксис такой же как и у начала периода. И как ясно из названия возвращает конец периода по дате и типу периода. Подробно рассматривать не будем. Ограничимся мини примером.
    Запрос:

    ВЫБРАТЬ КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(2016, 1, 15), МЕСЯЦ)

    Возвращает 31.01.2016 23:59:59
    Как видим значение возвращается с точностью до секунды.

  • ДОБАВИТЬКДАТЕ

    Добавляет к дате указанное количество временных интервалов.
    Синтаксис:
    ДОБАВИТЬКДАТЕ(Дата, ТипПериода, Количество)
    ТипПериода принимает те же значения, что и для функции НАЧАЛОПЕРИОДА
    Для примера выберем февральскую дату:

    ВЫБРАТЬ ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2016, 2, 15), МЕСЯЦ, 2)

    Получаем дату 15.04.2016 0:00:00 Несмотря на то, что февраль короткий месяц, день полученной даты тот же самый, что и у исходной. Очень удобно, что не приходится задумываться о количестве дней в месяцах.
    Количество может быть и отрицательным. Тогда отсчет интервала производится в обратную сторону.

  • РАЗНОСТЬДАТ

    Расчитыват разность между двумя датами в указанных единицах измерения.
    Синтаксис:
    РАЗНОСТЬДАТ(ДатаНачала, ДатаОкончания, ТипПериода)
    Тип периода может принимать значения: СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ, КВАРТАЛ, ГОД
    Например:

    ВЫБРАТЬ РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2016, 2, 15), ДАТАВРЕМЯ(2016, 3, 1), ДЕНЬ)

    возвращает 15

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

Регистр сведений 1С 8 — объект метаданных, предназначенный для хранения справочной информации в разрезе определенных разработчиком измерений.

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

Рассмотрим подробнее свойства и настройки регистра сведений.

Два главных свойства регистра сведения — Периодичность и Режим записи .

Это уникальные свойства регистра сведений, которых больше нет ни у одного объекта метаданных. Рассмотрим их подробнее.

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

Периодичность может принимать следующие значения:

  • Непериодический
  • В пределах секунды
  • В пределах дня
  • В пределах месяца
  • В пределах квартала
  • В пределах года

Получите 267 видеоуроков по 1С бесплатно:

При выборе периодичности, отличной от варианта Непериодический, система будет контролировать уникальность записей в пределах заданного промежутка времени. Если запись не уникальна, система 1C выдаст сообщение и не даст произвести запись в базу данных.

А одна из главных особенностей периодического регистра сведений — возможность получать готовые значения «Среза первых» и «Среза последних». Эта информация позволяет очень быстро получить из базы данных информацию о последнем (первом) установленном значении на определенную дату.

Режим записи регистра сведений

В 1С 8.2 и 8.3 это свойство может быть либо в значении «Независимый», либо — «Подчинение регистратору». В первом случае записи можно будет произвести как программно, так и из формы списка регистра сведений. Во втором случае обязательно указание документа-регистратора записи. Это накладывает определенные ограничения, но в то же время открывает новые возможности.

Свойства измерения регистра сведений

Также следует обратить внимание на палитру свойств измерений регистра сведений 1С 8.3. Особенно на флаги Ведущее и Основной отбор:

  • Ведущее — свойство измерения, подразумевающее под собой информацию о том, что без значения этого измерения запись регистра не имеет смысл. На деле это означает что система при удалении значения из измерения удаляет еще и запись регистра с «Ведущим» измерением. Может быть установлено только одно измерение.
  • Основной отбор — если регистр независимый, по этим измерениям будет устанавливаться регистрация изменений для плана обмена. Аналогично использование Основной отбор по периоду включает основной отбор для период для периодических регистров.

Программная запись в регистр сведений 1С

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

Использование менеджера записи:

НоваяЗапись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоНаименованию(«USD»);
НоваяЗапись.Период = Дата(31,12,2016);
НоваяЗапись.Курс = 100;
НоваяЗапись.Кратность = 1;
НоваяЗапись.Записать();

Использование набора записей регистра сведений 1С:

НовыйНаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
//если вы не установите отбор — удалятся все записи регистра сведений
НовыйНаборЗаписей.Отбор.Валюта.Установить(Доллар, Истина);
НовыйНаборЗаписей.Отбор.Период.Установить(Дата(31,12,2016), Истина);
//формируем непосредственно запись набора
НоваяЗаписьНабора = НовыйНаборЗаписей.Добавить();
НоваяЗаписьНабора.Валюта = Справочники.Валюты.НайтиПоНаименованию(«USD»);
НоваяЗаписьНабора.Период = Дата(31,12,2016);
НоваяЗаписьНабора.Курс = 100;
НоваяЗаписьНабора.Кратность = 1;
НовыйНаборЗаписей.Записать();

Регистры сведений 1С это структурированный набор данных с измерениями и ресурсами. Предназначен для хранения периодической информации.

Периодичность

Информация хранится в разрезе измерений и периода. Регистру сведений, можно задать периодичность:

  • Непериодический
  • по регистратору
  • секунда
  • неделя
  • месяц
  • квартал

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

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

Регистраторы

Если делать запись в регистр сведений с помощью документа, нужно установить режим записи: «Подчинение регистратору» и выбрать документ, которым будет делаться запись в регистр. Тогда в регистре появится поле «Регистратор», где будет храниться информация, каким документом была сделана запись. Так же регистратор можно использовать как период, для этого укажите в поле «Периодичность» — «По регистратору». Подчинение регистратору делают, когда требуется жестко привязать регистр к документу и изменение записей в регистре в ручном режиме становится не доступным.

Документы, которые будут в роли регистраторов, может быть несколько. Для того чтобы добавить регистратор, нужно зайти в свойства нужного регистра сведений, перейти на вкладку «Регистраторы» и установить галочки напротив документов, которые будут выполнять роль регистратора.

Посмотреть движения, которые делает регистратор можно из документа. Для этого нужно зайти в интересующий Вас документ, нажать: Перейти – Движения документа по регистратору.

В свойствах регистра не забудьте добавить права, их можно назначить на вкладке «Права». Затем в списке ролей нужно выбрать роль, которой требуется добавить права на регистр и в списке прав установить права на для выбранной роли.

Уникальность записей

Уникальность записи зависит от периода и измерений. Например, если вы хотите записать в регистр «Цены номенклатуры» запись с одинаковыми измерениями, в один и тот же день, то у вас это не получится и программа вызовет ошибку, так как периодичность регистра в пределах дня.

Если периодичность задана регистратором, он так же участвует в уникальности записи.

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

Формы

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

Для редактирования / создания, используйте форму записи, если запись подчинена регистратору, тогда поле будет не доступно и форму создать не получится.

Добавлять формы нужно в конфигураторе, зайдя в регистр сведений, во вкладке «Формы» и нажать на «лупу» у нужного вида формы. Далее откроется окно, где можно настроить поля будущей формы (расположение, названия и прописать функционал).


Измерения, ресурсы и реквизиты

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

У измерений есть галочка «Ведущее», если она установлена то запись будет храниться в базе данных, пока существует данное измерение. Ведущих измерений можно сделать несколько. Например, в регистре сведений «Цены номенклатуры», ведущим измерением является номенклатура, если удалить номенклатуру, которая участвует в записи, тогда автоматически удалится запись в регистре сведений по этой номенклатуре.

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

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

С регистром сведений можно производить следующие действия:

  • Удаление записи в регистре сведений 1С

Особенности

— Уникальность записей по набору измерений: каждая запись в регистре сведений — это новое значение ресурса.

— Записи регистра сведений могут быть как периодические, так и нет.

— Регистр сведений может быть зависимым и независимым от регистратора.

— Есть возможность сделать срез первых и последних записей на нужную дату. Это реализовано виртуальными таблицами: «СрезПервых» и «СрезПоследних». Для использования этих таблиц можно воспользоваться как отбором, так и запросом (в конструкторе запросов вы уведите эти виртуальные таблицы и сможете сделать по ним запрос). Эти таблицы будут доступны, если регистр сведений периодический.

Регистр «Цены номенклатуры» — периодический регистр сведений, записи производиться по регистратору.

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

Регистр подчинен документу «Установка цен номенклатуры». Значит, запись в регистр происходит из этого документа. Движения по конкретному документу можно посмотреть из формы документа «Установка цен номенклатуры».

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

Заключение: после прочтения статьи Вы сможете создать регистр сведений 1С, добавить измерения и ресурсы, настроить формы редактирования и списка. Создать запись и сделать выборку существующих записей. Если остались вопросы, воспользуйтесь комментариями в статье, постараюсь оперативно дать ответ на интересующий Вас вопрос.

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

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

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

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

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

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

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

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

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

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


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

& НаКлиенте Процедура ПриОткрытии(Отказ) //Вставити вміст обробника дані= ОтриматиАктуальніДані() ; попытка Директор = дані. керівник; исключение конецпопытки ; попытка телефон = дані. телефон; исключение конецпопытки ; КонецПроцедуры

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

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

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

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

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

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

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