Имя: Пароль:
1C
1C 7.7
v7: КД2 7.7 -> 7.7 Не работают обработчики на стороне приемника
,
0 Turku
 
03.07.18
05:16
День добрый, товарищи. Подскажите, в чем проблема, пожалуйста. Делаю выгрузку документов "РасходнаяНакладная" из комплексной семерки в типовую бухию 7.7. Пишу такой код в конвертации "после загрузки объекта":
Если Объект.Вид() = "РасходнаяНакладная" Тогда
    СпрТипыЦен = СоздатьОбъект("Справочник.ТипыЦен");
    Если СпрТипыЦен.НайтиПоНаименованию("Основная цена")=1 Тогда
        Объект.ТипЦен = СпрТипыЦен.ТекущийЭлемент();    
    КонецЕсли;
    Объект.ВидОтгрузки = 1;
КонецЕсли;
Это глобальный обработчик, ибо в ПКО такие обработчики в 7.7 не поддерживаются.
А при загрузке получаю такое: Конвертация_ПослеЗагрузкиОбъекта<<?>>(ОбъектБД, ИмяПравила)
Функция не обнаружена (Конвертация_ПослеЗагрузкиОбъекта)

Модули в обеих обработках поменял на выгруженные из КД.
1 bolder
 
03.07.18
07:36
(0) Отладчик конечно отобрали?В 7.7 отладка просто счастье какое то))
2 Turku
 
03.07.18
15:44
Сделал сохранение/восстановление БД приемника и обработчики заработали...

Однако, не удается выгрузить периодические реквизиты спр. Номенклатура. Решение подсмотрел здесь же на Мисте (оно выглядит рабочим):
v8: Как перенести периодические реквизиты из 7.7 с помощью "Конвертации данных 2.0"

Если в обработчиком выгрузки все понятно, он отрабатывает и в файл данные от него пишутся, то вот куда вставить второй обработчик "При загрузке свойства" не вижу. Нужного поля просто нет. Вот скриншот.

https://cdn1.savepice.ru/uploads/2018/7/3/81fece50ab5ef92b7cbb10db0dabb6ac-full.png

В принципе, устроил бы вариант установки одного последнего значения, но только не на текущую дату, а, к примеру, на 01.01.18.

Гуру конвертации, подскажите, пожалуйста, куда копать.
3 Turku
 
03.07.18
23:57
Сам же и отпишусь. Может быть, кому-то полезно будет. Победил я этих периодические реквизиты, разместив коды выгрузки/загрузки в обработчике "При выгрузке" и "При загрузке" ПКО "Номенклатура". Выгружающий код из той темы, а вот загружающий немного модифицировать пришлось вида:

Если Объект.ЭтоГруппа() = 0 Тогда
    УзлыПериодического = Узел.ВыбратьУзлы("Периодический");            
    Для СчУзлов = 0 По УзлыПериодического.КоличествоУзлов-1 Цикл
        УзелПериодического = УзлыПериодического.ПолучитьУзел(СчУзлов);            
        Имя = УзелПериодического.ПолучитьАтрибут("Имя");
        Периодический = СоздатьОбъект("Периодический");
        Периодический.ИспользоватьОбъект(Имя, Объект);
        Выборка = УзелПериодического.ВыбратьУзлы("ПериодическоеЗначение");
        Для Сч = 0 По Выборка.КоличествоУзлов-1 Цикл
            УзелЗначения = Выборка.ПолучитьУзел(Сч);
            ДатаЗнач = УзелЗначения.ПолучитьАтрибут("ДатаЗнач");
            Значение = УзелЗначения.ПолучитьАтрибут("Значение");
            
            Периодический.ДатаЗнач = ДатаЗнач;
            //Периодический.Значение = Значение;
            СтНДС = СоздатьОбъект("Справочник.СтавкиНДС");
            Если СтНДС.НайтиПоНаименованию(Значение)=1 Тогда
                Периодический.Значение = СтНДС.ТекущийЭлемент();    
            КонецЕсли;
            
            СтНП = СоздатьОбъект("Справочник.СтавкиНП");
            Если СтНП.НайтиПоНаименованию(Значение)=1 Тогда
                Периодический.Значение = СтНП.ТекущийЭлемент();    
            КонецЕсли;

            Периодический.Записать();
            //сообщить(ДатаЗнач);
            //сообщить(Значение);
        КонецЦикла;
    КонецЦикла;
КонецЕсли;

Хотя в справке КД2 написано что этот обработчик якобы "Только для платформы V8", однако, он отработал на 7.7.
4 SleepyHead
 
гуру
04.07.18
06:20
(3) В справке много чего написано, но надо проверять опытным путем. Пишешь код обработчика, выгружаешь модули, если в модулях появился - работает.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший