8.х ОБМЕН Программная запись владельца Справочника

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем sjy19, 7 май 2013.

  1. TopicStarter Overlay
    sjy19
    Offline

    sjy19

    Регистрация:
    7 май 2013
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Добрый день, дорогие форумчане!
    Прошу помощи в таком вопросе новичку в 1с.
    Делаю выгрузку из MySQL в справочники. Есть 2 справочника Контрагенты и КонтактныеЛица, связанные по k_name. Не удается программно указать Владельца в Справочнике КонтактныеЛица. Может кто-нибудь подскажет куда копать.. Ниже код:

    Код:
    
    Table=conn.execute("select * from kl_svx");
    МассивКлиенты = Новый Массив();
    
    Пока Table.EOF() = 0 Цикл
    k_name= Table.Fields("k_name").Value;
    p_name = Table.Fields("p_name").Value;
    adres = Table.Fields("adres").Value;
    dog_in = Table.Fields("dog_in").Value;
    dog_sm = Table.Fields("dog_sm").Value;
    dog_ilg = Table.Fields("dog_ilg").Value;
    opl = Table.Fields("opl").Value;
    sales = Table.Fields("sales").Value;
    
    НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
    НовыйЭлемент.Наименование = k_name;
    НовыйЭлемент.ПолноеНаименование = p_name;
    НовыйЭлемент.Адрес = adres;
    НовыйЭлемент.ДоговорИнстар = dog_in;
    НовыйЭлемент.ДоговорСмарт = dog_sm;
    НовыйЭлемент.ДоговорИЛГ = dog_ilg;
    НовыйЭлемент.Оплата = opl;
    НовыйЭлемент.Сейлз = sales;
    НовыйЭлемент.Записать();
    
    МассивКлиенты.Добавить(НовыйЭлемент.Ссылка);
    
    Table.MoveNext();
    КонецЦикла;
    Table.Close();
    
    Для Каждого ЭлементМассива Из МассивКлиенты Цикл
    Если ТипЗнч(ЭлементМассива) = Тип("Строка") Тогда
    Сообщить (ЭлементМассива);
    КонецЕсли;
    
    КонецЦикла;  
    
    //ПервоеЗначение = МассивКлиенты.Получить(2);
    // Сообщить (ПервоеЗначение);
    
    
    Table1=conn.execute("select * from kontkl_svx");
    Пока Table1.EOF() = 0 Цикл
    face = Table1.Fields("face").Value;
    dolgn = Table1.Fields("dolgn").Value;
    tel = Table1.Fields("tel").Value;
    mail = Table1.Fields("mail").Value;
    
    НовыйЭлемент1 = Справочники.КонтактныеЛицаКонтрагентов.СоздатьЭлемент();
    НовыйЭлемент1.Наименование = face;
    НовыйЭлемент1.КраткоеИмя = k_name;
    НовыйЭлемент1.Должность = dolgn;
    НовыйЭлемент1.Телефон = tel;
    НовыйЭлемент1.ЭлектроннаяПочта = mail;
    
    Для Каждого ЭлементМассива Из МассивКлиенты Цикл
    Если Не ПустаяСтрока(ЭлементМассива) Тогда
    
    НовыйЭлемент1.Владелец = ЭлементМассива;
    Попытка
    НовыйЭлемент1.Владелец.Записать();
    Исключение
    Предупреждение("Не удалось записать объект """ + НовыйЭлемент1.Владелец + """
    |" + ОписаниеОшибки());
    КонецПопытки;
    КонецЕсли;
    КонецЦикла;
    
    НовыйЭлемент1.Записать();
    Table1.MoveNext();
    КонецЦикла;
    Table1.Close();
    
  2. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    НовыйЭлемент1.Владелец.Записать(); - может ошибаюсь, но мне кажется это лишнее. Записывать надо элемент справочника, а не реквизит элемента справочника

    вам из массива клиентов надо именно вашего клиента найти и указать как владельца, а не перебирать циклом массив записывая элементы в реквизит Владелец

    сами таблицы на сервере у вас связаны между собой наверняка, по какому полю?
  3. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Конфигурация какая?
    Реквизита "КраткоеИмя" в типовой не вижу.
    "Телефон" и "ЭлектроннаяПочта" в типовых это не реквизиты справочника, а записи РС КонтактнаяИнформация.

    И код мне не совсем понятен. Кто у вас в итоге будет владельцем записи из справочника КонтактнаяИнформация? Последний контрагент в списке загруженных?
  4. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    я бы вторую часть вот так переписала (навскидку)
    Код:
    Table1=conn.execute("select * from kontkl_svx");
    Пока Table1.EOF() = 0 Цикл
    face = Table1.Fields("face").Value;
    dolgn = Table1.Fields("dolgn").Value;
    tel = Table1.Fields("tel").Value;
    mail = Table1.Fields("mail").Value;
    НовыйЭлемент1 = Справочники.КонтактныеЛицаКонтрагентов.СоздатьЭлемент();
    НовыйЭлемент1.Наименование = face;
    НовыйЭлемент1.КраткоеИмя = k_name;
    НовыйЭлемент1.Должность = dolgn;
    НовыйЭлемент1.Телефон = tel;
    НовыйЭлемент1.ЭлектроннаяПочта = mail;
    //Для Каждого ЭлементМассива Из МассивКлиенты Цикл
    //Если Не ПустаяСтрока(ЭлементМассива) Тогда
    //НовыйЭлемент1.Владелец = ЭлементМассива;
    //Попытка
    //НовыйЭлемент1.Владелец.Записать();
    //Исключение
    //Предупреждение("Не удалось записать объект """ + НовыйЭлемент1.Владелец + """
    // |" + ОписаниеОшибки());
    //КонецПопытки;
    //КонецЕсли;
    //КонецЦикла;
    НовыйЭлемент.Владелец = Справочники.Контрагенты.НайтиПоНаименованию(Table1.Fields("k_name").Value);
    Попытка
    НовыйЭлемент1.Записать();
    Исключение
    Предупреждение("Не удалось записать объект """ + НовыйЭлемент1.Наименование + """
    |" + ОписаниеОшибки());КонецПопытки;
    Table1.MoveNext();
    КонецЦикла;

    +1 к посту shurikvz
  5. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    З.Ы. И еще, если конфигурация типовая, для каждого элемента справочника "КонтактногоЛицаКонтрагента" надо также создавать элемент справочника "КонтактноеЛицо".
  6. TopicStarter Overlay
    sjy19
    Offline

    sjy19

    Регистрация:
    7 май 2013
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Tiger86,

    сделала как Вы написали, только раз поиск по наименованию, то указала в качестве Наименования в справочнике КонтактныеЛица значение k_name. Вот щас проверяю, по ходу дела заработало! Спасибо! Всем спасибо! Нереально помогли начинающему, просто когда только начинаешь очень непросто осознать логику и синтаксис языка. :)



    Ветеран,
    Конфигурация не типовая, нужна связка сайта с 1с. Этой связкой сейчас и занимаюсь.
    Контактное лицо , верно. Добавила. Вернее оно у меня было только в качестве стандартного реквизита.
    Спасибо!

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