|
Изменение данных в табличной части через внешнюю обработку | ☑ | ||
---|---|---|---|---|
0
salvator
10.01.23
✎
23:00
|
Есть внешняя обработка, с типом "ЗаполнениеОбъекта". Выполнение команды через параметр "ОткрытиеФормы".
У обработки есть форма, где перед заполнением указываются некоторые параметры. Создал параметр формы "ОбъектыНазначения" с типом "Произвольный", и реквизит формы "ОбъектЗаполнения" так же с произвольным типом. В процедуре "ПриСозданииНаСервере" пишу: ОбъектЗаполнения = Параметры.ОбъектыНазначения[0]; В "ОбъектЗаполнения" при открытии формы обработки передается ссылка на документ, из которого вызывается обработка. В самой процедуре по заполнению табличной части: ДокументОбъект = ОбъектЗаполнения.ПолучитьОбъект(); ДокументОбъект.Товары.Очистить(); И далее в цикле по имеющимся данным: НоваяСтрока = ДокументОбъект.Товары.Добавить(); и заполняются реквизиты ТЧ. Но таким образом данные не изменяются, понятно. Как правильно сделать заполнение, чтобы сразу же в форме открытого документа появились новые данные? |
|||
1
p-soft
10.01.23
✎
23:14
|
можно переоткрывать форму, можно использовать ЗначениеВДанныеФормы
|
|||
2
salvator
10.01.23
✎
23:18
|
(1) Переоткрывать форму документа?
А со ЗначениеВДанныеФормы что имеете в виду? |
|||
3
p-soft
10.01.23
✎
23:30
|
(2) да, можно переоткрывать форму - это проще.
ЗначениеВДанныеФормы вернет обновленную таблицу уже, но это в коде формы надо юзать. |
|||
4
salvator
10.01.23
✎
23:37
|
(3) Пример можете написать, как переоткрыть форму?
|
|||
5
p-soft
10.01.23
✎
23:43
|
нашел кусок, но тут не закрываю
&НаКлиенте Процедура КомандаЗагрузить(Команда) Если НЕ ЗначениеЗаполнено(Объект.Курс) Тогда ПоказатьОповещениеПользователя(НСтр("ru = 'Ошибка: Не указан курс валюты'"),,, БиблиотекаКартинок.Информация32); Возврат; КонецЕсли; Док = ВыполнитьНаСервере(); Если Док=Неопределено Тогда ПоказатьОповещениеПользователя(НСтр("ru = 'При пересчете возникла ошибка'"),,, БиблиотекаКартинок.Информация32); Иначе Форма = ПолучитьФорму(ПолучитьИмяФормыНаСервере(Док), Новый Структура("Ключ", Док)); Форма.Открыть(); Форма.ЭтотОбъект.Прочитать(); КонецЕсли; КонецПроцедуры |
|||
6
salvator
11.01.23
✎
10:21
|
(5) Что есть такое "ПолучитьИмяФормыНаСервере"?
|
|||
7
p-soft
11.01.23
✎
10:29
|
(6) получает имя формы вызвавшего эту обработку документа. можно просто строкой прописать
|
|||
8
salvator
11.01.23
✎
10:34
|
(7) Код этой функции можете скинуть?
|
|||
9
salvator
11.01.23
✎
12:22
|
Добился результата промежуточного, но только предварительно записав объект документа в серверной процедуре изменения. И затем в клиентской процедуре написав "ВладелецФормы.ЭтотОбъект.Прочитать();"
Задачу можно решить, записывая данные в форму документа напрямую: ФормаДок= ВладелецФормы.Объект; ЗаполнитьДокумент(НовыйОбъект); // здесь процедура заполнения по типу НовСтр = ФормаДок.Товары.Добавить(); КопироватьДанныеФормы(ФормаДок, ВладелецФормы.Объект); Но загвоздка в том, что при заполнении табличной части мне необходимо вызывать процедуры и функции общего модуля для заполнения счетов учета, расчета суммы НДС и т.д. А в их параметрах используется ДокументОбъект и Метаданные. Т.е. имея только форму документа их не вызвать. Кто что посоветует? |
|||
10
Garykom
гуру
11.01.23
✎
12:26
|
Расширение или создавать документ в базе, без подключения обработки для заполнения объекта
|
|||
11
salvator
11.01.23
✎
13:40
|
Оставлю запись документа и обновление формы. Всем спасибо за ответы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |