|
УФ. Заполнение ТЧ документа из внешней обработки | ☑ | ||
---|---|---|---|---|
0
pessok
20.09.12
✎
12:24
|
Коллеги, не пойму. Решил таки раздуплиться с УФ и клиент-серверным взаимодействием. Решил начать с простого, казалось бы. Заполнение табличной части документа из внешней обработки.
На входе имеет следующий код: Команда в документе:
В обработке:
В итоге, когда до конца отрабатывает команда обработки выползает ошибка: Нельзя изменять поле, содержащее объект данных формы И вот не пойму, ЧЯДНТ. Вроде на сервере меняю ДокументОбъект, по и, как мне наивно казалось, все должно было бы сработать, ан нет... Ткните пальцем, плз, куда посмотреть |
|||
1
pessok
20.09.12
✎
13:58
|
ап
|
|||
2
zladenuw
20.09.12
✎
14:08
|
форма уф.
модуль обработки Функция СведенияОВнешнейОбработке() Экспорт МассивНазначенийРегистрационныеДанные = Новый Структура; РегистрационныеДанные.Вставить("Наименование", "Изменение чего-нибудь в табличной части"); РегистрационныеДанные.Вставить("БезопасныйРежим", Истина); РегистрационныеДанные.Вставить("Версия", "1.0"); РегистрационныеДанные.Вставить("Вид", "ЗаполнениеОбъекта"); РегистрационныеДанные.Вставить("Информация", "Обработка демонстрирует, как можно изменить какие-нибудь реквизиты табличной части"); ТаблицаКоманд = ПолучитьТабКомд();// тут без ы ДобавитьКоманду(ТаблицаКоманд, "Изменить реквизиты табличной части", "ОткрытиеФормы", "Ид", Ложь); РегистрационныеДанные.Вставить("Команды", ТаблицаКоманд); = Новый Массив; МассивНазначений.Добавить("Документ.ЗаказКлиента"); РегистрационныеДанные.Вставить("Назначение", МассивНазначений); Возврат РегистрационныеДанные; КонецФункции Функция ПолучитьТабКомд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Использование, Идентификатор, ПоказыватьОповещение = Истина, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Использование = Использование; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры модуль формы. &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ЗаполняемыйДокумент = Параметры.ОбъектыНазначения[0]; Объект.Товары.Загрузить(ЗаполняемыйДокумент.Товары.Выгрузить()); КонецПроцедуры &НаКлиенте Процедура ПеренестиВДокумент(Команда) КлючПоиска = Новый Структура("Ключ", ЗаполняемыйДокумент); ФормаДокумента = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта", КлючПоиска); ДанныеФормыОбъект = ФормаДокумента.Объект; ПеренестиВДокументНаСервере(ДанныеФормыОбъект); КопироватьДанныеФормы(ДанныеФормыОбъект, ФормаДокумента.Объект); ФормаДокумента.Модифицированность = Истина; Закрыть(); КонецПроцедуры &НаСервере Процедура ПеренестиВДокументНаСервере(ДанныеФормыОбъект) ДанныеФормыОбъект.Товары.Загрузить(Объект.Товары.Выгрузить()); КонецПроцедуры объект обработки товары |
|||
3
pessok
20.09.12
✎
14:30
|
(2) спасибо, изучаю
|
|||
4
pessok
20.09.12
✎
14:32
|
а, т.е. обратным путем... из обработки по ключу получаем форму, и уже потом заполняем... блин. как-то нелогично выглядит вроде бы. однако попробую, спасибо
|
|||
5
pessok
20.09.12
✎
15:27
|
блин. что-то нифига...
&НаКлиенте Процедура ЗаполнитьТаблицуДокумента(Команда) КлючПоиска = Новый Структура("Ключ", Параметры.СсылкаНаДокумент); ФормаДокумента = ПолучитьФорму("Документ.ПриложениеКонтрагента.ФормаОбъекта", КлючПоиска); ДанныеФормыОбъект = ФормаДокумента.Объект; ЗаполнитьДокументОснование(ДанныеФормыОбъект); КонецПроцедуры &НаСервере Процедура ЗаполнитьДокументОснование(ДокументОбъект) ТЗ = ПолучитьДанныеЗаполнения(); Для каждого СтрТЗ Из ТЗ Цикл ЗаполнитьЗначенияСвойств(ДокументОбъект.Услуги.Добавить(), СтрТЗ); КонецЦикла; КонецПроцедуры ДокументОбъект.Услуги имеет тип ДанныеФормыКоллекция. В эту коллекцию в цикле идет добавление. Но в форме документа ничего не меняется... |
|||
6
vmv
20.09.12
✎
15:33
|
(5) Обновить() коллекцию и ОбновитьОтображениеФолрмы() или как там для формы не помню попробуй, сначала первое потом второе
САвет: если модифировать Дфк(Данные формы коллекцию) на сервере, то чтобы на клиенте данные обновились в некоторых случаях(большинсве) клиент нужно пнуть на обновление данных модификации или формы. правило простое - одеквату легко усвоить простую логику |
|||
7
vmv
20.09.12
✎
15:40
|
еще савет
и идентифицируй переменные сразу правильно я такой шаблон придумал Тч - табличная часть, источник Объект.ТабличнаяЧастьТовары (это не в диковинку) Тф - табллица формы, источник Элементы.ДСписокДокументы, Элементы.ТчТовары; иногда полезно перебрать подчиненные поля. Дфк - ДанныеФормыКоллекция, Источник: отображение таблицы значений, табличной части на УФ ДфкЭлКл - ДанныеФормыЭлеменетКоллекции - строка обтображения отображение таблицы значений, табличной части на УФ Дфск - ДанныеФормыСтруткрураСКоллекций (дерево) и тогда код читать просто и понятно, например Для каждого ДфЭлКл Из ДфкОтбор Цикл Если ДфЭлКл.Включить Тогда СтруктураОтбора.Вставить(ДфЭлКол.Ключ, ДфЭлКл.Значение); КонецЕсли; КонецЦикла; а хрен поймешь что за тип в ваших старых привычках Тз, СтрокаТз и прочая чушь "разруха сначала в головах, а потом в сараях" |
|||
8
pessok
20.09.12
✎
15:48
|
уххх скока инфы. перевариваю...
|
|||
9
pessok
20.09.12
✎
15:51
|
ну насчет (7) согласен полностью.
насчет (6)... у коллекия нет метода обновить, а обновление формы на клиенте уже что-т не помогло... |
|||
10
vmv
20.09.12
✎
15:54
|
обновлялки - это коптенция таблиц формы, т.е. Элементы.ТчТовары.Обновить() вроде так да и ваще твой код адске непонятен и по сути и по иденфикации объектов, наверняка там еще косяк с объектом-переменной
гружу в такой-то, вижу другой-то и где мой мешочек с травой - почему не вижу |
|||
11
pessok
20.09.12
✎
16:06
|
(10) ну попробую пояснить
&НаКлиенте Процедура ЗаполнитьТаблицуДокумента(Команда) КлючПоиска = Новый Структура("Ключ", Параметры.СсылкаНаДокумент); ФормаДокумента = ПолучитьФорму("Документ.ПриложениеКонтрагента.ФормаОбъекта", КлючПоиска); ДанныеФормыОбъект = ФормаДокумента.Объект; ЗаполнитьДокументОснование(ДанныеФормыОбъект); ФормаДокумента.ОбновитьОтображениеДанных(); КонецПроцедуры В документе команда, она открывает форму обработку и передает туда параметр СсылкаНаДокумент. В открывшейся форме обработки при клаце на выполнить происходит поиск формы того самого документа по ссылке (хотя я нихера не понял, почему нельзя юзать ВладелецФормы для идентификации). Находим форму и получаем из нее ДанныеФормыОбъект (Дфс). Передаем на сервер для изменения, т.к. заполняем из ТЗ, сформированной запросом &НаСервере Процедура ЗаполнитьДокументОснование(ДокументОбъект) ТЗ = ПолучитьДанныеЗаполнения(); Для каждого СтрТЗ Из ТЗ Цикл ЗаполнитьЗначенияСвойств(ДокументОбъект.Услуги.Добавить(), СтрТЗ); КонецЦикла; КонецПроцедуры На сервере из полученной ТЗ начинаем заполнять Дфс документа. Хотим видеть изменения в документе |
|||
12
pessok
20.09.12
✎
16:32
|
еще разок всплывем, так и не работает(
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |