8.х ОБМЕН Обмен данными 8->7 через COM

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем tunec, 11 июл 2008.

  1. TopicStarter Overlay
    tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    Есть торговля 8 v10.2
    есть бухгалтерия 7 v493

    так вот в торговле запускается обработка копирующая объекты в бухгалтерию.

    Есть процедура выгружающая договора контрагентов. В ней объявляется справочник договоров
    СпрДог77 = OLEОбъект.CreateObject("Справочник.Договоры");
    МассивРодителей = Новый Массив;

    Потом идет цикл заполняющий массив.

    А потом обработка массива. Есть строка кода:

    Код:
    Если СпрДог77.НайтиПоКоду(МассивРодителей[ИндексМассиваРодителей].Код)=0 Тогда
    
    
    
    После чего на истину создается новый элемент справочника и идет заполнение его реквизитов.

    Так вот. На этой строке происходит следующее:

    ИндексМассиваРодителей 1 Число
    МассивРодителей[ИндексМассиваРодителей].Код "05047" Строка
    СпрДог77.НайтиПоКоду(МассивРодителей[ИндексМассиваРодителей].Код) 0 Число


    Притом, что в базе есть уже такой код, созданный этим же куском текста, но при предыдущей прогонке.

    Если его нет, то все номано. Обработка работает как надо, а если он есть, то из-за этой строки кода программа пытается создать еще один элемент с тем же кодом, и выдает соответственно ошибку уникальности.

    Добавлено:

    В справочнике длина кода 6 симв, а длина передаваемого кода 5. Может из-за этого вылезает бага? Тогда чем дополнить код? пробелами не поиогает... И если вручную вбить шестизначный код, точно существующий, то все равно возвращается 0 (т.е. не находит)...

    Т.е.
    СпрДог77.НайтиПоКоду("05047") 0 Число
    СпрДог77.НайтиПоКоду("05047 ") 0 Число
    СпрДог77.НайтиПоКоду(" 05047") 0 Число
    СпрДог77.НайтиПоКоду("000001") 0 Число //такой элемент в базе есть

    как заставить ее работать? До этого такой же код на поиск контрагента (мах 8 знаков, передаем 5 знаков) все нормально работате. Объявления, вызовы, все абсолютно идентично! различаются только имена переменных. :(
  2. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Забываете про иерархию.
    Сначала надо найти владельца и потом осуществлять поиск.
    В 7.7 нельзя найти по коду не задав владельца.

    Поэтому когда мне надо было перебирать подобные структуры через ОЛЕ, я делал перебор контрагентов (владельцев) и внутри каждого контрагента делал перебор договоров.

    Аналогично и единицы измерения, подчиненные номенклатуре.
  3. TopicStarter Overlay
    tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    сорри, при описании проблемы забыл указать еще имеющуюся строку кода ДО описаного выше условия:
    Код:
    СпрДог77.ИспользоватьВладельца(СпрКон77);
    
    где СпрКон найденный ранее контрагент (кстати поиск ищет номано), которому принадлежит договор.

    :unsure:
  4. TopicStarter Overlay
    tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    Ситуацию удалось локализовать. Вобщем такие дела:

    Что нужно сделать:
    Перенести Договора контрагента в соответствии со структурой справочника "ДоговораКонтрагентов"

    Объявляется переменная СпрКон77
    СпрКон77 = OLEОбъект.CreateObject("Справочник.Кнтрагенты");
    СпрКон77.НайтиПоКоду(Ссылка); //где ссылка объект из плана обмена

    Есть переменные СпрДог77 и СпрГруппДог77. Объявление пременных:
    Код:
    СпрГрупп77    = OLEОбъект.CreateObject("Справочник.Договоры");
    СпрДог77    = OLEОбъект.CreateObject("Справочник.Договоры");
    
    
    и код в процедуре:
    1) Этот работает нормально
    Код:
    СпрГруппДог77.ИспользоватьВладельца(СпрКон77.ТекущийЭлемент());
    Если СпрГруппДог77.НайтиПоКоду(МассивРодителей[ИндексМассиваРодителей].Код)=0 Тогда
    
    


    2) А этот код непосредственно следующий за первым уже не срабатывает на "НайтиПоКоду"
    Код:
    СпрДог77.ИспользоватьВладельца(СпрКон77.ТекущийЭлемент());
    Если СпрДог77.НайтиПоКоду(МассивРодителей[ИндексМассиваРодителей].Код)=0 Тогда
    
    
    п.с. Объекты с такими кодами точно существуют.
  5. TopicStarter Overlay
    tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    промелькнула мысль, а не периодический ли реквизит "договор"? Потестю....
  6. TopicStarter Overlay
    tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    аааааааааааааааааааааааааааааааааааааааааааааааааааааа!!!!

    вы не поверите

    aaaaaaaaa!!!!

    все дело в волшебных пузырьках!!!!!

    aaaaaaaaaaaaaaaaa!!!!


    ладно по делу. ошибка в том, что почему-то у меня при пользовании методом НайтиПоКоду(НекийКод) система по умолчанию вместо НайтиПоКоду(НекийКод,0или2) подставляла 1, т.е. искать с учетом родителя. Т.е. она легко находила папку, а внутрь папки не заглядывала. такое западло подложила толи 7.7, толи 8.0....

    Вот такие пироги.

    всем спасиб, может кому пригодится мой опыт...

Поделиться этой страницей