Здравствуйте, дорогие читатели! В очередной раз мы уделим внимание работе с регистрами сведений. До этого уже было написано Как сделать блокировку записи регистра сведений при её редактировании в форме записи? или Как в регистре сведений обеспечить уникальность каждой записи? Ещё немного было написано в статье, связанной с примерами работы в 1С тут, здесь и здесь. А сейчас давайте поговорим о том, как открыть форму записи регистра сведений из строки табличного поля.

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

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

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

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

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

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

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

Процедура ОбновитьТабличноеПоле()
    ДатаОкончания = ТекущаяДата();
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    | СписокДел.Приоритет,
    | СписокДел.Направление,
    | СписокДел.Дело,
    | СписокДел.Ответственный,
    | СписокДел.Статус,
    | СписокДел.Период
    |ИЗ
    | РегистрСведений.СписокДел.СрезПоследних КАК СписокДел
    |ГДЕ
    | СписокДел.Период >= &ДатаОкончания";

    Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
    РезультатЗапроса = Запрос.Выполнить();
    СписокДел = РезультатЗапроса.Выгрузить();
    // Добавляем новые колонки в табличное поле
    Для Счетчик = 1 По 31 Цикл
        ДатаТекущая = ТекущаяДата()+60*60*24*Счетчик;
        СписокДел.Колонки.Добавить("Д"+Строка(День(ДатаТекущая)),,
        Строка(День(ДатаТекущая)), 1);
    КонецЦикла;
    Если СписокДел.Количество() <> 0 Тогда
        ЭлементыФормы.СписокДел.Значение = СписокДел;
        ЭлементыФормы.СписокДел.СоздатьКолонки();
    КонецЕсли;
КонецПроцедуры

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


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

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

    Ответить

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

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

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