Как сделать форму выбора для регистра сведений

Добавил пользователь Валентин П.
Обновлено: 04.10.2024

Подскажите, каким образом можно сделать следующее:
Имею форму. На форме кнопка и несколько полей. Жму на кнопку - вызывается формасписка регистра сведений (в качестве формы выбора). Выбираю нужную мне запись регистра сведений. Окно списка закрывается. Некоторые значения данных из выбранной записи должны быть занесены в поля на форме.

Естественно, много гуглил. Взял за основу вариант http://pro1c.org.ua/index.php?showtopic=276.
Но в 8.2 мне его никак "не уложить".

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

Также есть код в формесписка для обработки выбора записи:

Дык вот ошибка в строке:
ФормаРС.ВладелецФормы = ЭтаФорма;.
Пишет - несоответствие типов.
Пробовал писать сюда:
ФормаРС = РегистрыСведений["Приложения"].ПолучитьФорму("ФормаВыбора", ЭтаФорма);
Пропускает "мимо ушей". Значение ВладелецФормы остается "Неопределено".

клиент то тонкий вероятно. будем СП читать про ОткрытьФорму() или дальше мудрить?

А что говорит?

: Переменная не определена (РегистрыСведений)
ФормаРС = >РегистрыСведений["Приложения"].ПолучитьФорму("ФормаВыбора"); (Проверка: Тонкий клиент)

&НаКлиенте
Процедура ПриложениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДанныеКлюча = Новый Структура("Период, Приложение", ЭтаФорма.Элементы.ПриложениеПериод, ЭтаФорма.Элементы.Приложение);
Ключ = РегистрыСведений["Приложения"].СоздатьКлючЗаписи(ДанныеКлюча);

// Создадим форму регистра и откроем ее
//ФормаРС = РегистрыСведений["Приложения"].ПолучитьФормуСписка("ФормаВыбора", ЭтаФорма.Элементы.Приложение);
ФормаРС = РегистрыСведений["Приложения"].ПолучитьФорму("ФормаВыбора");
ФормаРС.Параметры.КлючНазначенияИспользования=Ключ;
ФормаРС.Параметры.РежимВыбора = Истина;
ФормаРС.ВладелецФормы = ЭтаФорма;
ФормаРС.ОткрытьМодально();
КонецПроцедуры

При использовании ОткрытьФорму( , , , , ) нужно задействовать .

При использовании ОткрытьФорму( , , , , ) нужно задействовать .

Значение ключа можно "подготовить" на клиенте?
Если мне нужно отобрать записи регистра сведений за определенный период?

Вот как я пока сделал.

У формысписка (форме для выбора) сделал две процедуры:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЭтаФорма.Список.ПроизвольныйЗапрос=Истина;
ЭтаФорма.Список.ТекстЗапроса ;
ЭтаФорма.Список.Параметры.УстановитьЗначениеПараметра("АктуальнаяДата", Параметры.АктуальнаяДата);
КонецПроцедуры

А в форме, из которой вызываю формусписка так:
// Приложение - элемент формы

&НаКлиенте
Процедура ПриложениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыВыбора = Новый Структура;
ПараметрыВыбора.Вставить("РежимВыбора", Истина);
ПараметрыВыбора.Вставить("ЗакрыватьПриВыборе", Истина);
ПараметрыВыбора.Вставить("ТолькоПросмотр", Истина);
ПараметрыВыбора.Вставить("АктуальнаяДата", Запись.Период);
ПараметрыВыбора.Вставить("Приложение", Запись.Приложение);
ПараметрыВыбора.Вставить("ПриложениеПериод", Запись.ПриложениеПериод);
ОткрытьФорму("РегистрСведений.Приложения.Форма.ФормаДляВыбора",ПараметрыВыбора,ЭтаФорма.Элементы.Приложение);
КонецПроцедуры

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

Открытие формы с отбором в обычном приложении

В обычном приложении (я пробовал на платформе 8.2.18.102) я знаю только один способ открытия формы списка или формы выбора с отбором (буду рад увидеть другие варианты), выглядит он примерно так:

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

Открытие формы с отбором в управляемом приложении

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

Своё знакомство с управляемым приложением 1С как разработчик я начал достаточно давно, но некоторые примеры разработки управляемого приложения повергают меня в шок до сих пор. Один из таких примеров — программное открытие управляемой формы записи регистра сведений.

Рассмотрим пример программного открытия управляемой формы уже существующей записи регистра сведений.

1с открыть форму регистра сведений с отбором

Открытие управляемой формы 1С записи регистра сведений

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

Процедура в итоге выглядела следующим образом:

&НаКлиенте
Процедура СчетаУчетаНоменклатурыПередНачаломИзменения(Элемент, Отказ)

ПередаваемыеПараметры = Новый Структура; //формируем структуру полей измерений

  1. занесли в структуру значения измерений;
  2. поместили структуру в массив;
  3. с помощью массива создали ключ записи;
  4. с помощью ключа записи открыли форму.

Почему так сложно?

Этот способ я подсмотрел в типовой конфигурации. Я не очень понимаю, зачем в итоге такая длинная цепочка, если кто-то видел более простой способ. Просьба, напишите, как, в комментариях, буду очень Вам благодарен. Спасибо!

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

ФизЛицо — Справочник.Ссылка
Событие — Строка
Дата

Формируется отчет, в котором присутствуют эти поля.

В процедуре ОбработкаРасшифровки, опираясь на материалы Вашего сайта, написала следующее:

Код 1C v 8.2 УП
Не могу открыть форму списка регистра сведений с отбором, используя данные строки отчета.
Может, кто знает, как обратиться к ячейке табличного документа.
Помогите, пожалуйста .


1. Регистр сведений - это

2. Виды регистров сведений

3. Измерения, ресурсы, реквизиты регистра сведений

4. Периодический регистр сведений

5. Свойства регистра и измерений

6. Добавление записи в регистр сведений

7. Изменение значения ресурса записи регистра сведений

8. Удаление выбранных записей в регистре сведений

9. Очистка регистра сведений от записей

10. Получить значение ресурса регистра сведений на дату

1. Регистр сведений - это

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

2. Виды регистров сведений

  • Независимый регистр сведений - регистр не подчинен регистратору (документу).
  • Зависимый регистр сведений - регистр подчинен регистратору (документу).
  • Непериодический регистр сведений - информация в регистре храниться без привязки к дате.
  • Периодический регистр сведений - информация в регистре развернута во времени, одним из измерений является дата, называемым Периодом.

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

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


Если узнаем цену Тяпки на любую дату с 1 августа 2021 года до 10 августа 2021, она будет равна 175 рублям.

Если узнаем цену Тяпки на любую дату с 10 августа 2021 года по текущую дату, она будет равна 192 рублям.

Внимание! Описанный выше пример несет образный характер и периоды в примере рассматривали приблизительно. Для точного определения даты и времени для вычисления цены необходимо использовать Дату, МоментВремени или Границу зависит от решаемой задачи. Об особенностях использования периодов и моментов времени поговорим в следующей статье.

4. Периодический регистр сведений

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



Внимание! При выборе периодичности (кроме "По позиции регистратору"), платформа будет контролировать уникальность записей в пределах заданной периодичности, в таком случаи в регистратор нельзя записать две записи с одинаковым набором Измерений и Периодом. Последовательность состоящая из Измерений и Периода называется Ключом уникальности.

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

При выборе периодичности в БД создаются виртуальные таблицы:
СрезПервых и СрезПоследних.
Что позволяет быстро получать значения ресурсов о последних (первых) установленных значений на определенную дату.


5. Свойства регистра и измерений

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

Основной отбор (для измерения) - устанавливает возможность измерения регистрировать изменения для плана обмена.

6. Добавление записи в регистр сведений

Добавление через МенеджерЗаписи, подойдет для добавления одной записи.

НоваяЗапись . Период = Дата ;
НоваяЗапись . Номенклатура = Номенклатура ;
НоваяЗапись . Цена = Цена ;
НоваяЗапись . Записать ();

Добавление через НаборЗаписей, подойдет для добавления одной или нескольких записей.

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

7. Изменение значения ресурса записи регистра сведений

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

НаборЗаписей = РегистрыСведений . Цены . СоздатьНаборЗаписей ();
НаборЗаписей . Отбор . Период . Установить ( Дата ,Истина);
НаборЗаписей . Отбор . Номенклатура . Установить ( Номенклатура ,Истина);
НаборЗаписей . Прочитать ();
Если Не НаборЗаписей . Количество () = 0 Тогда
СуществующаяЗапись = НаборЗаписей [ 0 ];
СуществующаяЗапись . Период = Дата ;
СуществующаяЗапись . Номенклатура = Номенклатура ;
СуществующаяЗапись . Цена = Цена ;
НаборЗаписей . Записать ();
КонецЕсли;

8. Удаление выбранных записей в регистре сведений

Удаление записей через НаборЗаписей, подойдет для удаления одной или нескольких записей.

НаборЗаписей = РегистрыСведений . Цены . СоздатьНаборЗаписей ();
НаборЗаписей . Отбор . Период . Установить ( Дата ,Истина);
НаборЗаписей . Отбор . Номенклатура . Установить ( Номенклатура ,Истина);
НаборЗаписей . Записать ();

9. Очистка регистра сведений от записей

Очистка регистра от записей через НаборЗаписей.


Получить значение ресурса регистра сведений на конкретную дату можно через метод Получить(). Если на эту дату в регистре нет записей, то возвращается структура с пустыми значениями.

Если в нашем примере указать дату 10.08.2021, то на эту дату имеются записи в регистре и метод вернет не пустую цену.


Если в нашем примере указать дату 110.08.2021, то на эту дату нет записей в регистре, тогда метод вернет пустую цену.


Получить ближайшее значение ресурса регистра сведений на дату можно через метод ПолучитьПервое() и ПолучитьПоследнее(). Эти методы возвращают структуру, содержащую ближайшие, указанной дате, значения ресурсов.
Первый параметр в методах может иметь тип "дата", МоментВремени или Граница. Его можно не указывать, тогда будут найдены первые или последние значения ресурсов в регистре сведений.



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











Рис. 11.10. – Выбор регистра


Рис. 11.11. – Конструктор движения регистров

В результате работы конструктора в модуле документа будет автоматически
создана процедура обработчика события проведения:
Процедура ОбработкаПроведения(Отказ, Режим)
// // Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную
изменения будут утеряны.
// регистр СведенияОСотрудниках
Движения.СведенияОСотрудниках.Записывать = Истина;
Движение = Движения.СведенияОСотрудниках.Добавить();
Движение.Период = Дата;
Движение.Сотрудник = Сотрудник;
Движение.Подразделение = Подразделение;
Движение.Оклад = Оклад;
//>>__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Таблица 11.1. Список кадровых документов

Читайте также: