Регистр сведений в запросе 1с.

Примеры, с объяснением, как можно сделать запись в регистр сведений 1С

Создание одной записи в регистр сведений 1С.

Чтобы сделать запись в регистр сведений 1С необходимо воспользоваться менеджером записи.

Пример:

// Создаем менеджер записи
СоздатьКурсыВалют = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
// Устанавливаем измерения, ресурсы и устанавливаем период записи
СоздатьКурсыВалют.Валюта = СсылкаВалюта;
СоздатьКурсыВалют.Курс = Курс;
СоздатьКурсыВалют.Кратность = 1;
СоздатьКурсыВалют.Период = ТекущаяДата();
//Записываем получившуюся запись с замещением (если уже есть такая запись с такими измерениями и периодом)
СоздатьКурсыВалют.Записать(Истина);

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

Создание нескольких записей в регистр сведений 1С.

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

Пример:

//Создаем набор записей
НаборКурсыВалют = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
//Устанавливаем отбор по измерению
//Делаем цикл по таблице с курсами и добавляем записи
Для Каждого Строка Из ТаблицаКурсов Цикл
НоваяЗаписьКурс = НаборКурсыВалют.Добавить();
НоваяЗаписьКурс.Валюта = Строка.Валюта;
НоваяЗаписьКурс.Курс = Строка.Курс;
НоваяЗаписьКурс.Кратность = 1;
КонецЦикла;
НаборКурсыВалют.Записать();

В процессе выполнения программного кода, в регистре сведений «Курсы валют», будут сделаны записи по таблице «Таблица Курсов» с замещением.

Изменение записей регистра сведений с отбором

Если требуется изменить уже существующие записи, тогда Вам подойдет следующий код

Пример:

НаборКурсыВалют = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
НаборКурсыВалют.Отбор.Валюта.Установить(СсылкаВалюта);
//Прочитаем записи по отбору
НаборКурсыВалют.Прочитать();
Для Каждого ЗаписьНабора из НаборКурсыВалют Цикл
ЗаписьНабора.Курс = НовыйКурс;
КонецЦикла;
НаборКурсыВалют.Записать();

В результате выполнения вы установите новый курс у валюты, которая установлена в отборе.

Автоматическая подстановка цены в документ при выборе номенклатуры

Для этого нужно сделать две вещи:

  • Написать некую функцию, которая будет возвращать актуальную цену номенклатуры.
  • Вызвать эту функцию в тот момент, когда в документ добавляется номенклатура, и подставить в документ цену номенклатуры, которую вернет функция.

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

  • В режиме Конфигуратор

Создадим функцию РозничнаяЦена(), которая будет возвращать нам актуальную розничную цену номенклатуры, и поместим ее в общий модуль конфигурации:
Откроем конфигуратор, в ветке Общие > Общие модули добавим новый объект конфигурации Модуль и назовем его РаботаСоСправочниками .
Установим флажок Вызов сервера для того, чтобы экспортные процедуры и функции этого модуля можно было вызывать с клиента:

Рис. 9.3. Свойства РаботаСоСправочниками

Затем поместим в модуль следующий текст (см. Листинг 1):



Листинг 9.1. Редактируем Общий Модуль РаботаСоСправочниками

Для получения розничной цены мы будем передавать в функцию два параметра:

  • АктуальнаяДата - параметр типа Дата, определяет точку на оси времени, в которой нас интересует значение розничной цены.
  • ЭлементНоменклатуры - ссылка на элемент справочника Номенклатура, для которого мы хотим получить розничную цену.

Теперь эту функцию нужно вызвать в некоторый момент работы документа.

Вызов функции при выборе номенклатуры и заполнение цены в документе

1 - Найдем в конфигураторе документ ОказаниеУслуги и откроем его форму ФормаДокумента .
2 - Дважды щелкнем на элементе формы ПереченьНоменклатурыНоменклатура . Прокрутим список до конца, найдем событие ПриИзменении , которое возникает после изменения значения поля.
3 - Нажмем кнопку открытия со значком лупы в поле ввода. Система создаст шаблон процедуры обработчика этого события в модуле нашей формы и откроет закладку Модуль редактора формы. Внесем в него следующий текст (см. Листинг 2):



Листинг 9.2. Модуль редактора формы

  • В режиме 1С: Предприятие

Запустим 1С:Предприятие в режиме отладки и откроем регистр сведений Цены . Для элемента таблицы добавим другим числом новую цену.
Теперь откроем документ Оказание услуги № 1 . Оставим дату документа без изменения и повторим выбор тран-зистора в колонке Номенклатура табличной части документа. Автоматически установится последнее значение цены товара.

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

В данной статье мы рассмотрим первый тип регистра 1С — это регистр сведений .

Регистр сведений – это структура хранения информации, объект конфигурации платформы 1С версии 8. Сущность регистра сведений – хранение данных (ресурсов) по одному / нескольким разрезам информационных измерений. В качестве типа данных измерения может быть любой ссылочный тип платформы, типа "СправочникСсылка", "ДокументСсылка" и т.п, а также любой примитивный тип – число, строка, дата, булево.

Каждая запись регистра сведений представляет собой образно "коробочку", в которой хранятся какие-то данные, причем двух одинаковых коробочек (с одинаковым наполнением) быть не может. Платформа 1С не даст сохранить в информационной базе две одинаковые коробочки (записи) по регистру сведений с одними и теми же измерениями и ресурсами. Например, если попытаться записать в регистр сведений "Паспортные данные физических лиц" две одинаковые записи, тогда программа выдаст следующее сообщение об ошибке:

Платформа 1С 8 хранит регистр сведений в информационной базе как таблицу записей с конкретными колонками. Одна строчка в такой таблице – это одна запись регистра сведений. В каждой строчке находятся значения измерений и значения ресурсов. В качестве ресурсов как правило (но не обязательно) фиксируются данные типа число/строка/булево. Например, регистр сведений "Контактная информация" в качестве измерения будет иметь поле "Сотрудник" (типа "СправочникСсылка"), а в качестве ресурса поле "Контактный телефон" с типом "Строка".

Регистры сведений бывают периодическими, и непериодическими. Это значит, что каждая запись регистра может быть закреплена за конкретным моментом временем, а может быть и не закреплена. Если в базе данных нужно хранить по измерениям разные характеристики в разные интервалы времени (например, Регистр сведений "События ОС организаций" подразумевает фиксацию конкретного состояния за основным средством, пример – "ОС компьютер" – событие "Принято к учету"), тогда необходимо использовать периодический регистр сведений.

Периодичность регистра сведений может быть следующей: "непериодический", "по позиции регистратора" и в пределах года/квартала/месяца/дня/секунды. Периодичность подразумевает то, с какой даты начинает действовать информация по записи регистра (до следующей записи с такими же измерениями). Вариант периодичности – "по позиции регистратора" подразумевает ввод записи в регистр в результате проведения документа (документ – это и есть регистратор). Например, в типовой конфигурации 1С Бухгалтерия 8, имеется документ "Изменение состояния ОС", который при проведении делает движение, формирует новую запись по регистру с фиксацией нового состояния основного средства. Если удаляется документ, то соответствующие записи по регистру сведений с периодичностью "подчинение регистратору" (т.е. в нашем примере – подчинение удаляемому документу) также будут удалены.

Если регистр сведений будет являться периодическим, то у него в таблице базы данных будет присутствовать поле "Период" (доп.колонка в таблице регистра в информационной базе), т.е. по регистру будет записываться дополнительная информация по дате и времени. Это поле аналогично будет влиять на уникальность записи регистра сведений. Допустим, есть регистр с периодичностью месяц. Если в него сначала сохранить запись, указав в качестве даты 5 июня 2012 года (периодичность июнь), то при втором сохранении новой записи на 3 июня 2012 года предыдущая запись перезатрется новой.

Измерений в регистре сведений может быть много, но желательно ими не загружать таблицы информационной базы (не больше 8-ми), т. к. это может привести к быстрому разрастанию размера информационной базы, и как следствие невозможность работать с базой данных в файловом варианте (вы будете вынуждены переходить на серверный вариант работы информационной базы, например СУБД MS SQL 2008).

В свойствах измерения регистра сведений есть галка – "Ведущее", она подразумевает что запись в регистре будет храниться только в том случае, если выбранное измерение хранится в информационной базе. Например, измерение "Организация" с типом "СправочникСсылка", если из информационной базы удалится конкретная организация, то записи всех регистров (для которых измерение "Организация" является ведущим), в которых выбрана данная организация, тоже автоматически будут удалены.


Функциональность объекта платформы 1С регистр сведений (с точки зрения разработки конфигураций):

  1. Создание записи (метод "Добавить()" объекта РегистрСведенийНаборЗаписей).
  2. Изменение записи — конкретного ресурса или измерения, либо вообще дополнительного реквизита (метод "Прочитать()" объекта РегистрСведенийНаборЗаписей — для считывания данных из таблицы, и, затем необходимая корректировка, т.е. присваивание полю другого значения).
  3. Удаление записи ().
  4. Выбор записей, соответствующих конкретным параметрам (использование свойства "Отбор" объекта РегистрСведенийНаборЗаписей).
  5. Выбор записей на основе конкретного регистратора – документа основания записи.
  6. Получение значения ресурса записи регистра сведений
  7. Наличие виртуальной таблицы "СрезПервых" ("СрезПервых(началоПериода, структураОтбора)" — метод объекта РегистрСведенийМенеджер, получает первые записи регистра).
  8. Наличие виртуальной таблицы "СрезПоследних" ("СрезПоследних(конецПериода, структураОтбора)" — метод объекта РегистрСведенийМенеджер, получает последние записи регистра).

Регистры сведений

Регистр сведений по сути своей ближе всего к справочнику.

Однако есть ряд важных отличий, некоторые из которых перечислены ниже.

Во-первых регистр сведений не имеет ссылочной структуры, то есть у его записей нет уникальной ссылки, попросту свойства "Ссылка", поэтому на запись регистра сведений нельзя ссылаться.

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

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

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

Ну и напоследок ответ на вопрос, как осуществлять чтение и запись регистра сведений.

Чтение регистра сведений лучше всего осуществлять с помощью запроса. Работа с запросами является отдельной темой и в рамках данной статьи не рассматривается. Однако можно читать записи и без запроса с помощью нескольких методов объекта "РегистрСведенийМенеджер ".

  • Методы "Выбрать " и "ВыбратьПоРегистратору " позволяют получить выборку записей с учетом заданного отбора.
  • Метод "Получить " позволяет получить одну запись, для которой в параметрах метода передается отбор по всем ключевым реквизитам.
  • Методы "ПолучитьПервое " и "ПолучитьПоследнее " позволяют получить соответственно первую или последнюю запись периодического регистра сведений, удовлетворяющую заданному в параметрах метода отбору.
  • Методы "СрезПервых " и "СрезПоследних " позволяют получить соответственно срез первых или последних записей, удовлетворяющих заданному в параметрах метода отбору.

Кроме этих методов есть еще два метода, "СоздатьМенеджерЗаписи " и "СоздатьНаборЗаписей ", с помощью которых можно создать соответсвенно объект "РегистрСведенийМенеджерЗаписи " или "РегистрСведенийНаборЗаписей ", после чего задать значения всех или некоторых ключевых реквизитов и с помощью метода объекта "Прочитать " выполнить чтение в объект записей из базы, удовлетворяющих присвоенным значениям ключевых реквизитов.

В итоге получаем объект, содержащий нужные нам одну или несколько записей.

Запись же в регистр сведений производится с помощью уже упомянутых методов "СоздатьМенеджерЗаписи " и "СоздатьНаборЗаписей " объекта "РегистрСведенийМенеджер ". Можно либо создать объект, после чего заполнить реквизиты записи или список записей и записать объект с помощью метода "Записать ". Либо создать объект, задать значения всех или некоторых ключевых реквизитов, чтобы с помощью метода объекта "Прочитать " выполнить чтение в объект записей из базы, удовлетворяющих присвоенным значениям ключевых реквизитов, после чего выполнить метод "Очистить ", после чего уже выполнить метод "Удалить " или заполнить реквизиты записи или список записей и записать объект с помощью метода "Записать ".

Регистры сведений – это объекты конфигурации 1С, в которых хранится произвольная информация, которая не может дублироваться и суммироваться. Это могут быть данные о сотрудниках или поставщиках, цены на товары и другая информация. Данные добавляются в регистры сведений 1С с помощью некоторых документов – регистраторов. Например, для регистра сведений «Цены товаров» регистратором будет документ «Установка цен номенклатуры», в котором прописывается конкретная цена на товарные позиции.

Читайте, также информацию о регистрах накопления 1С

Регистры сведений 1С Предприятие 8.2 могут иметь или не иметь периодичность. Как известно, две одинаковой записи в данной объекте конфигурации быть не может. Но если какая-то информация периодически изменяется, можно использовать периодичность. К примеру, для регистра сведений «Курсы валют», нужно устанавливать периодичность «В пределах дня». Таким образом, каждый новый день обновленные курсы валют будут записываться новой записью, переписывая уже не актуальную информацию вчерашних курсов. Периодические регистры сведений имеют дополнительное поле «Период», в котором хранится дата и время. На рисунке Регистра сведений «Цены номенклатуры» имеется период (данный регистр периодический), регистратором является документ «Установка цен номенклатуры. Каждая строка регистра хранит информацию о типе цен, нужной номенклатуре и ее цене.

Регистры сведений 1с

Отличия регистров сведения от регистров накопления :

Новое значение регистра сведения обновляет предыдущую запись. В регистре накопления новая запись суммируется (или отнимается) с предыдущими данными.

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

Регистры сведений 1С могут быть независимыми от регистраторов, а регистры накопления всегда подчинены документам-регистраторам.

После ознакомления с регистрами, можно ознакомиться с документами-регистраторами, например, «Реализация товаров и услуг» или «Поступление товаров и услуг».

© 2024 ongun.ru
Энциклопедия по отоплению, газоснабжению, канализации