Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Не могу получить ДанныеФормыСтруктура в обработке заполнения табличной части

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

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

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

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

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

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

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
    
    Для каждого ОбъектНазначение из ОбъектыНазначения Цикл
        
        //---ДЛЯ ОТЛАДКИ

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

Все праильно. В рез "Истина". Форма успешно скопирована
   Admin_Net_1C
 
5 - 13.02.18 - 15:04
(4) тогда почему строка
 Сообщить("--- ВыполнитьКоманду 1: " + СокрЛП(Рез) + " --- " + СокрЛП(ЭтотОбъект.ДокОбСсылка.Номер));

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

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

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

(10) код в (2):

.....

//---ДЛЯ ОТЛАДКИ

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


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


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


...

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

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

...

//---ДЛЯ ОТЛАДКИ

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

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

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

        
        //КопироватьДанныеФормы(Форма.Объект, ЭтотОбъект.ОбъектДокументПоступлениеТоваров);

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

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

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


..

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

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

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


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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует