Пример загрузки данных с помощью 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! 20%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

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

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

45650 36520 руб.

04.08.2015    159693    363    267    

345

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134940    723    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 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 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68422    178    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

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

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

43450 34760 руб.

03.12.2020    34170    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 25200 руб.

23.07.2020    46301    196    64    

158

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

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

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

50722 45650 руб.

31.10.2014    231417    124    327    

296

Перенос данных из Парус 10 в ЗГУ ред.3

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

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9208    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 25200 руб.

15.12.2021    20252    132    38    

90