|
Программный вызов обработчика формы | ☑ | ||
---|---|---|---|---|
0
самолет
25.02.15
✎
13:23
|
Есть типовая Бухгалтерия 3.0(запрещено редактирование)
Нужно загрузить приходные накладные из Эсель. Я создать Внешнюю обработку и загрузил данные. Все бы хорошо но есть одно НО.. При установке контрагента не происходит выполнение стандартной процедуры "ПриИзменииКонтрагента". Посмотрел в конфигурации есть модуль ПоступлениеТоваровУслугФормы.КонтрагентПриИзменении(ЭтаФорма) причем эспортный. Но не понимаю как с клиента на сервер передать форму созданного документа, вызвать этот обработчик и результат вернуть назад на клиент. Делаю так. &НаСервере Процедура КонтрагентПриИзмененииНаСервере(Док) ПоступлениеТоваровУслугФормы.КонтрагентПриИзменении(Док); КонецПроцедуры &НаКлиенте Процедура ЗагрузитьЭксель() // Взял данные из эксель // создал форму Поступления товара и услуг // заполнил Контрагента Док.Объект = Контрагент; // и попытался на серваке запустить обработчик формы КонтрагентПриИзмененииНаСервере(Док) КонецПроцедуры Получаю ошибку {Форма.Основная.Форма(2947)}: Ошибка при вызове метода контекста (КонтрагентПриИзмененииНаСервере) КонтрагентПриИзмененииНаСервере(Док); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка отображения типов: Отсутствует отображение для типа 'УправляемаяФорма' Как правильно можно вызвать этот обработчик? |
|||
1
AntonH851
25.02.15
✎
13:41
|
Ты не форму на сервер передавай, а документ объект используя функции реквизитформывзначение
|
|||
2
самолет
25.02.15
✎
13:51
|
Сделал так
На клиенте ОснРеквизит = Док.Объект; КонтрагентПриИзмененииНаСервере(ОснРеквизит); КопироватьДанныеФормы(ОснРеквизит,Док.Объект); &НаСервереБезКонтекста Процедура КонтрагентПриИзмененииНаСервере(ОснРеквизит) ОбъектЗначение = ДанныеФормыВЗначение(ОснРеквизит, Тип("ДокументОбъект.ПоступлениеТоваровУслуг")); ПоступлениеТоваровУслугФормы.КонтрагентПриИзменении(ОбъектЗначение); ЗначениеВДанныеФормы(ОбъектЗначение, ОснРеквизит); КонецПроцедуры Вылетает ошибка в модуле ПоступлениеТоваровУслугФормы Процедура КонтрагентОбработатьИзменение(Форма, ПричиныИзмененияСчетовУчета) Объект = Форма.Объект; // ВОТ ЗДЕСЬ ГОВОРИТ ЧТО НЕ НАЙДЕН ОБЪЕКТ ПричиныИзмененияСчетовУчета.Добавить("Контрагент"); МассивВидовДоговоров = Форма.ПолучитьМассивВидовДоговоров(); БухгалтерскийУчетПереопределяемый.УстановитьДоговорКонтрагента(Объект.ДоговорКонтрагента, Объект.Контрагент, Объект.Организация, МассивВидовДоговоров); Если ЗначениеЗаполнено(Объект.ДоговорКонтрагента) Тогда ДоговорКонтрагентаОбработатьИзменение(Форма, ПричиныИзмененияСчетовУчета); КонецЕсли; ЗаполнитьСчетаУчета(Форма, ПричиныИзмененияСчетовУчета, "Контрагент"); Форма.ПоставщикРезидентТаможенногоСоюза = УчетНДС.КонтрагентРезидентТаможенногоСоюза(Объект.Контрагент); КонецПроцедуры |
|||
3
самолет
25.02.15
✎
14:06
|
Так тоже не работает
&НаКлиенте Процедура ЗагрузкаИзЭксель() // Создал документ поступление услуг // Его объект бросаю на сервер чтобы отработал обработчик ОснРеквизит = Док.Объект; КонтрагентПриИзмененииНаСервере(ОснРеквизит); КопироватьДанныеФормы(ОснРеквизит,Док.Объект); Процедура &НаСервере Процедура КонтрагентПриИзмененииНаСервере(ОснРеквизит) //ОбъектЗначение = ДанныеФормыВЗначение(ОснРеквизит, Тип("ДокументОбъект.ПоступлениеТоваровУслуг")); //ПоступлениеТоваровУслугФормы.КонтрагентПриИзменении(ОбъектЗначение); //ЗначениеВДанныеФормы(ОбъектЗначение, ОснРеквизит); НаборФорма = РеквизитФормыВЗначение("Объект"); ПоступлениеТоваровУслугФормы.КонтрагентПриИзменении(НаборФорма); ЗначениеВРеквизитФормы(НаборФорма, "Объект"); КонецПроцедуры |
|||
4
самолет
25.02.15
✎
14:13
|
ругается что не может Получить Объект.
А в теории мне чтобы использовать форму на серваке ее обязательно нужно записать в реквизит формы? т.е. если у меня внешняя обработка и мне нужно с клиента на сервер передать форму документа "ПоступленияТоварУслуг" созданную на клиенте, я должен создать реквизит у внешней обработки в него положить на клиенте форму "ПоступленияТоварУслуг" и считать этот параметр на сервере и его преобразовать в значение и только после этого вызывать обработчик? В теории ТАК? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |