Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 07:40

Выгрузка справочников из MySQL

Автор sjy19, 30 апр 2013, 14:21

0 Пользователей и 1 гость просматривают эту тему.

sjy19

Добрый день, дорогие форумчане!

Подскажите, такой вопрос новичку в 1с.
Делаю выгрузку из MySQL в справочники. Есть 2 справочника Контрагенты и КонтактныеЛица, связанные по k_name. Нужно программно указать Владельца  в Справочнике КонтактныеЛица.
Вот как делаю я после соединения с базой:

Table=conn.execute("select * from kl_svx");
      Пока Table.EOF() = 0 do
         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();

   
         
   Table1=conn.execute("select * from kontkl_svx");
   Пока Table1.EOF() = 0 do
         face = Table1.Fields("face").Value;
         dolgn = Table1.Fields("dolgn").Value;
         tel = Table1.Fields("tel").Value;
         mail = Table1.Fields("mail").Value;
         
   НовыйЭлемент1 = Справочники.КонтактныеЛицаКонтрагентов.СоздатьЭлемент();
   НовыйЭлемент1.Наименование = face;
   НовыйЭлемент1.Должность = dolgn;
   НовыйЭлемент1.Телефон = tel;
   НовыйЭлемент1.ЭлектроннаяПочта = mail;
   
   НовыйЭлемент1.Владелец =НовыйЭлемент.Ссылка; //Здесь одно значение,а нужен массив...как   
                                                                                             //получить массив - не знаю(


      НовыйЭлемент1.Записать();
    Table1.MoveNext();
      КонецЦикла;
         Table1.Close();

            
            
   Если conn.state=1 Тогда
      conn.Close();
   КонецЕсли;

Dethmontt

Создать пустой массив до выполнения первого цикла
Array = New Array()

В первом цикле после записи элемента добавлять в массив ссылку на этот элемент
НовыйЭлемент.Записать();
array.Add(НовыйЭлемент.Ссылка);


Во втором цикле ты сможешь искать в массиве нужного тебе владельца (Как ты это будешь делать я не знаю)
Добавлено: 30 апр 2013, 14:40


В таблице kontkl_svx какая связь с таблицей kl_svx ?
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Dethmontt

И выделяй код тегом, так читать удобнее...
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

sjy19

Dethmontt, Dethmontt,
связка по k_name, я уже писала.
:dfbsdfbsdf:все равно не записывает...Массив создан, заполнен, но записать не удается.
Подскажите, люди добрые!

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.Должность = dolgn;
НовыйЭлемент1.Телефон = tel;
НовыйЭлемент1.ЭлектроннаяПочта = mail;

Для Каждого ЭлементМассива Из МассивКлиенты Цикл
Если Не ПустаяСтрока(ЭлементМассива) Тогда

НовыйЭлемент1.Владелец = ЭлементМассива;
Попытка
        НовыйЭлемент1.Владелец.Записать();
    Исключение
        Предупреждение("Не удалось записать объект """ + НовыйЭлемент1.Владелец + """
                       |" + ОписаниеОшибки());
    КонецПопытки;
КонецЕсли;
КонецЦикла;

  НовыйЭлемент1.Записать();
    Table1.MoveNext();
КонецЦикла;
   Table1.Close();

Dethmontt

Так ты массив всех владельцев перебираешь! И для каждой записи у тебя всегда один владелец (Последний элемент в массиве)
Добавлено: 07 мая 2013, 11:37


Я не просто так спросил про связи таблиц!!!

В твоей выборке я не вижу связи!!!
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Dethmontt

k_name есть в таблице kontkl_svx ?
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

sjy19

В том то и дело, предупреждение выскакивает для каждой записи в справочнике..

Цитата: sjy19 от 07 мая 2013, 11:26Исключение
        Предупреждение("Не удалось записать объект """ + НовыйЭлемент1.Владелец + """
                       |" + ОписаниеОшибки());
с разным НовыйЭлемент1.Владелец
:trhregerhg:

Теги: код 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск