регистр сведений в табличное поле
Как создать табличку регистра с отбором в справочнике или документе на управляемой форме
Решение задачи на самом деле очень простое, нам нужно в самой форме, на вкладке «Командный интерфейс» поставить галочку Автовидимость и видимость. Тогда с лева на форме у нас появится ссылка на наш регистр с уже готовым отбором.
НО! А что если нужно это все дело организовать другим способом, например на форме поставить табличку, и что бы можно было прямо от туда добавлять записи в регистр. Тогда:
1. На форме на панели реквизитов добавляем новый реквизит с типом: «ДинамическийСписок».
2. Выбираем тип основной таблицы с нашем регистром например.
3. Размещаете токшо созданый реквизит на форму.
4. Прописать сам отбор в событии формы «ПриСозданииНаСервере»:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НовыйЭлемент = Водители.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
НовыйЭлемент.Использование = Истина;
НовыйЭлемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«ТранспортноеСредство»);
НовыйЭлемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовыйЭлемент.ПравоеЗначение = Объект.Ссылка;
Все. Можно конечно сделать и другим образом, еще одмин вариантом, указать в нашем динамическом списке произвольный запрос, и при создании на сервере все ровно указать значение параметра запроса, но таким образом при добавлении новой записи в регистр прийдется заново указовать все параметры.
Регистры сведений в 1С. Примеры программной работы
В статье рассмотрено описание и предназначение регистров сведений, а также примеры работы с регистрами сведений средствами встроенного языка 1С — создание и редактирование наборов записей, отдельных записей, работа с ключом записи.
Содержание
Регистры сведений в 1С 8
Что такое регистр сведений
Регистр сведений — это объект конфигурации, который предназначен для хранения произвольной информации в разрезе нескольких измерений. Например, можно хранить соответствие материально-ответственных лиц и складов, курсы валют или цену на товары. Можно представить регистр сведений как многомерную таблицу, где на каждом пересечении измерений хранятся значения, которые называются Ресурсы.
Помимо измерений и ресурсов, у регистров сведений могут быть определены реквизиты — вспомогательная информация, служащая для уточнения данных — например, ответственный пользователь, комментарий и т.п.
Значения в регистре сведений могут храниться не только в разрезах измерений, но также они могут быть развернуты во времени. В этом случае к записям добавляется стандартное измерение Период. Регистры с информацией, развернутой во времени, называются периодическими.
Периодические регистры сведений позволяют получить информацию о срезе наиболее ранних или наиболее поздних записей.
Строки в многомерной таблице регистра сведений называются записями. Уникальность записей регистра сведений определяется как комбинация измерений и периода. В случае, если регистр сведений не периодический, то период будет не заполнен, и уникальные записи будут отличаться по комбинации измерений. Платформа не допускает создания двух записей с одинаковым набором измерений и периодом. Измерения и период образуют т.н. составной ключ, и называются ключевыми полями.
Записи в регистр сведений могут вноситься как вручную, независимо одна от другой, так и при помощи документов, единым набором. Документ, которым вносится запись в регистр сведений, называется регистратором.
Свойства регистра сведений. Основные настройки
Основные свойства регистра сведений, уникальные только для этого объекта метаданных — это Периодичность и Режим записи. Рассмотрим создание и настройку регистра сведений на примере хранения тарифов работников.
Периодичность регистра сведений
Данное свойство отвечает за доступность стандартного реквизита Период. Периодичность может быть
В случае, если регистр сведений подчинен регистратору (см. ниже), становится доступным еще один вариант периода — по позиции регистратора.
Поле Период входит в составной ключ записи; можно добавлять записи с одинаковым составом измерений, но с разным периодом. Если периодичность — по позиции регистратора, то дата документа может совпадать с точностью до секунды — все равно это будут разные записи, т.к. в этом случае позиция регистратора будет определяться как момент времени (Дата + ссылка на документ). В зависимости от выбранной периодичности, период записи будет автоматически приводиться к началу периода в свойстве Периодичность. Например, если указана периодичность «В пределах дня», то к началу суток, если «В пределах месяца» — то соответственно к первому числу месяца, и т.д.
Режим записи регистра сведений 1С
Режим записи определяет, можно ли редактировать записи регистра сведений вручную, или они будут вноситься движениями документа-регистратора. Для регистров сведений с режимом записи «Независимый» можно указывать основной отбор для измерений. В случае, если при этом регистр сведений периодический, становится возможным указание флажка Основной отбор по периоду.
Что такое ведущее измерение и основной отбор?
Флаг Ведущее у измерения регистра сведений означает, то данная запись имеет смысл пока существует объект, ссылка на который хранится в данном измерении. Например, если удалить из базы данных сотрудника «Иванов Иван», то автоматически из регистра сведений будут удалены все записи по тарифам, где в измерении «Сотрудник» был указан Иванов Иван. Если данный флаг не установлен, то при удалении объекта, записи остались бы в регистре с битой ссылкой на него.
Также свойство «Ведущее» у измерения отвечает за построение пользовательского интерфейса. В карточке объекта, который является ведущим измерением, появляется гиперссылка для быстрого перехода к регистру сведений с отбором по текущему объекту.
Если регистр независимый, по этим измерениям будет устанавливаться регистрация изменений для плана обмена. Аналогично использование Основной отбор по периоду включает основной отбор для период для периодических регистров.
Проектирование структуры регистра сведений
Следует стараться избегать архитектурных решений, когда значение одного ресурса регистра сведений меняется значительно чаще чем значение другого. В этом случае целесообразно выделить такие ресурсы в отдельный регистр сведений. Это связано с тем, что в момент записи записываются все ресурсы, а не только измененный, что приводит к неоправданной нагрузке на СУБД.
Получение данных из нескольких ресурсов одного регистра сведений выполняется быстрее, чем получение одного ресурса из нескольких регистров
Следует внимательно отнестись к вопросу — какие поля многомерной таблицы должны быть измерениями, а какие — ресурсами. В зависимости от прикладной задачи, подход может быть различным.
Например, мы хотим знать, какие материально ответственные лица закреплены за тем или иным складским помещением. Если таких МОЛ более одного человека, то правильная архитектура регистра будет такая:
Измерения: МОЛ
Ресурсы: Склад
Если же нам требуется гарантировать, что у одного склада может быть только одно материально ответственное лицо, то состав регистра сведений будет следующий:
Программная работа с регистром сведений в 1С 8.3
Программная запись в регистр сведений
Добавление записей в регистр сведений выполняется с помощью набора записей. Набор записей — это коллекция нескольких записей регистра сведений.
Для добавление новых записей в регистр сведений нужно:
Набор записей с установленным отбором можно назвать гранулой. Запись в регистр сведений выполняется гранулами.
Если при записи не устанавливать отбор, то будет перезаписан весь регистр сведений, все предыдущие записи будут удалены:
Можно установить отбор только по одному измерению и сразу добавить несколько записей:
То есть при записи выполняется добавление новых записей с замещением тех записей, которые удовлетворяют установленному отбору.
Но если в метод Записать набора записей передать параметр Ложь, то запись будет выполнена с добавлением новых записей:
В результате в регистр сведений будет добавлена новая запись, но при этом все предыдущие записи не были удалены.
Если попытаться добавить в регистр сведений записи, которые не совпадают с установленным отбором, то будет выброшено исключение «Запись не верна! Значение поля не соответствует установленному отбору»:
Запись в регистр сведений, подчиненный регистратору может выполняться только с отбором по регистратору. В обработке проведения отбор по регистратору устанавливается автоматически, но если запись выполнять в другом месте, то нужно сделать это вручную:
Отбор записей регистра сведений
Отбор позволяет не только установить гранулу при записи в регистр сведений, но и прочитать нужные записи регистра. Например, можно получить все записи по одному товару:
После установки отбора набора записей, мы прочитали данные из регистра методом Прочитать. Данный метод загрузил в переменную НаборЦен все записи, удовлетворяющие отбору. После этого их можно перебрать в цикле и через точку обращаться к полям записи регистра.
Удаление записей регистра сведений
Чтобы удалить запись из регистра сведений нужно создать набор записей, установить необходимый отбор и записать пустой набор записей:
Чтобы очистить весь регистр сведений можно записать пустой набор записей без отбора:
Если регистр сведений подчинен регистратору, то нужно устанавливать отбор по документу-регистратору:
Если нужно удалить записи с отбором по ресурсу, то можно запросом выбрать необходимые записи, в цикле установить по нужным измерениям отбор и записать пустой набор записей:
В данном примере мы удалили все записи, у которых цена больше или равна 500. Но можно было решить ее от обратного: выбрать все записи, у которых цена меньше 500, создать набор записей и загрузить в него результат запроса. Так как отбор не был установлен, то весь регистр будет перезаписан и в нем останутся только те записи, где цена меньше 500:
Изменение записей регистра сведений
Чтобы изменить существующие записи регистра сведений нужно сначала прочитать их через набор записей, потом перебрать в цикле, изменить и записать набор записей. Например, увеличим все цены по одному типу цен на 10%:
Можно в запросе выбрать все измерения и период (для периодического регистра) и также изменить через набор записей, установив необходимый отбор:
Если регистр сведений подчинен регистратору, то отбор нужно устанавливать по регистратору:
Менеджер записи регистра сведений
Менеджер записи регистра сведений используется при интерактивном редактировании записи регистра сведений. Когда мы открываем форму записи, то чтение выполняется именно через менеджер записи. Когда нажимаем на форме записи кнопку Записать, то запись выполняется через менеджер записи.
Менеджер записи доступен только для регистров сведений с режимом записи Независимый.
Записать табличное поле документа в регистр сведений
Нужно записать данные из табличного поля документа в регистр сведений при проведении документа.
Регистр сведений:
Измерения: Название, сотрудник (по ним идет индексация).
Ресурсы: статус.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Табличное Поле
Всем привет! Недавно начал изучать 1С 8.1 Программирование и столкнулся пока что с неразрешимой для.
Табличное Поле
Всем привет! Недавно начал изучать 1С 8.1 Программирование и столкнулся пока что с неразрешимой для.
Регистр Сведений
Есть регистр сведений НоменклатураКонтагентов с измерениями: Период, Контрагент, Номенклатура.
Регистр сведений
Приветствую. Расскажите про регистр сведений. Не могу никак разобраться. Объясните на пальцах.
РегистрСведений.РегистрСведений1: Ни один из документов не является регистратором для регистра
Введение в конфигурирование 1С, от Xomych =)))
Я так сделал, но не пойму, как ваш код должен работать. Переменная «регистр» не определена. А при попытке ее определить, как у меня раньше было, вылетает ошибка:
«Менеджер записи не может быть использован для регистра с режимом записи «Подчинение регистратору»»
Просто воспользуйтесь конструктором движений в документе, он вам сгенерит точно такой же код.
Можно конечно и программно его заполнить без привязки к регистратору, но только не через МенеджерЗаписи, а через РегистрСведенийНаборЗаписей
Уважаемый delphi_Int, не рановато ли вам подсказывать? Код крайне не оптимальный.
Добавлено через 9 минут
Добавлено через 2 минуты
Т.е. на момент выполнения запроса строк в результате запроса будет 5 т.к. в регистре их 5
Добавлено через 1 минуту
Почему не привести к одному типу.
Вместо
ЕСТЬNULL(КопияДокСрезПоследних.Номенклатура, 0)
ЕСТЬNULL(КопияДокСрезПоследних.Номенклатура, Значение(Справочник.Номенклатура.ПустаяСсылка))
что бы не заставлять платформу сравнивать разные типы.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Регистр сведений
Здравствуйте! Подскажите пожалуйста, есть справочник номенклатура и регистр сведений цены. Я создал.
Регистр сведений, СрезПоследних
Объясните пожалуйста. Есть к примеру Регистр Сведений. В нем такие записи к примеру о изменениях.
Заполнить Табличную часть документа из Регистра сведений
Здравствуйте уважаемые эксперты! Прошу вашей помощи, сильно не ругайтесь (учусь).
Есть документ Инвентаризация, у него есть Табличная часть «Товары» у которой есть реквизит «МестоХраненияНаСкладе» с типом (Строка, Число). Есть Регистр Сведений «МестаХраненияНоменклатуры» с ресурсом «МестоХранения» (СправочникСсылка.МестаХранения).
Нужно так чтобы для всех позиций номенклатуры заполнялся реквизит «МестоХраненияНаСкладе» из Регистра Сведений «МестаХраненияНоменклатуры», физически Место хранения прописывается пользователем в карточке номенклатуры.
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| МестаХраненияНоменклатуры.Номенклатура,
| МестаХраненияНоменклатуры.МестоХранения
|ИЗ
| РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
|ГДЕ
| МестаХраненияНоменклатуры.Номенклатура В (&МассивНоменклатуры)»;
МассивНоменклатуры = Новый Массив;
Для Каждого СтрТЧ Из Товары Цикл
Если ЗначениеЗаполнено(СтрТЧ.Номенклатура)
И МассивНоменклатуры.Найти(СтрТЧ.Номенклатура) = Неопределено Тогда
МассивНоменклатуры.Добавить(СтрТЧ.Номенклатура);
КонецЕсли;
КонецЦикла;
Запрос.УстановитьПараметр(«МассивНоменклатуры»,МассивНоменклатуры);
ВремТаб = РезультатЗапроса.Выгрузить();
ВремТаб.Индексы.Добавить(«Номенклатура»);
Для Каждого СтрТЧ Из Товары Цикл
Если ЗначениеЗаполнено(СтрТЧ.Номенклатура) Тогда
СтрокаТаб = ВремТаб.Найти(СтрТЧ.Номенклатура,»Номенклатура»);
Если СтрокаТаб <> Неопределено Тогда
СтрТЧ.МестоХранения = СтрокаТаб.МестоХранения;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Ошибку выдал «<Документ.ИнвентаризацияТоваровНаСкладе.Форма.ФормаДокумента.Форма(1043)>: Поле объекта не обнаружено (МестоХранения)
СтрТЧ.МестоХранения = СтрокаТаб.МестоХранения»