|
ERP 2.0 Управляемые формы | ☑ | ||
---|---|---|---|---|
0
burnylpc
02.02.18
✎
12:41
|
ERP 2.0
Была задача: на форму стандартного документа (регистрация наработок) поместить кнопку, по нажатии которой должна каким-то образом заполнится ТЧ в форме документа. Что сделано: вынесла в расширение общий модуль "МодификацияКонфигурацииКлиентПереопределяемый". В нем через процедуру "УА2_ВыполнитьПереопределяемуюКоманду" на форму программно добавляю кнопку с командой. По этой команде открывается форма выбора ОС. Пользователь выбирает ОС, и собственно по нему (по выбранному значению) должна заполнится ТЧ. Вот код: &После("ВыполнитьПереопределяемуюКоманду") // Вызывается в формах при выборе команды, которая добавлена программно // // Параметры: // Форма - УправляемаяФорма - форма в которой расположена команда // Команда - КомандаФормы - выбранная команда // ДополнительныеПараметры - Структура - дополнительные параметры // // Тут будем выполнять команду добавленную в "МодификацияКонфигурацииПереопределяемый.УА2_ПриСозданииНаСервере" Процедура УА2_ВыполнитьПереопределяемуюКоманду(Форма, Команда, ДополнительныеПараметры) Экспорт Если Команда.Имя = "УА2_ВыбратьУзлыПоОС" Тогда ФормаВыбора = ПолучитьФорму("Справочник.ОбъектыЭксплуатации.ФормаВыбора",); ОписаниеОповещения = Новый ОписаниеОповещения("РазузловатьОС", ОбщегоНазначенияВызовСервера, Форма.Объект); ФормаВыбора.ОписаниеОповещенияОЗакрытии = ОписаниеОповещения; ФормаВыбора.Открыть(); КонецЕсли; КонецПроцедуры ///////////////////////////////////////////////////////////////////////////////////////////////////////////// После выбора ОС пытаюсь оповестить форму документа //процедура в модуле ОбщегоНазначенияВызовСервера. Процедура РазузловатьОС(ОбъектЭксплуатации, ДанныеФормы) Экспорт .... ОбъектДокумент = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.РегистрацияНаработок")); ...... ЗначениеВДанныеФормы(ОбъектДокумент, ДанныеФормы); КонецПроцедуры ///////////////////////////////////////////////////////////////////////////////////////////////////////////// Все отрабатывает без ошибок, но форма документа не обновляется. ПОДСКАЖИТЕ, ЧТО Я НЕ ТАК ДЕЛАЮ? п/с вариант с выносом самой формы документа в расширения не рассматривается |
|||
1
ГдеСобака Зарыта
02.02.18
✎
12:45
|
Ну надо еще и саму форму оповестить
|
|||
2
burnylpc
02.02.18
✎
12:59
|
т.е. нужно все таки еще саму форму изменять?
|
|||
3
Defender aka LINN
02.02.18
✎
13:01
|
А что мешает использовать внешние обработки заполнения?
|
|||
4
burnylpc
02.02.18
✎
13:03
|
Что за внешние обработки заполнения, подскажите, где хоть прочитать про них? Это что-то стандартное или это обработки из справочника внешних обработок?
|
|||
5
ГдеСобака Зарыта
02.02.18
✎
13:09
|
Наверно по закрытии формы выбора ОС надо вызвать клиентскую процедуру, которая вызовет на сервере РазузловатьОС(), а потом оповестит форму документа через Оповестить().
Но внешняя обработка заполнения все-таки лучше |
|||
6
Вафель
02.02.18
✎
13:11
|
(5) так вызываетя же процедура, там оповещение накинуто
|
|||
7
ГдеСобака Зарыта
02.02.18
✎
13:17
|
(6) Но на сервере ты форму документа не оповестишь после изменения. Поэтому и надо клиентскую процедуру, которая будет разузловку вызывать
|
|||
8
Вафель
02.02.18
✎
13:19
|
на каком сервере? тут с клиента идет выбор.
|
|||
9
ГдеСобака Зарыта
02.02.18
✎
13:19
|
Да, сорри, я туплю по пятницам
|
|||
10
Вафель
02.02.18
✎
13:21
|
нужно в процедуре РазузловатьОС обращаться к
ФормаДокумента.Объект и его заполнять |
|||
11
ГдеСобака Зарыта
02.02.18
✎
13:24
|
Хотя почему туплю? Форма выбора ОС закрылась и по оповещению вызвала процедуру на сервере РАзузловать(). На сервере объект изменили и теперь надо его форму обновить. Ведь так? А как ты оповестишь с сервера открытую форму документа?
|
|||
12
burnylpc
02.02.18
✎
13:25
|
Собственно, если конкретизировать сам вопрос, то получится: а как правильно заполнять форму через процедуры в общем модуле?
.... раскопала в станд.конфигурации процедуры (такие часто встречаются), которые находятся в общих модулях. Вот пример: Общий модуль БухгалтерскиеОтчетыВызовСервера, галки сервер, вызов сервера // Вызывается из обработчика события "ПриСохраненииПользовательскихНастроекНаСервере" формы отчета. // // Параметры: // ФормаОтчета - УправляемаяФорма - Форма отчета. // Настройки - ПользовательскиеНастройкиКомпоновкиДанных - Сохраняемые настройки. // СохранятьТолькоРеквизиты - Булево - Признак сохранения только значений реквизитов отчета без настроек СКД. // Процедура ПриСохраненииПользовательскихНастроекНаСервере(ФормаОтчета, Настройки, СохранятьТолькоРеквизиты = Ложь) Экспорт ОтчетОбъект = ФормаОтчета.РеквизитФормыВЗначение("Отчет"); ...................................................... КонецПроцедуры Пробовала так же, но когда я передавала форму, то ругался, что форму на сервер передавать нельзя Пример с данными общ.м. ДоставкаТоваров, сервер // Возвращает таблицу значений с колонками, скопированными из переданной коллекции. // // Параметры: // Коллекция - ДанныеФормыДерево, ДанныеФормыКоллекция, ТаблицаЗначений - источник данных, колонки которого // необходимо копировать. // ИменаКолонок - Строка - имена копируемых колонок, перечисленные через запятую. // // Возвращаемое значение: // ТаблицаЗначений - скопированная таблица. // Функция СкопироватьКолонкиКоллекции(Коллекция, ИменаКолонок) Экспорт ............................ Возврат ДанныеФормыВЗначение(Коллекция, Тип("ТаблицаЗначений")); ............................ КонецФункции Все это из станд.конфигурации.. Как я понимаю, как то это должно работать. Но я пробовала делать свой модуль в расширении, так же вызывать, ругался У меня уже глаза замылились)) помогите, кто чем может)) я по любому что-то не так делаю, не понимаю что |
|||
13
Вафель
02.02.18
✎
13:29
|
Получить из другой формы серверный контекст формы документ нельзя
|
|||
14
burnylpc
02.02.18
✎
13:32
|
(5) делала так, тоже не получается
|
|||
15
burnylpc
02.02.18
✎
13:34
|
Т.е. предлагаете все таки сделать внешнюю обработку? как мне тогда кнопку на форму вывести, подскажите пожалуйста
|
|||
16
ГдеСобака Зарыта
02.02.18
✎
13:40
|
(15) А так попробуй
ОписаниеОповещения = Новый ОписаниеОповещения("РазузловатьОСнаКлиенте", ОбщегоНазначенияКлиент, Форма); ФормаВыбора.ОписаниеОповещенияОЗакрытии = ОписаниеОповещения; Процедура РазузловатьОСнаКлиенте(ОбъектЭксплуатации, Форма) Экспорт ОбщегоНазначенияВызовСервера.РазузловатьОС(ОбъектЭксплуатации, Форма.Объект) Форма.Прочитать(); КонецПроцедуры Но вообще да, внешняя обработка |
|||
17
ГдеСобака Зарыта
02.02.18
✎
13:42
|
(15) Через внешнюю обработку на форме стандартная команда появится "Заполнить".
|
|||
18
Defender aka LINN
02.02.18
✎
14:12
|
(4) В демо БСП есть примеры
|
|||
19
burnylpc
02.02.18
✎
14:44
|
Ура получилось!
Все такие через клиентскую процедуру .... В итоге В модуле МодификацияКонфигурацииКлиентПереопределяемый (клиент) &После("ВыполнитьПереопределяемуюКоманду") Процедура УА2_ВыполнитьПереопределяемуюКоманду(Форма, Команда, ДополнительныеПараметры) Экспорт Если Команда.Имя = "УА2_ВыбратьУзлыПоОС" Тогда ФормаВыбора = ПолучитьФорму("Справочник.ОбъектыЭксплуатации.ФормаВыбора",); ................................ ОписаниеОповещения = Новый ОписаниеОповещения("РазузловатьОС", МодификацияКонфигурацииКлиентПереопределяемый, Форма); //управляемая форма ФормаВыбора.ОписаниеОповещенияОЗакрытии = ОписаниеОповещения; ФормаВыбора.Открыть(); КонецЕсли; КонецПроцедуры Процедура РазузловатьОС(ОбъектЭксплуатации, Форма) Экспорт МассивУзлов = ОбщегоНазначенияВызовСервера.РазузловатьОС(ОбъектЭксплуатации); // серверный модуль. ОбщегоНазначенияВызовСервера. возвращает массив запросом Для каждого Узел из МассивУзлов Цикл НоваяСтрока = Форма.Объект.Наработки.Добавить(); НоваяСтрока.ОбъектЭксплуатации = ОбъектЭксплуатации; НоваяСтрока.ОбъектФормы = ОбъектЭксплуатации; НоваяСтрока.УзелФормы = Узел; КонецЦикла; КонецПроцедуры без вскяких обновить(), прочитать() и обработок))) Спасибо, что помогли разобраться! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |