Имя: Пароль:
1C
1С v8
КД 2.1 Ошибка в ВыгрузитьПоПравилу
0 vadim777
 
21.02.16
14:38
Документ ПоступлениеТоваров.
В событии ПередВыгрузкой записан код:
Если Источник.Склад.ТипСклада = Перечисления.ТипыСкладов.СкладЦентральногоОфиса Тогда
    Отказ = Истина;
Иначе
    Если Параметры.Контрагенты.Найти(Источник.Контрагент) = Неопределено Тогда
        Сообщить("Выгружаем "+Строка(Источник.Контрагент));
        ВыгрузитьПоПравилу(Источник.Контрагент,,,,"Контрагенты",,,,, Ложь);
        Сообщить("Выгрузили "+Строка(Источник.Контрагент));
        Параметры.Контрагенты.Добавить(Источник.Контрагент);
    КонецЕсли;
КонецЕсли;

Получаем ошибу:
Начало выгрузки:   21.02.2016 14:24:42
Выгружаем Поставщик1

Ошибка получения значения свойства подчиненного объекта (по имени свойства источника)
    ПКО                    =  Контрагенты  (Справочник: Контрагенты)
    ПКС                    =  2  (Наименование --> Наименование)
    Объект                 =  Поставщик1  (Контрагенты)
    СвойствоПриемника      =  Наименование  (Строка)
    ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
    ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8211)
    КодСообщения           =  16

Ошибка в обработчике события ПередВыгрузкойОбъекта
    ПКО                    =  ПоступлениеТоваровУслуг  (Документ: Поступление товаров)
    Объект                 =  Поступление товаров АЛКАЛК00003 от 25.01.2016 0:00:00  (Поступление товаров)
    Обработчик             =  ПередВыгрузкойОбъекта
    ОписаниеОшибки         =  Ошибка получения значения свойства подчиненного объекта (по имени свойства источника)
    ПКО                    =  Контрагенты  (Справочник: Контрагенты)
    ПКС                    =  2  (Наименование --> Наименование)
    Объект                 =  Поставщик1  (Контрагенты)
    СвойствоПриемника      =  Наименование  (Строка)
    ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
    ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8211)
    КодСообщения           =  16
    ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1618)
    КодСообщения           =  41

Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1587)}: Ошибка в обработчике события ПередВыгрузкойОбъекта
    ПКО                    =  ПоступлениеТоваровУслуг  (Документ: Поступление товаров)
    Объект                 =  Поступление товаров АЛКАЛК00003 от 25.01.2016 0:00:00  (Поступление товаров)
    Обработчик             =  ПередВыгрузкойОбъекта
    ОписаниеОшибки         =  Ошибка получения значения свойства подчиненного объекта (по имени свойства источника)
    ПКО                    =  Контрагенты  (Справочник: Контрагенты)
    ПКС                    =  2  (Наименование --> Наименование)
    Объект                 =  Поставщик1  (Контрагенты)
    СвойствоПриемника      =  Наименование  (Строка)
    ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
    ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8211)
    КодСообщения           =  16
    ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1618)
    КодСообщения           =  41

Если вызов ВыгрузкаПоПравилу(..) закомментировать, то выгрузка контрагента происходит без ошибок.

Почему по правилу не выгружается?
1 GrayT
 
21.02.16
15:20
Может ему туда объект отдать а не ссылку?
2 vadim777
 
21.02.16
15:58
(1) Попробовал дать объект:
ВыгрузитьПоПравилу(Источник.Контрагент.ПолучитьОбъект(),,,,"Контрагенты",,,,, Ложь);

В результате сообщений об ошибке еще больше:
Начало выгрузки:   21.02.2016 15:55:22
Выгружаем Поставщик1

Ошибка получения значения свойства подчиненного объекта (по имени свойства источника)
    ПКО                    =  Контрагенты  (Справочник: Контрагенты)
    ПКС                    =  2  (Наименование --> Наименование)
    Объект                 =  Поставщик1  (Справочник объект: Контрагенты)
    СвойствоПриемника      =  Наименование  (Строка)
    ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
    ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8211)
    КодСообщения           =  16

Ошибка в обработчике события ПередВыгрузкойОбъекта
    ПКО                    =  ПоступлениеТоваровУслуг  (Документ: Поступление товаров)
    Объект                 =  Поступление товаров АЛКАЛК00003 от 25.01.2016 0:00:00  (Поступление товаров)
    Обработчик             =  ПередВыгрузкойОбъекта
    ОписаниеОшибки         =  Ошибка получения значения свойства подчиненного объекта (по имени свойства источника)
    ПКО                    =  Контрагенты  (Справочник: Контрагенты)
    ПКС                    =  2  (Наименование --> Наименование)
    Объект                 =  Поставщик1  (Справочник объект: Контрагенты)
    СвойствоПриемника      =  Наименование  (Строка)
    ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
    ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8211)
    КодСообщения           =  16
    ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1618)
    КодСообщения           =  41

Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1587)}: Ошибка в обработчике события ПередВыгрузкойОбъекта
    ПКО                    =  ПоступлениеТоваровУслуг  (Документ: Поступление товаров)
    Объект                 =  Поступление товаров АЛКАЛК00003 от 25.01.2016 0:00:00  (Поступление товаров)
    Обработчик             =  ПередВыгрузкойОбъекта
    ОписаниеОшибки         =  Ошибка получения значения свойства подчиненного объекта (по имени свойства источника)
    ПКО                    =  Контрагенты  (Справочник: Контрагенты)
    ПКС                    =  2  (Наименование --> Наименование)
    Объект                 =  Поставщик1  (Справочник объект: Контрагенты)
    СвойствоПриемника      =  Наименование  (Строка)
    ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
    ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8211)
    КодСообщения           =  16
    ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1618)
    КодСообщения           =  41
3 GrayT
 
21.02.16
16:10
С объектом я вообще тупанул. Это ни при чем. А зачем вообще потребовалось выгружать контрагента из ПередВыгрузкой документа?
4 vadim777
 
21.02.16
17:08
Это сделано в стандартной конфе Аптека для Украины 1.0.
Видишь, там идет проверка на то, что контрагент уже обработан:
Если Параметры.Контрагенты.Найти(Источник.Контрагент) = Неопределено Тогда
        Сообщить("Выгружаем "+Строка(Источник.Контрагент));
        ВыгрузитьПоПравилу(Источник.Контрагент,,,,"Контрагенты",,,,, Ложь);
        Сообщить("Выгрузили "+Строка(Источник.Контрагент));
        Параметры.Контрагенты.Добавить(Источник.Контрагент);
    КонецЕсли;

Ну чтобы увеличить скорость загрузки данных.
5 GrayT
 
21.02.16
17:40
Что за глупость? Есть признак ЗапоминатьВыгруженное. Стандартная выгрузка запоминает ключ выгруженных объектов (ссылка для объектов ссылочного типа) и повторно их не выгружает. И ни какой специальной обработки не требуется. Иными словами - пусть данный контрагент хоть в сотне документов разных типов будет, в файл выгрузке он промишется один раз
6 vadim777
 
21.02.16
18:02
Да и я также подумал об этом признаке.
Но сейчас пытаюсь выяснить, почему ВыгрузитьПоПравилу(..) не работает. Несколько раз использовал такой вызов - все было норм. А в этой конфе ни фига не могу побороть.
7 GrayT
 
21.02.16
18:09
Отладчиком посмотреть? Сам так (вызов из ПередВыгрузкой) раньше не делал. ВыгрузитьПоПравилу из ПВО нормально, а так...

Мне вообще непонятно как мы оказались в ПКО ПоступлениеТоваровУслуг. Ведь по идее должны были сразу попасть в ПКО Контрагенты. Единственное объяснение - уже начали выгружать документ, открыли узел, а тут на тебе - выгружай контрагента
8 vadim777
 
21.02.16
19:55
(7) Для отладки в событии ПередВыгрузкой документа ПоступлениеТоваров изменил текст:
Сообщить("ПКО ПоступлениеТоваровУслуг "+Строка(Источник));
Если Источник.Склад.ТипСклада = Перечисления.ТипыСкладов.СкладЦентральногоОфиса Тогда
    Отказ = Истина;
Иначе
    Если Параметры.Контрагенты.Найти(Источник.Контрагент) = Неопределено Тогда
        //Сообщить("Выгружаем "+Строка(Источник.Контрагент));
        //ВыгрузитьПоПравилу(Источник.Контрагент,,,,"Контрагенты",,,,, Ложь);
        //Сообщить("Выгрузили "+Строка(Источник.Контрагент));
        Параметры.Контрагенты.Добавить(Источник.Контрагент);
    КонецЕсли;
КонецЕсли;

Также в ПКО Контрагенты в событие ПередВыгрузкой добавил текст:
Сообщить("ПКО Контрагенты "+Строка(Источник));

Выгружаю только один документ ПоступлениеТоваров. Результат:

Начало выгрузки:   21.02.2016 19:49:59
ПКО ПоступлениеТоваровУслуг Поступление товаров АЛКАЛК00003 от 25.01.2016 0:00:00
ПКО Контрагенты Поставщик1
Контрагенты

Окончание выгрузки: 21.02.2016 19:50:03

Выгружено объектов: 456

Видно, что процесс идет сначала в ПКО документа, а затем уже - в ПКО Контрагенты.
9 vadim777
 
07.03.16
14:01
Так вот, решил попробовать обмен по этим правилам непосредственно из 1С, а не через Универсальный обмен.
Все работает!
Беру эти-же правила, и пытаюсь сделать выгрузку через Универсальный обмен - та же ошибка.
Почему?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн