gifts2017

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

Опубликовал Sergey A (serg_info) в раздел Обмен - Обмен с другими системами

Перенос из 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 часов :-), это конечно не очень порядочные франчи. Не очень хочется кормить таких людей. Так, что я на этот счет пока в раздумьях.  

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Access2_1c82
.zip 86,37Kb
08.09.14
323
.zip 86,37Kb 323 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Дмитрий Бухалов (Re:аниматор) 16.04.10 12:34
на сайте есть обработки с интеграцией Access ... на 8.1, но от 8.2 отличий нет. смысл ремейка?
2. dushelov (Душелов) 16.04.10 12:51
(1) Может весь смысл в управляемом приложении?
3. Sergey A (serg_info) 16.04.10 14:49
(1) Вы правы, такое на 8.1 есть и реализовано более законченно наверное.
Я выложу пример (конфигурацию) и MDB.

В плане интерфеса там ничего особо не делалось, как минимум там нужно сделать выбор имен объектов и реквизитов из метаданных.
Если кому-то интересно - доделайте до универсальности обработки и вынесите описание конвертаций во внешний файл....

Это все для одного проекта и для себя.

И как правильно заметил (2) на 8.2 в управляемом режиме, так что на код посмотреть кому-то будет очень интересно. Т.к. считать данные из файловой системы мы можем только на клиенте, а записать в базу только на сервере.

ТОЛСТЫЙ КЛИЕНТ - под 8.2. не интересен и оставлен как я понимаю для совместимости.
4. Дмитрий Бухалов (Re:аниматор) 16.04.10 14:54
(2) не вижу сложности в управляемом приложении
5. Дмитрий Бухалов (Re:аниматор) 16.04.10 14:56
(3) ясно, просто уже перешел полностью на 8.2, как то уже не задумываюсь о 8.1
6. Sergey A (serg_info) 16.04.10 15:22
(5) Везет Вам !

А у меня еще мозг кипит. Все мне кажется что перемудрили с объектной моделью.
Слишком много объектов для доступа к одной сущности данных. Ну в связи с клиент сервером - 2-ва объекта бы сделали один на чтение другой на запись, а то аж по 5 наворотили. Такое ощущение что разработчикам объектной модели платили по кол-ву объектов / методов / свойств.

А ты тут сиди разбирайся.

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

7. Marat KhuziaKhmetov (mpkfa) 21.04.10 09:24
(4) может ты просто еще не видел :) его в полном объеме, марафет да работает а вот дальше :))) все интереснее и интереснее ;)
8. Sergey A (serg_info) 21.04.10 11:57
О народ стал качать, буду ждать коментов.

Вообще по хорошему надо дописать выбор наименований таблиц и полей из структуры БД Accessa один фиг все уже и так считано, просто создать списки и прицепить их на форму выбора в справочник.
Аналогично поступить с объетами 1С получить из метаданных и привязать к полям выбора в справочник описаний правила переноса.

Вынести правила переноса во внешний файл и вообще всю обработку.
Я наверное мог бы доделать, но сейчас траблы со временем.

Кто-нибудь возьмется доделать до ума?
Может потом и со мной поделитесь.
9. oldje (oldje) 04.05.10 00:53
10. Sergey A (serg_info) 04.05.10 13:34
(9) Хотел причесать обработку, но времени не хватило. Выложу старый "непричесанный" вариант, но он тоже рабочий.
11. oldje (oldje) 05.05.10 19:44
Спасибо, здесь когда-то публиковалась обработка формирования ХМЛ правил переноса из произвольного источника по АДО для любой конфигурации, интересно было бы что-нибудь аналогичное
12. Борис Войцеховский (Boruh) 16.06.11 10:55
Помогите,
Не могу импортировать данные из Access ,пишет :
поизошла исключительная ситуация (Microsoft JET Database Engine)Ошибочный пароль.
13. Sergey Sekletcov (Sekletcov) 28.09.11 09:40
Там в обработке в строке подключения есть Login= и Pasw= там надо прописывать, а если нет, тогда самому внести эти строки...
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа