Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
16 Дек 2017, 14:22
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: экспорт из access в 1c в подчиненный справочник  (Прочитано 6217 раз)

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

Оффлайн Nipaaah

  • *
  • Сообщений: 13
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-15
  • Сайт: 
  • Профессия: Программист 7.7
написал код бьет ошибку. да и вообще где храниться информация подчиненного справочника
 СпрКонтр.Записать();
{C:\БАЗА1С\EXTFORMS\BD_EXPORT.ERT(169)}: Код не уникальный

var id; 
l=0 ;
       Акцесс = СоздатьОбъект("ADODB.CONNECTION");     
      ТабЗнач.НоваяКолонка("примечание");
   ТабЗнач.НоваяКолонка("Колонка");
   Спр=СоздатьОбъект("Справочник.Сотрудники");
Спр.ВыбратьЭлементы();
    Попытка
        СтрокаПодключения="Driver={Microsoft Access Driver (*.mdb)};Dbq=c:\Kontr.mdb;Uid=Admin;Pwd=";
        Акцесс.Open(СтрокаПодключения);
    Исключение
        Сообщить("Все плохо:"+ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    Команда = СоздатьОбъект("ADODB.Command");
    Команда.ActiveConnection=Акцесс;
   
Пока Спр.ПолучитьЭлемент() = 1 Цикл
id=Спр.ТабельныйНомер;
    ТекстСелект = ("SELECT * FROM Контракты   ");
    НаборЗаписей = СоздатьОбъект("ADODB.RecordSet");
    Команда.CommandText=ТекстСелект;
    Попытка
        НаборЗаписей=Команда.Execute;
    Исключение
        Сообщить("Неудача:"+ОписаниеОшибки());
    КонецПопытки;
    Попытка
        НаборЗаписей.MoveFirst();
    Исключение //нет записей в рекордсете
         НаборЗаписей.Close();
        Возврат;
КонецПопытки;
     q1= НаборЗаписей.Fields("k_tbn").Value;
   Пока НаборЗаписей.EOF()=0 Цикл 
  if q1=id then
       ИНН = НаборЗаписей.Fields("k_d_okonch").Value; 
    ИНН1 = НаборЗаписей.Fields("k_d_nach").Value;
ИНН2 = НаборЗаписей.Fields("k_srok").Value;
  ИНН3 = НаборЗаписей.Fields("k_prim").Value;
          СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); 
   СпрСотр.ВыбратьЭлементы();
        Пока  СпрСотр.ПолучитьЭлемент() = 1 Цикл
       СпрКонтр = СоздатьОбъект("Справочник.Контракты");
       СпрКонтр.Новый();
         СпрКонтр.Начало_К = ИНН1;
   СпрКонтр.Конец_К = ИНН;
       СпрКонтр.месяц = ИНН2;
   СпрКонтр.Примечание = ИНН3;
       СпрКонтр.Владелец = СпрСотр.ТекущийЭлемент();
             СпрКонтр.Записать();
             КонецЦикла;
    КонецЕсли;
        НаборЗаписей.MoveNext();
КонецЦикла;
   НаборЗаписей.Close();         
     enddo  ;
КонецПРоцедуры


Оффлайн Клюшкин

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 4
  • КПД: 21%
  • Регистрация: 2011-12-09
  • Сайт: 
Поясните, в чем задача. Если создать по 1 контракту (1, обратите внимание) для каждого сотрудника, который оказался в БД Access, то незачем перебирать справочник сотрудника еще раз. Возможно, я неправильно понял, но мне кажется, что 2-й перебор справочника ошибочен. В описанном коде каждый контракт создается для каждого сотрудника:
Пока Спр.ПолучитьЭлемент() = 1 Цикл
     Пока  СпрСотр.ПолучитьЭлемент() = 1 Цикл




Оффлайн Клюшкин

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 4
  • КПД: 21%
  • Регистрация: 2011-12-09
  • Сайт: 
Предполагаю что нужно создать контракт только для того, кому принадлежит табельный номер. Если подтвердите, продолжим тему ).

Оффлайн Nipaaah

  • *
  • Сообщений: 13
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-15
  • Сайт: 
  • Профессия: Программист 7.7
Предполагаю что нужно создать контракт только для того, кому принадлежит табельный номер. Если подтвердите, продолжим тему ).
да необходимо из access добавить в подчиненный справочник контракты
я поставил в справочнике контракты что он подчинен сотрудником написал код но в связи с плохим понимаем 1с нечего путного не выходит  (мб у кого есть пример экспорт в подчиненный справочник а то 1с после си... тяжко :(

типа у 1 сотрудника может быть несколько контрактов

Оффлайн Клюшкин

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 4
  • КПД: 21%
  • Регистрация: 2011-12-09
  • Сайт: 
написал код бьет ошибку. да и вообще где храниться информация подчиненного справочника
 СпрКонтр.Записать();
{C:\БАЗА1С\EXTFORMS\BD_EXPORT.ERT(169)}: Код не уникальный

var id; 
l=0 ;
       Акцесс = СоздатьОбъект("ADODB.CONNECTION");     
      ТабЗнач.НоваяКолонка("примечание");
   ТабЗнач.НоваяКолонка("Колонка");
   Спр=СоздатьОбъект("Справочник.Сотрудники");
Спр.ВыбратьЭлементы();

//перенесли сюда
СпрКонтр = СоздатьОбъект("Справочник.Контракты");

    Попытка
        СтрокаПодключения="Driver={Microsoft Access Driver (*.mdb)};Dbq=c:\Kontr.mdb;Uid=Admin;Pwd=";
        Акцесс.Open(СтрокаПодключения);
    Исключение
        Сообщить("Все плохо:"+ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    Команда = СоздатьОбъект("ADODB.Command");
    Команда.ActiveConnection=Акцесс;
   
Пока Спр.ПолучитьЭлемент() = 1 Цикл
id=Спр.ТабельныйНомер;
    ТекстСелект = ("SELECT * FROM Контракты   ");
    НаборЗаписей = СоздатьОбъект("ADODB.RecordSet");
    Команда.CommandText=ТекстСелект;
    Попытка
        НаборЗаписей=Команда.Execute;
    Исключение
        Сообщить("Неудача:"+ОписаниеОшибки());
    КонецПопытки;
    Попытка
        НаборЗаписей.MoveFirst();
    Исключение //нет записей в рекордсете
         НаборЗаписей.Close();
        Возврат;
КонецПопытки;
        q1= НаборЗаписей.Fields("k_tbn").Value;
        Пока НаборЗаписей.EOF()=0 Цикл 
     if q1=id then
                ИНН = НаборЗаписей.Fields("k_d_okonch").Value; 
        ИНН1 = НаборЗаписей.Fields("k_d_nach").Value;
ИНН2 = НаборЗаписей.Fields("k_srok").Value;
ИНН3 = НаборЗаписей.Fields("k_prim").Value;
             [color=green]//еще один цикл не нужен          
             //СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); 
     //СпрСотр.ВыбратьЭлементы();
     //Пока  СпрСотр.ПолучитьЭлемент() = 1 Цикл
             //объект контракты создадим перед начало циклов
             //СпрКонтр = СоздатьОбъект("Справочник.Контракты");[/color]
             СпрКонтр.Новый();
     СпрКонтр.Начало_К = ИНН1;
     СпрКонтр.Конец_К = ИНН;
             СпрКонтр.месяц = ИНН2;
     СпрКонтр.Примечание = ИНН3;
            [color=green] //СпрКонтр.Владелец = СпрСотр.ТекущийЭлемент();[/color]
             СпрКонтр.ИспользоватьВладельца(Спр.ТекущийЭлемент());
            [color=green]//возможен и ваш синтаксис, только другой справочник - Спр[/color]

             СпрКонтр.Записать();
            [color=green] //КонецЦикла;[/color]

         КонецЕсли;
         НаборЗаписей.MoveNext();
    КонецЦикла;
    НаборЗаписей.Close();   
enddo  ;
КонецПРоцедуры

Не пробовал это запускать, просто подправил явные ошибки - мы в цикле перебора справочника сотрудники перебираем таблицу из БД Access, соответственно, когда табельные совпадают, нет необходимости в еще одном обращении к справочнику сотрудников - у нас уже есть текущий элемент Спр.ТекущийЭлемент(), который будет владельцем таблицы контрактов этого сотрудника (их может быть от 0 до бесконечности).

Оффлайн Nipaaah

  • *
  • Сообщений: 13
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-15
  • Сайт: 
  • Профессия: Программист 7.7
Цитировать
Не пробовал это запускать, просто подправил явные ошибки - мы в цикле перебора справочника сотрудники перебираем таблицу из БД Access, соответственно, когда табельные совпадают, нет необходимости в еще одном обращении к справочнику сотрудников - у нас уже есть текущий элемент Спр.ТекущийЭлемент(), который будет владельцем таблицы контрактов этого сотрудника (их может быть от 0 до бесконечности).
да вы правы
я поставил вывод message() идет перебор  номеров сотрудников но когда мы находим 1 запись контрактов бьет ошибку
СпрКонтр.Записать();
{C:\БАЗА1С\EXTFORMS\BD_EXPORT.ERT(274)}: Не выбран элемент справочника-хозяина! Элемент не может быть записан!

Оффлайн Клюшкин

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 4
  • КПД: 21%
  • Регистрация: 2011-12-09
  • Сайт: 
я поставил вывод message() идет перебор  номеров сотрудников но когда мы находим 1 запись контрактов бьет ошибку
СпрКонтр.Записать();
{C:\БАЗА1С\EXTFORMS\BD_EXPORT.ERT(274)}: Не выбран элемент справочника-хозяина! Элемент не может быть записан!

Не понял - это при перезапуске старого кода с выводом сообщений или ошибка появляется в измененном коде (без цикла) уже?

Оффлайн Nipaaah

  • *
  • Сообщений: 13
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-15
  • Сайт: 
  • Профессия: Программист 7.7
я поставил вывод message() идет перебор  номеров сотрудников но когда мы находим 1 запись контрактов бьет ошибку
СпрКонтр.Записать();
{C:\БАЗА1С\EXTFORMS\BD_EXPORT.ERT(274)}: Не выбран элемент справочника-хозяина! Элемент не может быть записан!

Не понял - это при перезапуске старого кода с выводом сообщений или ошибка появляется в измененном коде (без цикла) уже?
в новом коде

Оффлайн Клюшкин

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 4
  • КПД: 21%
  • Регистрация: 2011-12-09
  • Сайт: 
Переставьте строку, задающую владельца (СпрКонтр.ИспользоватьВладельца(Спр.ТекущийЭлемент());) стобы она находилась перед строкой, создающей новую запись (СпрКонтр.Новый();).

Оффлайн Nipaaah

  • *
  • Сообщений: 13
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-15
  • Сайт: 
  • Профессия: Программист 7.7
Переставьте строку, задающую владельца (СпрКонтр.ИспользоватьВладельца(Спр.ТекущийЭлемент());) стобы она находилась перед строкой, создающей новую запись (СпрКонтр.Новый();).
о наконец подумал я....
 правда обнаружил снова ошибку из access выводит один и тот же номер потом когда конец новый номер справочника и по новой тот же номер access хотя  НаборЗаписей.MoveNext() стоит же((


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
157 Сообщений
ilyay ilyay
66 Сообщений
alex0402
53 Сообщений
AIFrame
47 Сообщений
oleg-x
44 Сообщений
andron81_81
44 Сообщений
BuhRust
33 Сообщений
MuI_I_Ika MuI_I_Ika
32 Сообщений
Golickoff Golickoff
31 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 254
  • Точка Скрытых: 0
  • Точка Пользователей: 5
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal