Имя: Пароль:
1C
1С v8
Не могу получить ДанныеФормыСтруктура в обработке заполнения табличной части
0 Admin_Net_1C
 
13.02.18
14:50
Добрый день, народ.
Платформа: 8.3.11.2867
Конфигурация: УТ 11.4.2.132
Делаю обработку заполнения для документа ПоступлениеТоваров. При вызове открывается форма, в которой пользователь выбирает файл Excel из которого в форму обработки грузятся данные о номенклатуре, которые потом должны быть перенесены в табличную часть документа.
Собственно проблема: создаю новый документ, записываю его. Нажимаю кнопку "Заполнить документ", открывается форма обработки и попадаю в процедуру ВыполнитьКоманду, в которой пишу код:


...
Рез = КопироватьДанныеФормы(ФормаОткрытогоДок.Объект, ЭтотОбъект.ДокОбСсылка);

Сообщить("--- ВыполнитьКоманду 1: " + СокрЛП(Рез) + " --- " + СокрЛП(ЭтотОбъект.ДокОбСсылка.Номер));


и в сообщении ожидаю увидеть номер документа из которого вызвана форма обработки, но в ответ получаю:

--- ВыполнитьКоманду 1: Да ---

т.е. ЭтотОбъект.ДокОбСсылка пустой!
Подскажите в чем может быть проблема, уже всю голову сломал!
1 Admin_Net_1C
 
13.02.18
14:53
к (0) ДокОбСсылка - это реквизит формы типа ДокументОбъект.ПоступлениеТоваров
2 Admin_Net_1C
 
13.02.18
14:55
Для наглядности привожу полностью код процедуры:

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
    
    Для каждого ОбъектНазначение из ОбъектыНазначения Цикл
        
        //---ДЛЯ ОТЛАДКИ
        Сообщить("--- ВыполнитьКоманду:" + СокрЛП(ОбъектНазначение));
        //
        
        ПараметрыФормы = Новый Структура("Ключ", ОбъектНазначение); //это передали в форму заполнения
        ФормаОткрытогоДок = ПолучитьФорму("Документ.ПоступлениеТоваров.ФормаОбъекта",ПараметрыФормы); //окна не ищем, переполучаем уже открытое
        
        Рез = КопироватьДанныеФормы(ФормаОткрытогоДок.Объект, ЭтотОбъект.ДокОбСсылка);
        
        //---ДЛЯ ОТЛАДКИ
        Сообщить("--- ВыполнитьКоманду 1: " + СокрЛП(Рез) + " --- " + СокрЛП(ЭтотОбъект.ДокОбСсылка.Номер));
        //

        
        ОткрытьФорму("ВнешняяОбработка.ВО_ЗагрузкаДанныхВТЧПоступленияТоваровИзФайлаExcel.Форма.Форма",
            ПолучитьПарамНаСервере(),
            ЭтаФорма,
            Истина,
            ,
            ,
            Новый ОписаниеОповещения("ФормаЗагрузкаЗавершение",
                ЭтаФорма,
                ПараметрыФормы),
            РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
    КонецЦикла;
    
КонецПроцедуры
3 Admin_Net_1C
 
13.02.18
15:00
Изменил строку получения формы открытого окна на:

ФормаОткрытогоДок = ПолучитьФорму("Документ.ПоступлениеТоваров.Форма.ФормаДокумента",ПараметрыФормы);

толку нет (
4 Alex87r
 
13.02.18
15:01
КопироватьДанныеФормы (CopyFormData)
Синтаксис:

КопироватьДанныеФормы(<Источник>, <Приемник>)
Параметры:

<Источник> (обязательный)

Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура.
Объект - источник.
<Приемник> (обязательный)

Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура.
Объект приемник.
Возвращаемое значение:

Тип: Булево.
Истина - копирование произведено. Ложь - структура объектов абсолютно несовместима.
Описание:

Копирует данные формы, обладающие совместимой структурой.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Примечание:

Во внешнем соединении метод игнорируется.

Все праильно. В рез "Истина". Форма успешно скопирована
5 Admin_Net_1C
 
13.02.18
15:04
(4) тогда почему строка

Сообщить("--- ВыполнитьКоманду 1: " + СокрЛП(Рез) + " --- " + СокрЛП(ЭтотОбъект.ДокОбСсылка.Номер));

НЕ ВЫВОДИТ номер документа из которого вызвана обработка заполнения (а выводит только Истина, как результат, что форма успешно скопирована) ???

P.S. документ записан, номер у него уже существует
6 Alex87r
 
13.02.18
15:04
Ну может после заполнения формы ее нужно записать в БД? (5)
7 Admin_Net_1C
 
13.02.18
15:06
(6) пля... данные формы успешно скопированы (на форме документа ЕСТЬ номер), в сообщении (т.е. ДокОбСсылка) нет...
Может я не понятно объясняю?
8 hhhh
 
13.02.18
15:57
(7) какой тип у ЭтотОбъект.ДокОбСсылка  ??
9 SSSSS_AAAAA
 
13.02.18
16:12
(0) "выбирает файл Excel из которого в форму обработки грузятся данные о номенклатуре, которые потом должны быть перенесены в табличную часть документа. "
Очередная попытка изобрести велосипед и вместо заполнения ДОКУМЕНТА заполнить ФОРМУ документа...
10 Buster007
 
13.02.18
16:35
ПолучитьФорму("Документ.ПоступлениеТоваров.ФормаОбъекта",ПараметрыФормы);
уверен что это возвращает тебе открытую форму?
11 Alex87r
 
13.02.18
20:28
(10) Чтобы заполнить форму, ее не обязательно открывать) (9) Ага. Документ уже записан, смысла нет заполнять форму.
12 Admin_Net_1C
 
14.02.18
06:06
(8) -> (1)

(9) мопед не мой, так хочет заказчик )) Расскажи правильно должна работать обработка заполнения НЕ через форму (на просторах инета именно этот способ и рекомендуют. В этом плане все сделано по ссылкам из открытых источников)?

(10) код в (2):

.....

//---ДЛЯ ОТЛАДКИ
        Сообщить("--- ВыполнитьКоманду:" + СокрЛП(ОбъектНазначение));
        //

        
        ПараметрыФормы = Новый Структура("Ключ", ОбъектНазначение);//это передали в форму заполнения

        ФормаОткрытогоДок = ПолучитьФорму("Документ.ПоступлениеТоваров.ФормаОбъекта",ПараметрыФормы);//окна не ищем, переполучаем уже открытое

...

СокрЛП(ОбъектНазначение) - выводит "Приобретение товаров и услуг №000-000005 от 13.02.2018 15:33:12" (именно этот документ и открыт)

(11) см комент выше (про обработку заполнения и форму)
13 Admin_Net_1C
 
14.02.18
06:11
(8) сори, вот так:

...

//---ДЛЯ ОТЛАДКИ
Сообщить("--- ВыполнитьКоманду:" + СокрЛП(ОбъектНазначение));
//
        
        ПараметрыФормы = Новый Структура("Ключ", ОбъектНазначение); //это передали в форму заполнения
        ФормаОткрытогоДок = ПолучитьФорму("Документ.ПоступлениеТоваров.Форма.ФормаДокумента",ПараметрыФормы); //окна не ищем, переполучаем уже открытое
        
        //КопироватьДанныеФормы(Форма.Объект, ЭтотОбъект.ОбъектДокументПоступлениеТоваров);
        
        //КопироватьДанныеФормы(Форма.Объект, Объект.ДокументОбъектПоступлениеТоваров);
        Рез = КопироватьДанныеФормы(ФормаОткрытогоДок.Объект, ЭтотОбъект.ДокОбСсылка);
        
        Сообщить("--- ВыполнитьКоманду 0:" + СокрлП(ТипЗнч(ЭтотОбъект.ДокОбСсылка)));
        
        //---ДЛЯ ОТЛАДКИ
        Сообщить("--- ВыполнитьКоманду 1: " + СокрЛП(Рез) + " --- " + СокрЛП(ЭтотОбъект.ДокОбСсылка.Номер));
        //

..

Результат:
--- ВыполнитьКоманду:Приобретение товаров и услуг 0000-000005 от 13.02.2018 15:33:12
--- ВыполнитьКоманду 0:ДанныеФормыСтруктура
--- ВыполнитьКоманду 1: Да ---
14 Admin_Net_1C
 
14.02.18
06:57
всем спасибо, пошел по другому пути, вроде работает )

Если кому интересно:

В модуле объекта:

Функция СведенияОВнешнейОбработке() Экспорт
...
ДобавитьКоманду(Команды, "Заполнить документ","ВыполнитьКоманду","ОткрытиеФормы",Ложь,) ;
...
КонецФункции


В модуле формы :

&НаКлиенте
Процедура ВыполнитьЗагрузкуВТЧДокумента(Команда)
    
    ТоварыТЧ = ВладелецФормы.Объект.Товары;
    ТоварыТЧ.Очистить();
    Для каждого СтрокаТЧ из Объект.ДанныеДляЗагрузки цикл
        НовСтрока = ТоварыТЧ.Добавить();
        ЗаполнитьЗначенияСвойств(НовСтрока, СтрокаТЧ);
        
        НовСтрока.КоличествоУпаковок = НовСтрока.Количество;
        НовСтрока.Цена = ?(НовСтрока.Количество<>0, НовСтрока.Сумма/НовСтрока.Количество, 0);
    КонецЦикла;    
    
    ЭтаФорма.Закрыть();
    
КонецПроцедуры
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший