<

1C: Конвертация данных, подтверждение

Войти
  1. lg2marvel

    25-02-2021 17:51

    Всем привет. Конвертация данных, давно не сталкивался, много подзабыл.

    Две базы (БП), односторонний обмен: Источник, Приемник.
    Из Источника выгружаю документ "ВводВЭксплуатациюОС" в документ "ОперацияУПР".

    Реализовано следующим образом:
    В правилах ПКО: ВводВЭксплуатациюОС", "ОперацияУПР", ПКС ОперацииУПР - все получаем из входящих данных.
    ПВД ВводВЭксплуатациюОС: подготовливаем структуру ВходящиеДанные и  

    ВыгрузитьПоПравилу(Объект.Ссылка,,ВходящиеДанные,,"ОперацияУПР");
    Отказ = Истина;

    в настройках ПКО ОперацияУПР галочка искать объект приемника по внутреннему идентификатору и автоматически генерировать номер.
    в настройках ПКО ВводВЭксплуатациюОС - искать объект приемника по внутреннемц идентификатору.

    Запускаю обмен из источника: отправка без ошибок, получение ошибка:

    Значение не является значением объектного типа (Менеджер)
    {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(8978)}:    УникальныйИдентификаторИсточника = СтруктураСвойств.Менеджер.ПолучитьСсылку(УникальныйИдентификаторИсточника);
    {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(16076)}:            ПоследнийОбъектЗагрузки = ПрочитатьИнформациюОРегистрацииОбъекта();
    {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(2667)}:        ПроизвестиЧтениеДанныхВРежимеВнешнегоСоединения(ЧтениеСообщения);
    {ОбщийМодуль.ОбменДаннымиСервер.Модуль(5480)}:        ОбработкаОбменаДаннымиВнешнееСоединение.ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных);
    {ОбщийМодуль.ОбменДаннымиСервер.Модуль(2539)}:            ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ,
    {Обработка.ВыполнениеОбменаДанными.МодульМенеджера(26)}:    ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(
    {(1)}:Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными(Параметры[0],Параметры[1])
    {ОбщийМодуль.ОбщегоНазначения.Модуль(4892)}:    Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
    {ОбщийМодуль.ДлительныеОперации.Модуль(719)}:        ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыПроцедуры);
    {ОбщийМодуль.ДлительныеОперации.Модуль(710)}:    ВыполнитьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);

    При этом документы в приемнике создались.

    Ок, лезу в отладку (в базе источнике, в базе приемнике ошибка отправки: возникла ощшибка в базе корреспонденте):
    Обработка.КонвертацияОбъектовИнформационныхБаз
    Функция ПрочитатьИнформациюОРегистрацииОбъекта()
        // Присваиваем ПЕРЕКРЕСТНЫЕ значения переменным; РС симметричен.
        УникальныйИдентификаторПриемника = одАтрибут(ФайлОбмена, ТипСтрока, "УникальныйИдентификаторИсточника");
        УникальныйИдентификаторИсточника = одАтрибут(ФайлОбмена, ТипСтрока, "УникальныйИдентификаторПриемника");
        ТипПриемника                     = одАтрибут(ФайлОбмена, ТипСтрока, "ТипИсточника");
        ТипИсточника                     = одАтрибут(ФайлОбмена, ТипСтрока, "ТипПриемника");
        ПустойНабор                      = одАтрибут(ФайлОбмена, ТипБулево, "ПустойНабор");
    Идентификаторы есть, ТипПриемника есть, ТипИсточника - нет

    и как с этим быть? Пересмотрел кучу примеров, как-то упускается из виду этот момент. Подскажите плз.

  2. vde69

    25-02-2021 17:57

    а где узел?

  3. vde69

    25-02-2021 17:58

    ну и смотреть чего ты там подготовил во входящих данных :)

  4. lg2marvel

    25-02-2021 17:58

    (1) Узел?, не понял Вас

  5. lg2marvel

    25-02-2021 17:59

    (2)
    ВходящиеДанные = Новый Структура;
    ВходящиеДанные.Вставить("Комментарий", Объект.Комментарий);
    ВходящиеДанные.Вставить("ВнешняяСсылка",
        ОбщегоНазначения.АдресПубликацииИнформационнойБазыВИнтернете() + "#" + ПолучитьНавигационнуюСсылку(Объект.Ссылка)
    );
    ВходящиеДанные.Вставить("Организация", Объект.Организация);
    ВходящиеДанные.Вставить("Содержание", Строка(Объект.Ссылка));
    ВходящиеДанные.Вставить("Организация", Объект.Организация);
    ВходящиеДанные.Вставить("Дата", Объект.Дата);
    ВходящиеДанные.Вставить("ПометкаУдаления", Объект.ПометкаУдаления);
    ВходящиеДанные.Вставить("Проведен", Объект.Проведен);

    Запрос = Новый Запрос;
    Запрос.Текст = "
            |ВЫБРАТЬ
            |    ХозрасчетныйДвиженияССубконто.Период КАК Период,
            |    ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор,
            |    ХозрасчетныйДвиженияССубконто.НомерСтроки КАК НомерСтроки,
            |    ХозрасчетныйДвиженияССубконто.Активность КАК Активность,
            |    ХозрасчетныйДвиженияССубконто.СчетДт КАК СчетДт,
            |    ХозрасчетныйДвиженияССубконто.СубконтоДт1 КАК СубконтоДт1,
        //    |    ХозрасчетныйДвиженияССубконто.ВидСубконтоДт1 КАК ВидСубконтоДт1,
            |    ХозрасчетныйДвиженияССубконто.СубконтоДт2 КАК СубконтоДт2,
        //    |    ХозрасчетныйДвиженияССубконто.ВидСубконтоДт2 КАК ВидСубконтоДт2,
            |    ХозрасчетныйДвиженияССубконто.СубконтоДт3 КАК СубконтоДт3,
        //    |    ХозрасчетныйДвиженияССубконто.ВидСубконтоДт3 КАК ВидСубконтоДт3,
            |    ХозрасчетныйДвиженияССубконто.СчетКт КАК СчетКт,
            |    ХозрасчетныйДвиженияССубконто.СубконтоКт1 КАК СубконтоКт1,
        //    |    ХозрасчетныйДвиженияССубконто.ВидСубконтоКт1 КАК ВидСубконтоКт1,
            |    ХозрасчетныйДвиженияССубконто.СубконтоКт2 КАК СубконтоКт2,
        //    |    ХозрасчетныйДвиженияССубконто.ВидСубконтоКт2 КАК ВидСубконтоКт2,
            |    ХозрасчетныйДвиженияССубконто.СубконтоКт3 КАК СубконтоКт3,
        //    |    ХозрасчетныйДвиженияССубконто.ВидСубконтоКт3 КАК ВидСубконтоКт3,
            |    ХозрасчетныйДвиженияССубконто.Организация КАК Организация,
            |    ХозрасчетныйДвиженияССубконто.ВалютаДт КАК ВалютаДт,
            |    ХозрасчетныйДвиженияССубконто.ВалютаКт КАК ВалютаКт,
            |    ХозрасчетныйДвиженияССубконто.НалоговоеНазначениеДт КАК НалоговоеНазначениеДт,
            |    ХозрасчетныйДвиженияССубконто.НалоговоеНазначениеКт КАК НалоговоеНазначениеКт,
            |    ХозрасчетныйДвиженияССубконто.Сумма КАК Сумма,
            |    ХозрасчетныйДвиженияССубконто.ВалютнаяСуммаДт КАК ВалютнаяСуммаДт,
            |    ХозрасчетныйДвиженияССубконто.ВалютнаяСуммаКт КАК ВалютнаяСуммаКт,
            |    ХозрасчетныйДвиженияССубконто.КоличествоДт КАК КоличествоДт,
            |    ХозрасчетныйДвиженияССубконто.КоличествоКт КАК КоличествоКт,
            |    ХозрасчетныйДвиженияССубконто.СуммаНУДт КАК СуммаНУДт,
            |    ХозрасчетныйДвиженияССубконто.СуммаНУКт КАК СуммаНУКт,
            |    ХозрасчетныйДвиженияССубконто.Содержание КАК Содержание,
            |    ХозрасчетныйДвиженияССубконто.НомерЖурнала КАК НомерЖурнала,
            |    ХозрасчетныйДвиженияССубконто.СчетДополнительный КАК СчетДополнительный,
            |    ХозрасчетныйДвиженияССубконто.НеКорректироватьСтоимостьАвтоматически КАК НеКорректироватьСтоимостьАвтоматически,
            |    ХозрасчетныйДвиженияССубконто.НомерИсходнойПроводки КАК НомерИсходнойПроводки
        //    |    ХозрасчетныйДвиженияССубконто.МоментВремени КАК МоментВремени
            |ИЗ
            |    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , Регистратор = &Регистратор, , ) КАК ХозрасчетныйДвиженияССубконто
            |";
    Запрос.УстановитьПараметр("Регистратор", Объект.Ссылка);
    тз = Запрос.Выполнить().Выгрузить();
    ВходящиеДанные.Вставить("Хозрасчетный", тз);
    ВходящиеДанные.Вставить("СуммаОперации", тз.Итог("Сумма"));

    ВыгрузитьПоПравилу(Объект.Ссылка,,ВходящиеДанные,,"ОперацияУПР");

    Отказ = Истина;

  6. vde69

    25-02-2021 18:00

    я на память не помню, но еще в части случаев надо перекресно пользоватся входящие и исходящие данные, по моему это твой случай

  7. lg2marvel

    25-02-2021 18:00

    (4) в обработчике ПВД ПередВыгрузкой

  8. vde69

    25-02-2021 18:02

    (4) у тебя не все необходимые свойства. Подумай, что является ключем поиска :)

  9. lg2marvel

    25-02-2021 18:02

    (5) т.е. добавлять регистрацию документа в приемнике и делать "холостую" выгрузку обратно в источник?

  10. lg2marvel

    25-02-2021 18:03

    (7) по уникальному идентификатору хотелось бы

  11. vde69

    25-02-2021 18:03

    должно быть типа (посмотри в файле у других ссылок)
    "{Идентификатор}"

  12. vde69

    25-02-2021 18:06

    (8) нет, по моему ты должен генерить ИсходящиеДанные, а в ПКО они уже станут входящими...

    а вот когда идешь из ПКО в ПКС то там они всегда входящие

  13. lg2marvel

    25-02-2021 18:14

    (10) нет такого нигде :-(
    (11)  Попробую конечно, но ведь док полностью передается заполненный в приемник

  14. lg2marvel

    25-02-2021 18:28

    (11) данные отправились, все ок. При повторном запуске документы с регистрации снялись - ок.

    Ошибка видимо в другом, возможно в том что в приемнике документы удалял для тестов.

    Значение не является значением объектного типа (Менеджер)
    {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(8978)}:    УникальныйИдентификаторИсточника = СтруктураСвойств.Менеджер.ПолучитьСсылку(УникальныйИдентификаторИсточника);
    {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(16076)}:            ПоследнийОбъектЗагрузки = ПрочитатьИнформациюОРегистрацииОбъекта();
    {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(2667)}:        ПроизвестиЧтениеДанныхВРежимеВнешнегоСоединения(ЧтениеСообщения);
    {ОбщийМодуль.ОбменДаннымиСервер.Модуль(5480)}:        ОбработкаОбменаДаннымиВнешнееСоединение.ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных);
    {ОбщийМодуль.ОбменДаннымиСервер.Модуль(2539)}:            ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ,
    {Обработка.ВыполнениеОбменаДанными.МодульМенеджера(26)}:    ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(
    {(1)}:Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными(Параметры[0],Параметры[1])
    {ОбщийМодуль.ОбщегоНазначения.Модуль(4892)}:    Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
    {ОбщийМодуль.ДлительныеОперации.Модуль(719)}:        ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыПроцедуры);
    {ОбщийМодуль.ДлительныеОперации.Модуль(710)}:    ВыполнитьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);

  15. lg2marvel

    25-02-2021 19:00

    вопрос закрыт, ошибка была не связанная с правилами. Пересоздал узел обмена - все ок

  16. lg2marvel

    01-03-2021 16:01

    Таки вопрос не закрыт :-(.
    Объекты выгрузились, и при повторной синхронизации  опять та же ошибка. В принципе на работоспособность не влияет, но не хорошо это.
    (5) О перекрестной передаче не подскажете где почитать, глянуть примеры?

  17. lg2marvel

    01-03-2021 16:18

    В РегистрСведений.СоответствияОбъектовИнформационныхБаз.ФормаСписка не пишется в поле ТипПриемника значение. Попробую исправить