Универсальный перенос из Access через ADO в 1С 8.2 управляемое приложение


Перенос из Access в 1С 8.2. Делалось под конкретную задачу, но сделал так, чтобы было универсально. Мало ли когда еще пригодится. К тому же ADO позволяет обращаться не только к данным MDB но и к другим поставщикам данных имеющим драйвера поддерживающие данную технологию :-)

Идея проста как мир и используется во всех конвертациях данных.

Правила переноса описаны в справочнике. В нем устанавливаем соответствия между таблицами и полями таблиц. Реализован не просто тупой перенос, а перенос связных данных, а именно можно переносить в:

  • Справочники
  • Документы
  • Регистры сведений

При переносе устанавливаются соответствия по:

  • кодам справочников
  • наименованиям
  • произвольным (но индексированным в 1С) полям справочников
  • значениям перечислений
  • по владельцу

Все это сделано в управляемом приложении с передачей импортируемой информации между клиентом и сервером по порциям, т.к. переносилась информация примерно объемом 300-400 тысяч записей.

Если интерес есть, то я напишу эту статью дальше с описанием как-же это было сделано, а пока пару картинок.

И наверное то, что вызывает наибольшие трудности у начинающих. Это кусочек кода для подключения базы данных как COM объекта к 1С.

	 &НаКлиенте
Функция СчитатьТаблицуMDB(ИмяТаблицы)
 
 // Open connection
    strCnxn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+СокрЛП(Объект.ФайлДанных);
    Cnxn = Новый COMОбъект("ADODB.Connection");
    Cnxn.Open(strCnxn);    
    rst = Новый COMОбъект("ADODB.Recordset");  
    rst.Open(ИмяТаблицы, Cnxn,1);    
 
    //считываем структуру полей таблицы
    ИменаПолей=Новый СписокЗначений; 
    Для Каждого тПоле Из rst.Fields() Цикл
       ИменаПолей.Добавить(тПоле.Name);  
    КонецЦикла; 
 
    rst.MoveLast();
    МаксЗапись=rst.RecordCount; 
    rst.MoveFirst();   
 
    Объект.ИмяТаблицы=ИмяТаблицы;
    ЭтаФорма.ОбновитьОтображениеДанных(); 
	 ...

Ну и далее по тексту уже идет загрузка значений из внешнего объекта/таблицы в список значений и передача его на сервер. На сервере этот список обрабатывается согласно правилам из справочника и пишется в объекты БД.

Я выложил код с примером - чего уж жмотиться !!!

Если кто-то доделает до ума - то плиз, не продавайте, а отдайте так же - бесплатно.

Если не забудете, то копию мне пришлите :-) того что получиться.

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

Пока это черновик статьи - не судите строго.

Если будет интерес то я:

1) Допишу статью

2) Возможно выложу каркасную конфигурацию с примером переноса, по сути это готовое решение которое может использоваться в рабочих условиях.  Я, к примеру, видел как за аналогичную работу франчи брали чуть ли ни по 50-100 часов :-), это конечно не очень порядочные франчи. Не очень хочется кормить таких людей. Так, что я на этот счет пока в раздумьях.  

Файлы обработки:

-