Как сделать форму выбора для регистра сведений
Подскажите, каким образом можно сделать следующее:
Имею форму. На форме кнопка и несколько полей. Жму на кнопку - вызывается формасписка регистра сведений (в качестве формы выбора). Выбираю нужную мне запись регистра сведений. Окно списка закрывается. Некоторые значения данных из выбранной записи должны быть занесены в поля на форме.
Естественно, много гуглил. Взял за основу вариант http://pro1c.org.ua/index.php?showtopic=276.
Но в 8.2 мне его никак "не уложить".
// Создадим форму регистра и откроем ее
ФормаРС = РегистрыСведений["Приложения"].ПолучитьФорму("ФормаВыбора");
ФормаРС.Параметры.КлючНазначенияИспользования=Ключ;
ФормаРС.Параметры.РежимВыбора = Истина;
ФормаРС.ВладелецФормы = ЭтаФорма;
ФормаРС.ОткрытьМодально();
КонецПроцедуры
Также есть код в формесписка для обработки выбора записи:
Дык вот ошибка в строке:
ФормаРС.ВладелецФормы = ЭтаФорма;.
Пишет - несоответствие типов.
Пробовал писать сюда:
ФормаРС = РегистрыСведений["Приложения"].ПолучитьФорму("ФормаВыбора", ЭтаФорма);
Пропускает "мимо ушей". Значение ВладелецФормы остается "Неопределено".
клиент то тонкий вероятно. будем СП читать про ОткрытьФорму() или дальше мудрить?
А что говорит?
: Переменная не определена (РегистрыСведений)
ФормаРС = >РегистрыСведений["Приложения"].ПолучитьФорму("ФормаВыбора"); (Проверка: Тонкий клиент)
&НаКлиенте
Процедура ПриложениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДанныеКлюча = Новый Структура("Период, Приложение", ЭтаФорма.Элементы.ПриложениеПериод, ЭтаФорма.Элементы.Приложение);
Ключ = РегистрыСведений["Приложения"].СоздатьКлючЗаписи(ДанныеКлюча);
// Создадим форму регистра и откроем ее
//ФормаРС = РегистрыСведений["Приложения"].ПолучитьФормуСписка("ФормаВыбора", ЭтаФорма.Элементы.Приложение);
ФормаРС = РегистрыСведений["Приложения"].ПолучитьФорму("ФормаВыбора");
ФормаРС.Параметры.КлючНазначенияИспользования=Ключ;
ФормаРС.Параметры.РежимВыбора = Истина;
ФормаРС.ВладелецФормы = ЭтаФорма;
ФормаРС.ОткрытьМодально();
КонецПроцедуры
При использовании ОткрытьФорму( , , , , ) нужно задействовать .
При использовании ОткрытьФорму( , , , , ) нужно задействовать .
Значение ключа можно "подготовить" на клиенте?
Если мне нужно отобрать записи регистра сведений за определенный период?
Вот как я пока сделал.
У формысписка (форме для выбора) сделал две процедуры:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЭтаФорма.Список.ПроизвольныйЗапрос=Истина;
ЭтаФорма.Список.ТекстЗапроса ;
ЭтаФорма.Список.Параметры.УстановитьЗначениеПараметра("АктуальнаяДата", Параметры.АктуальнаяДата);
КонецПроцедуры
А в форме, из которой вызываю формусписка так:
// Приложение - элемент формы
&НаКлиенте
Процедура ПриложениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыВыбора = Новый Структура;
ПараметрыВыбора.Вставить("РежимВыбора", Истина);
ПараметрыВыбора.Вставить("ЗакрыватьПриВыборе", Истина);
ПараметрыВыбора.Вставить("ТолькоПросмотр", Истина);
ПараметрыВыбора.Вставить("АктуальнаяДата", Запись.Период);
ПараметрыВыбора.Вставить("Приложение", Запись.Приложение);
ПараметрыВыбора.Вставить("ПриложениеПериод", Запись.ПриложениеПериод);
ОткрытьФорму("РегистрСведений.Приложения.Форма.ФормаДляВыбора",ПараметрыВыбора,ЭтаФорма.Элементы.Приложение);
КонецПроцедуры
Продолжаем разговор о открытие форм различным способом (и с различными целями), предыдущая статья рассказывала о том, как открыть форму с заполнением, а данная статья расскажет о том, ка открыть форму с отбором (форма списка, форма выбора) в обычном и управляемом приложении.
Открытие формы с отбором в обычном приложении
В обычном приложении (я пробовал на платформе 8.2.18.102) я знаю только один способ открытия формы списка или формы выбора с отбором (буду рад увидеть другие варианты), выглядит он примерно так:
В этом примере при получении формы владельца открывающейся формы (второй параметр) можно ничего не указывать (для формы списка, например), я указал поле в которое должен попадать выбранный элемент.
Открытие формы с отбором в управляемом приложении
В управляемом приложении я знаю несколько способов открыть форму с отбором. Первый способ простой, но сильно ограничен по возможностям, выглядит он примерно так:
Своё знакомство с управляемым приложением 1С как разработчик я начал достаточно давно, но некоторые примеры разработки управляемого приложения повергают меня в шок до сих пор. Один из таких примеров — программное открытие управляемой формы записи регистра сведений.
Рассмотрим пример программного открытия управляемой формы уже существующей записи регистра сведений.
Открытие управляемой формы 1С записи регистра сведений
Получите 267 видеоуроков по 1С бесплатно:
Процедура в итоге выглядела следующим образом:
&НаКлиенте
Процедура СчетаУчетаНоменклатурыПередНачаломИзменения(Элемент, Отказ)
ПередаваемыеПараметры = Новый Структура; //формируем структуру полей измерений
- занесли в структуру значения измерений;
- поместили структуру в массив;
- с помощью массива создали ключ записи;
- с помощью ключа записи открыли форму.
Почему так сложно?
Этот способ я подсмотрел в типовой конфигурации. Я не очень понимаю, зачем в итоге такая длинная цепочка, если кто-то видел более простой способ. Просьба, напишите, как, в комментариях, буду очень Вам благодарен. Спасибо!
Есть отчет, для которого нужно добавить свою расшифровку. Расшифровка должна открыть форму списка регистра сведений с отбором по измерениям:
ФизЛицо — Справочник.Ссылка
Событие — Строка
Дата
Формируется отчет, в котором присутствуют эти поля.
В процедуре ОбработкаРасшифровки, опираясь на материалы Вашего сайта, написала следующее:
Код 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. Список кадровых документов
Читайте также: