gifts2017

Изменение формы объекта без снятия конфигурации с поддержки

Опубликовал Александр Полтава (Патриот) в раздел Программирование - Практика программирования

В двух словах - открытие альтернативной формы документа (или другого объекта) из внешней обработки.

Предисловие: Столкнулся давеча с проблемой - нужно было доработать форму документа, не снимая конфу с поддержки. Единственный способ сделать это - правильно, внешние обработки.
Собственно, ларчик открывается просто:

0. В качестве объекта может быть взят любой объект конфигурации, у которого доступны формы.
Для примера рассмотрим документ "ПереносДанных", основной формой которого является "ФормаДокумента".
1. Создаём внешнюю обработку.
2. Копируем в неё форму "ФормаДокумента" (далее скопированную форму будем называть "_ФормаДокумента").
3. Изменяем форму "_ФормаДокумента" так, как нам необходимо.
4. Если теперь выбрать форму "_ФормаДокумента" в качестве основной у обработки, то, при открытии обработки в режиме Предприятия, будет открываться форма "_ФормаДокумента" для создания нового объекта, аналогично нажатию "Добавить (Ins)" в форме списка документа. Происходит так потому, что мы не указали, какой именно объект соответствует нашей форме "_ФормаДокумента" (её основному реквизиту "ДокументОбъект" с типом "ДокументОбъект.ПереносДанных"). Чтобы иметь возможность опционально открывать форму создания нового объекта или форму уже существующего, добавим форму "Форма" в обработку и установим её в качестве основной. В форму "Форма" добавляем кнопку "Выполнить" и реквизит "Документ" типа "ДокументСсылка.ПереносДанных". Код следующий:

Процедура КнопкаВыполнитьНажатие(Кнопка)
ФормаДокумента = ПолучитьФорму("ФормаДокумента");
Если ЗначениеЗаполнено(Документ) Тогда
ФормаДокумента.ДокументОбъект = Документ.ПолучитьОбъект();
Иначе 
ФормаДокумента.ДокументОбъект = Документы.ПереносДанных.СоздатьДокумент();
КонецЕсли;
ФормаДокумента.Открыть();
КонецПроцедуры

5. Нужно иметь в виду, что теперь из формы "_ФормаДокумента" недоступен контекст обработки (т.е. её реквизиты, ТЧ, макеты, формы, модуль объекта, свойства, методы) поэтому, чтобы к нему обратиться, необходимо заведомо его туда передать (мне, например, потребовалось передать макет с двоичными данными). Для этого в форме "_ФормаДокумента" надо завести необходимые экспортные переменные (или реквизиты) и инициализировать их перед открытием формы в процедуре "КнопкаВыполнитьНажатие".
6. Вытекает из предыдущего пункта. В форме "_ФормаДокумента" доступен контекст документа "ПереносДанных", в частности, из этого следует то, что при записи документа (например после нажатия на стандартную кнопку "Записать объект (Ctrl+S)" формы "_ФормаДокумента") вызовутся процедуры записи модуля объекта документа "ПереносДанных". Т.е. Изменить таким методом можно только действия формы, но не действия модуля объекта!

ОпосляСкриптум: может и баян, но на баяне тоже играют я не встречал - посему ссыль на первопроходцев приветствуется.
------------------------------------

ИНТЕРЕСНЫХ ВАМ ЗАДАЧ, ПЛОДОТВОРНОЙ РАБОТЫ И ОРИГИНАЛЬНЫХ/ОПТИМАЛЬНЫХ РЕШЕНИЙ!!

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
_ПереносДанных.epf
.epf 24,45Kb
02.09.15
0
.epf 24,45Kb 0 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей Папанов (El_Loco) 03.09.15 00:15
а какое может быть практическое применение сего?
вот вы написали - требовалось доработать форму без снятия замка. ну ок. тогда вы предлагаете документы открывать через обработку? это же дико неудобно для пользователя.
я не могу придумать живой случай, когда так можно поступить.
2. Denis Michaylov (denis_aka_wolf) 03.09.15 05:44
Не снимая замка можно было просто скопировать документ и куралесить в нем как душе угодно, а пользователям показать как открывать новый список документов.
3. Андрей Карпов (karpik666) 03.09.15 07:31
Присоединяюсь к (1) такое имеет место быть только в для тестирования формы, для практического применения это просто дико.
(2) вы предлагаете, чтобы делать какие то изменения в форме документа, нужно скопировать этот документ? Просто жесть. Мало того, что для этого придется снять замок с конфигурации, так ещё придется добавлять регистратором этот документ во многие регистры и переписывать множество запросов.
4. Антон Козин (katochimoto) 03.09.15 08:54
Собственно вопрос, а чем же автору не угодил механизм расширений? Что то мне казалось что в механизме расширений сейчас как раз таки весь цимес в том чт можно писать формы не снимая с поддержки, ну по крайней мере на данном этапе развития данного механизма.
hardstep; ya.Avoronov; klinval; +3 Ответить 1
5. Denis Michaylov (denis_aka_wolf) 03.09.15 14:58
(4) katochimoto, обновиться нужно чтобы расширениями пользоваться и режим совместимости убрать
6. Антон Козин (katochimoto) 03.09.15 16:31
(5) denis_aka_wolf, ну так это же не проблема, уж платформу я думаю обновить любой дурак может, да и если например конфигурация не типовая то ее по-любому 1сник держит ему КД в руки и на конфу с Уф-ами + рсширения переезжать надо, а если типовая то там вообще все в 3 клика. Ну я конечно не настаиваю, но все таки платформу за последнее время сильно поменяли, и механизмов там вкусных море, так что смысла не вижу на старых сидеть.
7. Роман Ложкин (webester) 06.09.15 15:13
Не могли бы вы мне изменить форму, не изменяя ее? ;)
8. Андрей Карпов (karpik666) 09.09.15 09:11
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа