Имя: Пароль:
1C
1С v8
1С 8.3. Можно ли на клиенте ф = ПолучитьФорму(), а потом поработать с реквизитами ф?
0 1C equals C2H5OH
 
25.10.17
20:07
Что делаю:

1. Написал внешнюю обработку (назовём её "ОбрабЗап") заполнения табличной части одного определённого документа
(подключается в разделе Администрирование - Дополнительные отчёты и обработки, в самом документе видна по кнопке Заполнить в нём, при нажатии вызывается процедура ВыполнитьКоманду в модуле формы этой обработки, её код исполняется, тут всё хорошо)

2. В этом коде (модуля формы ОбрабЗап), в клиентской процедуре, получаю форму штатной обработки которая имеется в конфигурации:

&НаКлиенте

...

ф = ПолучитьФорму(
    "Обработка.ЗагрузкаДанныхИзВнешнихФайлов.Форма.Форма",
        ПараметрыФормы,
        ВладелецФормы,
        УникальныйИдентификатор);

3. Теперь мне надо что:
На этой форме (на ф), присутствует ТабличныйДокумент
Я хочу, далее в коде модуля формы ОбрабЗап, поработать с этим ТабличнымДокументом формы ф - а конкретно, кодом этим проставить в этот ТабличныйДокумент определённые значения (которые я вычислил в коде ОбрабЗап, заранее)

Однако:

- из кода клиентской процедуры модуля формы ОбрабЗап (в котором я получил форму ф) - я эту форму ф передать на сервер (например, в серверную процедуру обработки ОбрабЗап) - не могу - нельзя передать управляемую форму на сервер

- с ТабличнымДокументом, я работать на клиенте не могу (получать его области, прописывать кодом значения в их ячейки) - нельзя работать с ТабличнымДокументом на клиенте

КАК БЫТЬ? (как прописать в ячейки ТД формы ф, кодом, какие-то значения)

Я пробовал так: передавал в серверную процедуру модуля формы ОбрабЗап - ф.ТабличныйДокумент как параметр этой процедуры
И в той серверной процедуре, заполнял этот ТД
Однако, я сильно не уверен, что заполнился ТД который именно на форме ф - большое подозрение что ТД на сервер передался как значение, и там я его заполнил, а вот с ф.ТабличныйДокумент ничего и не произошло

Нужны советы и помощь
1 1C equals C2H5OH
 
25.10.17
20:10
P.S. Ковырять саму ту штатную форму обработки (которую я получал с помощью ф = ПолучитьФорму(...)) - очень не хочется, и нежелательно
2 1C equals C2H5OH
 
25.10.17
20:10
(т.е. брать её в конфигурации, и менять её там - это не желательно очень)
3 AlvlSpb
 
26.10.17
00:27
(0) ф = ПолучитьФорму(
    "Обработка.ЗагрузкаДанныхИзВнешнихФайлов.Форма.Форма",
        ПараметрыФормы,
        ВладелецФормы,
        УникальныйИдентификатор);
ДанныеФормы = Форма.Объект;
ЗаполнитьТЧ(ДанныеФормы);
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
ф.Открыть();

&НаСервереБезКонтекста
Функция ЗаполнитьТЧ(ДанныеФормы)

Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ОбработкаОбъект.ЗагрузкаДанныхИзВнешнихФайлов"));
ДОкТЗ = Док.ТЧ.Выгрузить(); // получили ТЧ формы обработки в виде ТЗ
// Делаем все что надо с ТЗ
Док.ТЧ.Загрузить(ДокТЗ);
ЗначениеВДанныеФормы(Док,ДанныеФормы);

КрнецФункции;
4 1C equals C2H5OH
 
27.10.17
10:44
У штатной обработки ЗагрузкаДанныхИзВнешнихФайлов - у неё реквизит её формы - не ТЧ, а ТабличныйДокумент
5 1C equals C2H5OH
 
27.10.17
11:43
Ступил я, неправильно заполняя ТД на сервере
На самом деле, можно так:

//---------------------------------------------------------------------------------

&НаКлиенте
...
    ф = ПолучитьФорму(
    "Обработка.ЗагрузкаДанныхИзВнешнихФайлов.Форма.Форма",
        ПараметрыФормы,
        ВладелецФормы,
        УникальныйИдентификатор);
...
    ЗаполнитьТД(ф.ТабличныйДокумент)
    
&НаСервере
процедура ЗаполнитьТД(т)
//заполняем табличный документ т
...
конецпроцедуры

//---------------------------------------------------------------------------------

P.S. Скину ещё саму процедуру заполнения ТД, как пример как я заполнял этот ТД:

&НаСервере
процедура ЗаполнитьТД(т)
    
    оАртикул_л = т.Область("Артикул").Лево;
    оКоличество_л = т.Область("Количество").Лево;
    оЦена_л = т.Область("Цена").Лево;
    
    i = 1;
    для каждого стр из Табл цикл
        i = i + 1;
        т.Область(i,оАртикул_л, i, оАртикул_л).Текст = стр.Артикул;
        т.Область(i,оКоличество_л, i, оКоличество_л).Текст = стр.Количество;
        т.Область(i,оЦена_л, i, оЦена_л).Текст = стр.Цена
    конеццикла
    
конецпроцедуры
6 Филиал-msk
 
27.10.17
11:46
(5) > i = i + 1;
В этом месте необходимо использовать иденфтикатор "ё"