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

Форма записи регистра сведений открывается из строки табличного поля

Здравствуйте, дорогие читатели! В очередной раз мы уделим внимание
работе с регистрами сведений. До этого уже было написано

Как сделать блокировку записи регистра сведений при её редактировании в форме записи?

или

Как в регистре сведений обеспечить уникальность каждой записи?

Ещё немного было написано в статье, связанной с примерами работы в 1С

тут
,

здесь

и

здесь
.


Форма записи регистра сведений открывается из строки табличного поля

Чтобы открыть форму записи регистра сведений из строки табличного поля двойным щелчком
необходимо поступить, как описано

здесь.

Этим способом мы воспользуемся в нашем примере:

Процедура СписокДелВыбор(Элемент, ВыбраннаяСтрока,
Колонка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Формируем ключ для открытия формы, на необходимой нам записи
Ключ = ПолучитьКлючЗаписиРегистраСведений(ВыбраннаяСтрока.Период,
ВыбраннаяСтрока.Ответственный);
ПараметрыФормы = Новый Структура(«Ключ», Ключ);
ОткрытьФорму(«РегистрСведений.СписокДел.ФормаЗаписи»,
ПараметрыФормы,ЭтаФорма);
// Третий параметр типа Форма со значение текущей формы
// далее мы им воспользуемся, чтобы проверять это значение
// в процедуре «ОбработкаЗаписиНовогоОбъекта»
КонецПроцедуры

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

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

Процедура ПослеЗаписи()
// Здесь мы запускаем эту процедуру и
// значением её параметра назначаем форму из
// которой была вызвана текущая форма записи регистра
ОповеститьОЗаписиНовогоОбъекта(ВладелецФормы);
КонецПроцедуры

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

Процедура ОбработкаЗаписиНовогоОбъекта(Объект, Источник)
// «Источник» — форма записи регистра сведений
// «Объект» — третий параметр функции «ОткрытьФорму»
// о котором было сказано ранее
Если Источник.ВладелецФормы = Объект Тогда
// Если вызов произошел из подчиннённой формы
ОбновитьТабличноеПоле();
КонецЕсли;
КонецПроцедуры

Процедура ОбновитьТабличноеПоле()
ДатаОкончания = ТекущаяДата();
Запрос = Новый Запрос;
Запрос.Текст = «
|ВЫБРАТЬ
| СписокДел.Приоритет,
| СписокДел.Направление,
| СписокДел.Дело,
| СписокДел.Ответственный,
| СписокДел.Статус,
| СписокДел.Период
|ИЗ
| РегистрСведений.СписокДел.СрезПоследних КАК СписокДел
|ГДЕ
| СписокДел.Период >= &ДатаОкончания»;
Запрос.УстановитьПараметр(«ДатаОкончания», ДатаОкончания);
РезультатЗапроса = Запрос.Выполнить();
СписокДел = РезультатЗапроса.Выгрузить();
// Добавляем новые колонки в табличное поле
Для Счетчик = 1 По 31 Цикл
ДатаТекущая = ТекущаяДата()+60*60*24*Счетчик;
СписокДел.Колонки.Добавить(«Д»+Строка(День(ДатаТекущая)),,
Строка(День(ДатаТекущая)), 1);
КонецЦикла;

Если СписокДел.Количество() <> 0 Тогда
ЭлементыФормы.СписокДел.Значение = СписокДел;
ЭлементыФормы.СписокДел.СоздатьКолонки();
КонецЕсли;
КонецПроцедуры

Итак, мы можем открывать двойным щелчком на строке табличного поля форму записи регистра сведений,
изменять её значения и изменения сразу будут отображаться в строке табличного поля!

Этот блог читают уже более 3000 человек
- читай и ТЫ!
2 ответы
  1. Softmaker
    Softmaker says:

    Пожалуйста, Андрей! Здорово, что описание формы записи регистра сведений помогло вам!

    Ответить

Ответить

Want to join the discussion?
Feel free to contribute!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *