Пример загрузки данных с помощью COMObject в 1С 8.2

15.08.12

Интеграция - Перенос данных 1C

Данный алгоритм помогает универсализировать процесс загрузки данных в БД 1С.
В отличие от 1С 7.7 возможно использование таких полезных объектов и свойств: «ДеревоЗначений», «ЗаполнитьЗначенияСвойств()», а также вынести повторяющиеся части процедур в Общий модуль, что упрощает читаемость кода  и исключает дублирующиеся записи. Кроме того, если понадобится внести какие-либо изменения, то это необходимо будет сделать всего в одном месте.

Задача: Компания ООО «Альфа» занимается реализацией  различной бытовой техники. Логистический учет производится в ПО на «С Sharp» собственной разработки. Необходимо вытягивать информацию о продажах в 1С8.2.

Решение:

Для подключения к базам использовать COMObject.

Создаем обработку «ЗагрузкиИзЛогистическойСистемы».

Реквизиты формы: «СписокБаз» - если несколько систем учета (Например, для разных видов товара)[Справочник «БДПредприятия»], «ВыборПериода»[СтандартныйПериод], "ЗагруженныеДанные" [ДеревоЗначений].

 


 **********************************************************************

**************  Модуль Формы Обработки:  *********************************

 

Создаем команду «ЗагрузитьПродажуИзЛогистическойСистемы», создаем к ней обработчикДействия:

&НаКлиенте
Процедура ЗагрузитьПродажуИзЛогистическойСистемы (Команда)
    НачДата=ВыборПериода.ДатаНачала;
    КонДата=ВыборПериода.ДатаОкончания;
    // Процедура, которая с сервера запускает Модуль Менеджера Обработки
    ЗагрузкиИзЛогистическойСистемыСервер(НачДата,КонДата,Режим, СписокБаз);
КонецПроцедуры

&НаСервере
Процедура ВызовПроцМенеджераОбработкиССервераЗагрузить(НачДата,КонДата,Режим,ТекущееИмяБазы)
    ЗагруженныеДанные =0;
    Обработки.ЗагрузкиИзЛогистическойСистемы. ЗагрузитьПродажуИзЛогистическойСистемы(НачДата,КонДата, ЗагруженныеДанные, СписокБаз);
КонецПроцедуры

**********************************************************************

**********************************************************************


**********************************************************************

****** Общий модуль «ДляОбработокЗагрузкиСервер»  *************************

Галочки: Сервер, Вызов Сервера

// Данная функция возвращает дату для получения данных из БД в нужном формате
Функция ДатаДлязапроса(Дата) ЭКСПОРТ
    Возврат ""+фДата(УПВЗ(Год(Дата)))+"-"+фДата(Месяц(Дата))+"-"+фДата(День(Дата));
КонецФункции // ДатаДлязапроса()

Функция фДата(Д)    ЭКСПОРТ        
    Если СтрДлина(Д) < 2 Тогда
        Д = Строка("0"+Д)  
    КонецЕсли;
    Возврат Д;
КонецФункции

//Данная функция открывает доступ к Объекту COMObject, выполняет запрос
Функция ПолучитьИсточник(Source,Источник,db) ЭКСПОРТ
    db = Новый COMObject ("ADODB.Connection");
    db.ConnectionString = источник;
    db.Mode = 1;
    db.CommandTimeout = 0;
    попытка
        db.Open();
        Сообщить("db.Open() прошло");
    Исключение
        Сообщить("db.Open()не прошло:"+ОписаниеОшибки())
    КонецПопытки;
    Сообщить(Source );
    Возврат db.Execute(Source);
КонецФункции // ПолучитьИсточник()

//Функция  удаляет пробелы внутри значения
//Пробелы возникают из-за того, что восьмерка определяет некое значение как числовое
Функция УПВЗ(Д)      ЭКСПОРТ   
    //Ищем пробел в каждой позиции
    А="";
    Для сч=1 по StrLen(Д) Цикл
        А=А+trimall(Right(left(Д,Сч),1));        
    КонецЦикла;
    Возврат А;
КонецФункции

//Функция ПолучитьСсылкуНоменклатуры возвращает
Функция ПолучитьСсылкуНоменклатуры(КодЗЧ,НаименЗЧ,ПартНомер) ЭКСПОРТ
    НоменклатураСсылка=Справочники.Номенклатура.НайтиПоКоду(Trimall(КодЗЧ));
    Если  НоменклатураСсылка.Пустая() Тогда
        Номенклатура=Справочники.Номенклатура.СоздатьЭлемент(); 
        Номенклатура.Код=Trimall(КодЗЧ);
        Номенклатура.Наименование=Trimall(НаименЗЧ);
        Номенклатура.ПартНомер=trimall(ПартНомер);
        Номенклатура.Записать();
        НоменклатураСсылка=Номенклатура.Ссылка;
    КонецЕсли;           
    Возврат НоменклатураСсылка;
КонецФункции // ПолучитьСсылкуНоменклатуры()

Процедура ЗаполнениеДокументовИзДереваЗначений(ВидДокумента,НазваниеТабличнойЧасти,ДеревоЗначений)  ЭКСПОРТ
    Для каждого Строка Из ДеревоЗначений.Строки Цикл 
        Док=Документы[ВидДокумента].НайтиПоНомеру(Строка.Номер,Строка.дата);
        Если Док.Пустая() Тогда
            ДокОбъект       = Документы[ВидДокумента].СоздатьДокумент();
            ДокОбъект.Номер = Строка.Номер;
        Иначе
            ДокОбъект       = Док.ПолучитьОбъект(); 
        КонецЕсли;
        // РучныеИзменения – это булевый реквизит шапки документа, если он Истина, тогда система при загрузке данных НЕ заменяет документ.
        // все остальные документы, у которых данный флаг = ЛОЖЬ, полностью обновляются.
        Если НЕ ДокОбъект.РучныеИзменения Тогда
            ЗаполнитьЗначенияСвойств(ДокОбъект,Строка);
            Если ЗначениеЗаполнено(НазваниеТабличнойЧасти) ТОгда
                ТЧ=ДокОбъект[НазваниеТабличнойЧасти];
                ТЧ.Очистить();
                Для каждого Подстрока  Из Строка.Строки  Цикл
                    ТекТЧ=ТЧ.Добавить();   
                    ЗаполнитьЗначенияСвойств(ТекТЧ ,Подстрока) ;
                КонецЦикла;
            КонецЕсли;
            Попытка                
                ДокОбъект.Записать();
            Исключение
                Сообщить("Документ "+ВидДокумента+" "+Строка.Номер+" "+Строка.дата+" "+ОписаниеОшибки());
            КонецПопытки;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

**********************************************************************

**********************************************************************


**********************************************************************

**************** Модуль Менеджера Обработки *****************************


Процедура  ЗагрузитьПродажуИзЛогистическойСистемы (НачДата,КонДата,ДЗ,ТекущееИмяБазы) Экспорт
    Сообщить("Начали: "+Формат(ТекущаяДата(), "ДЛФ=В"));
    Источник="DRIVER=SQL Server;SERVER=ИМЯСЕРВЕРА;UID=ЛОГИН;PWD=ПАРОЛЬ;DATABASE="+ТекущееИмяБазы;

    //Пример запроса
    Source="SELECT *
    |FROM TABLE1 as T1
    |INNER JOIN TABLE2 as T2 on (T2.Реквизит1='0') and  Т2.Реквизит2=T1.Реквизит1
    |LEFT OUTER JOIN TABLE3  as T3 ON T2.Реквизит3=Т3.Реквизит1
    |WHERE   (Т1.OpenDate BETWEEN '"+ДляОбработокЗагрузкиСервер.ДатаДлязапроса(НачДата)+" 00:00:00' and '"+ДляОбработокЗагрузкиСервер.ДатаДлязапроса(КонДата)+" 23:59:59')
    |order by T1.OpenDate";

    db="";
    rs=ДляОбработокЗагрузкиСервер.ПолучитьИсточник(Source,Источник,db);

    // это колонки, которые будут выгружены в Дерево значений на форму
    // кроме того в самом реквизите формы «ЗагруженныеДанные» необходимо создать такие же реквизиты.
    ДЗ=Новый ДеревоЗначений;
    ДЗ.Колонки.Добавить("Номер");
    ДЗ.Колонки.Добавить("Дата");
    ДЗ.Колонки.Добавить("Контрагент");
    ДЗ.Колонки.Добавить("Договор");
    ДЗ.Колонки.Добавить("Подразделение");
    ДЗ.Колонки.Добавить("Сумма");
    //И т.д. по необходимости.
    ТекНомер="";
    Пока rs.eof()=0  Цикл
        //Получаем данные из выборки
        Номер =  rs.Fields("Номер").Value;
        Если ТекНомер<>Номер   Тогда
            Реквизит1  =  rs.Fields("Реквизит1").Value;
            Реквизит2  =  ДляОбработокЗагрузкиСервер.УПВЗ(rs.Fields("Реквизит2").Value);
            Реквизит3  =  ДляОбработокЗагрузкиСервер.УПВЗ(rs.Fields("Реквизит3").Value);
            //Заполняем ДеревоЗначений 1 уровень
            НоваяСтрока=ДЗ.Строки.Добавить();
            НоваяСтрока.Дата  =  Реквизит1;
            НоваяСтрока.Номер =  Реквизит2;                                              
        КонецЕсли;
        //Заполняем ДеревоЗначений 2 уровень
        ПодчиненнаяСтрока  =  НоваяСтрока.Строки.Добавить();
        ПодчиненнаяСтрока.Номенклатура   = ДляОбработокЗагрузкиСервер.ПолучитьСсылкуНоменклатуры(Реквизит3);
        ТекНомер  = Номер;
        //Следующая Запись
        rs.movenext();
    КонецЦикла;
    //Закрываем выборку
    db.Close();
    //тут указываем свои наименования
    ВидДокумента="Продажа";
    НазваниеТабличнойЧасти="Товары";
    ДляОбработокЗагрузкиСервер.ЗаполнениеДокументовИзДереваЗначений(ВидДокумента,НазваниеТабличнойЧасти,ДЗ);
    Сообщить("Все!   "+Формат(ТекущаяДата(), "ДЛФ=В"));
КонецПроцедуры

**********************************************************************

**********************************************************************

 


После загрузки данных на Форме будет сформирован список в виде дерева значений из загруженных документов.

Я надеюсь, что для Вас была интересна и познавательна данная заметка.

См. также

SALE! 10%

Перенос данных 1C Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

55778 50200 руб.

04.08.2015    167524    341    278    

377

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 23652 руб.

12.06.2017    142493    808    297    

423

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.237.x) и БП 3.0 (3.0.166.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    24502    172    51    

131

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.20.x).

35000 31500 руб.

23.07.2020    52377    230    72    

188

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171564    306    257    

383

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    195486    155    244    

284

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    36990    96    66    

92

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    72469    184    150    

124