COM соединение в 1С 8.3 на примере

Перенос данных из одной информационной базы в другую можно осуществить при помощи конвертации данных, либо типовой обработки по загрузке/выгрузке.

Иногда стандартного функционала не достаточно, например, когда нужно применить сложные алгоритмы обработки данных. В таких случаях целесообразнее использовать в 1С 8.3 COM-соединение. Этот механизм позволяет подсоединиться к другой базе и получать из нее все необходимые данные. Такой способ отличается повышенным быстродействием и надежностью.

схема работы с ком-соединением

Реализация COM-соединения

В нашем примере мы сделаем простую обработку 1С, которая будет выводить все номера и суммы документов реализации за указанный период. Примеров применения существует много, но в рамках данной статьи важно понять основные принципы работы с COM-соединениями. Данный пример доступен для скачивания по ссылке.

Обратите внимание, что способ подключения к файловым и клиент-серверным базам отличается. Мы будем применять «V83.COMConnector», так как работа идет с базами на платформе 8.3. Следовательно, для более низких версий будут использоваться COMConnector V81 и V82 соответственно.

&НаСервере

Функция ПодключитьБД()

                        // Данный формат используется, если надо подключиться – файл. ИБ
                        ПараметрыПодключенияИБ = "File=""D:\BUH30""; Usr=""administrator"";Pwd=""123456""";

                        // Данный формат используется для подключения к клиент-сервер. ИБ
                        // ПараметрыПодключенияИБ = "Srvr=""НаименованиеСервера"";Ref=""ИмяИБ"";Usr=""ЛогинПользователя"";Pwd=""ПарольПользователя"";
                        V83COMCon= Новый COMОбъект("V83.COMConnector");

                        Попытка
                                               Возврат V83COMCon.Connect(ПараметрыПодключенияИБ);
                        Исключение
                                               Сообщить(ОписаниеОшибки());
                                               Возврат Неопределено;
                        КонецПопытки;

КонецФункции

Следующим нашим шагом будет добавление на форму табличной части, в которую будут выводиться данные. Так нужно указать поля для ввода периода, по которому будут отбираться документы. Сама процедура заполнения будет выполняться при нажатии соответствующей кнопки со следующим кодом:

&НаСервере

Процедура ПолучитьОплаченныеСчетаНаСервере()

СоединениеБУХ = ПодключитьБД();

Если ТипЗнч(СоединениеБУХ) <> Тип("Неопределено") Тогда
ЗапросБП30 = СоединениеБУХ.NewObject("Запрос");

ЗапросБП30.Текст = "ВЫБРАТЬ
|                     РеализацияТУ.Номер КАК Номер,
|                     РеализацияТУ.СуммаДокумента КАК СуммаДокумента
|ИЗ
|                     Документ.РеализацияТоваровУслуг КАК РеализацияТУ
|ГДЕ
|                    РеализацияТУ.Проведен = ИСТИНА
|                    И РеализацияТУ.Дата МЕЖДУ &ДатаН И &ДатаО";

ЗапросБП30.УстановитьПараметр("ДатаН", Объект.ДатаН);
ЗапросБП30.УстановитьПараметр("ДатаО", Объект.ДатаО);
Объект.СписокДокументов = ЗапросБП30.Выполнить().Выгрузить();

КонецЕсли;

КонецПроцедуры

После выполнения наша обработка будет выглядеть так, как показано на рисунке ниже.

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!

внешний вид обработки

Поделиться

Оцените статью

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Загрузка...

Подпишитесь на наш YouTube канал

YouTube

Подписаться

Комментировать

Комментарии

  1. Александр

    Ну подключились, а отключаться не надо что-ли? Каждое подключение к базе отъедает одну лицензию как-никак.

    2
    1
  2. Алексей

    Неработает обработка….
    Платформа: 1С:Предприятие 8.3 (8.3.22.1704)

    Ошибка при установке значения атрибута контекста (СписокДокументов)
    {ВнешняяОбработка.ПримерCOMсоединения.Форма.Форма.Форма(35)}:Объект.СписокДокументов = Запрос.Выполнить().Выгрузить();
    {ВнешняяОбработка.ПримерCOMсоединения.Форма.Форма.Форма(42)}:ПолучитьОплаченныеСчетаНаСервере();

    по причине:
    Нельзя изменять поле, содержащее объект данных формы