Изменение документа через команду: различия между версиями
Danamond (обсуждение | вклад) |
Danamond (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
Иногда требуется произвести изменения данных документа какой либо обработкой, но из самой формы документа. В качестве примера можно использовать заполнение табличной части документа внешней обработкой (здесь имеется ввиду код, а не объект).<br> | Иногда требуется произвести изменения данных документа какой либо обработкой, но из самой формы документа. В качестве примера можно использовать заполнение табличной части документа внешней обработкой (здесь имеется ввиду код, а не объект).<br> | ||
− | В начале все тривиально. В объекте метаданных типа "документ" создаем команду. В ее свойствах определяем группу "Командная панель формы.Важное" - это позволит не менять саму форму, команда на форме будет видна как кнопка на командной панели | + | В начале все тривиально. В объекте метаданных типа "документ" создаем команду. В ее свойствах определяем группу "Командная панель формы.Важное" - это позволит не менять саму форму, команда на форме будет видна как кнопка на командной панели. После выполнения процедуры "ОбработкаКоманды" форма автоматически перечитает данные.<br> |
Далее пишем собственно процедуру: | Далее пишем собственно процедуру: | ||
Строка 28: | Строка 28: | ||
Идем по порядку: | Идем по порядку: | ||
# мы вызвали процедуру "ОбработкаКоманды" нажав на кнопку, | # мы вызвали процедуру "ОбработкаКоманды" нажав на кнопку, | ||
− | # процедура открыла форму выбора диалога ''и ждет когда мы выберем период'' | + | # процедура открыла форму выбора диалога '''и ждет когда мы выберем период''' |
# процедура "ОбработкаКоманды" завершилась, | # процедура "ОбработкаКоманды" завершилась, | ||
# форма перечитала данные, '''но мы то еще период не выбрали, и процедура обработки данных не выполнялась!''' | # форма перечитала данные, '''но мы то еще период не выбрали, и процедура обработки данных не выполнялась!''' | ||
− | Здесь нам на помощь приходит параметр "ПараметрыВыполненияКоманды" - это структура, один из значений которой ("Источник") как раз ссылка на форму из которой вызвана команда. Наш код можно модифицировать следующим образом: | + | Здесь нам на помощь приходит параметр "ПараметрыВыполненияКоманды" - это структура, один из значений которой ("Источник") как раз ссылка на форму из которой вызвана команда. Наш код можно модифицировать следующим образом (изменения выделены жирным): |
&НаКлиенте | &НаКлиенте |
Версия 17:11, 31 октября 2019
Иногда требуется произвести изменения данных документа какой либо обработкой, но из самой формы документа. В качестве примера можно использовать заполнение табличной части документа внешней обработкой (здесь имеется ввиду код, а не объект).
В начале все тривиально. В объекте метаданных типа "документ" создаем команду. В ее свойствах определяем группу "Командная панель формы.Важное" - это позволит не менять саму форму, команда на форме будет видна как кнопка на командной панели. После выполнения процедуры "ОбработкаКоманды" форма автоматически перечитает данные.
Далее пишем собственно процедуру:
&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) //Здесь у нас кактой-то код. Скорее всего вызов серверной процедуры из общего модуля. КонецПроцедуры
Все просто! Но ситуация заметно усложняется если в процедуре "ОбработкаКоманды" мы захотим, например, выбрать период. Пишем код:
&НаКлиенте Процедура ПериодВыбран(Период, ДополнительныеПараметры) Экспорт Если НЕ Период = Неопределено Тогда //Здесь тот самый код, который что-то делает. КонецЕсли; КонецПроцедуры
&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) Оповещение = Новый ОписаниеОповещения("ПериодВыбран", ЭтотОбъект); Период = Новый ДиалогРедактированияСтандартногоПериода(); Период.Период.Вариант = ВариантСтандартногоПериода.ЭтотМесяц; Период.Показать(Оповещение); КонецПроцедуры
И да! Форма не обновляется! О нежно любимый асинхронный режим!
Идем по порядку:
- мы вызвали процедуру "ОбработкаКоманды" нажав на кнопку,
- процедура открыла форму выбора диалога и ждет когда мы выберем период
- процедура "ОбработкаКоманды" завершилась,
- форма перечитала данные, но мы то еще период не выбрали, и процедура обработки данных не выполнялась!
Здесь нам на помощь приходит параметр "ПараметрыВыполненияКоманды" - это структура, один из значений которой ("Источник") как раз ссылка на форму из которой вызвана команда. Наш код можно модифицировать следующим образом (изменения выделены жирным):
&НаКлиенте Процедура ПериодВыбран(Период, ДополнительныеПараметры) Экспорт Если НЕ Период = Неопределено Тогда //Здесь тот самый код, который что-то делает. ДопПараметры.Форма.Прочитать(); КонецЕсли; КонецПроцедуры
&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ДопПараметры = Новый Структура("Форма", ПараметрыВыполненияКоманды.Источник); Оповещение = Новый ОписаниеОповещения("ПериодВыбран", ЭтотОбъект, ДопПараметры); Период = Новый ДиалогРедактированияСтандартногоПериода(); Период.Период.Вариант = ВариантСтандартногоПериода.ЭтотМесяц; Период.Показать(Оповещение); КонецПроцедуры