|   |   | 
| 
 | Изменение данных в табличной части через внешнюю обработку | ☑ | ||
|---|---|---|---|---|
| 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 | 
        Оставлю запись документа и обновление формы. Всем спасибо за ответы.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |