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