Соединение COM в 1С: примеры и инструкции

31.07.20

Интеграция - Внешние источники данных

Ни для кого не секрет, что преимуществом 1С является динамичность системы для работы с основными технологиями. Одно из подтверждений динамичности системы - это простота подключения к данным другой базы. В этой статье я опишу свой опыт работы с данными системы Галактика ERP. Возникла задача организовать удобный интерфейс для пользователей при работе с определенными выборками по заданным параметрам.

Известно преимущество платформы 1С по разработке удобных интерфейсов для пользователей: быстрота разработки, качество, красота и удобство для пользователей.

Было принято решение разработать небольшую конфигурацию на платформе 1С 8.3. 

Для связи с данными системы Галактика ERP использовался COMОбъект.

Для реализации соединения COM в 1С используется специальный механизм под названием COMConnector. Этот объект устанавливается вместе с платформой и применяется для связи информационных баз.

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

1.            какого она типа – файловая или клиент-серверная;

2.            где располагается;

3.            под каким именем и паролем в нее можно зайти;

4.            какие данные вас интересуют.

По условиям описанной выше задачи формируем соединение COM в 1С:

 

&НаСервере
Процедура СоединениеСБДГалактикиЕЕР()
ГалактикаСоединение = Новый СОМОбъект("ADODB.Connection");
Provider = "SQLOLEDB"; //Драйвер SQL
DataSource = "SQL02\GALAKTIKA"; //Имя или IP-адрес SQL-сервера
Initialcatalog = "bszgal"; //Имя базы данных
UID = "sa"; //Логин пользователя SQL-сервера
PWD = "lqaz@WSX"; //Пароль пользователя SQL-сервера
ConnectString = "Provider=" + Provider + ";Data Source=" + DataSource + ";Initial Catalog=" + Initialcatalog + ";UID=" + UID + ";PWD=" + PWD; ГалактикаСоединение.Connectionstring = ConnectString;
ГалактикаСоединение.ConnectionTimeOut = 6;
ГалактикаСоединение.CommandTimeout = 600;
Попытка
ГалактикаСоединение.Open() ;
Сообщить("Мы соединились с БД Галактики ERP") ;
Исключение
ГалактикаСоединение = Неопределено;
Сообщить ("Не удалось соединиться с БД Галактики ERP");
КонецПопытки;
КонецПроцедуры

 

Все – мы имеем доступ к данным.

Дальше все просто. Формируем SQL запрос к данным:

 

&НаСервере
Процедура ХПГалактикиНаСервере()
СоединениеСБДГалактикиЕЕР();
ОбъектХП = Новый COMObject ("ADODB.Command"); Попытка
ТекстЗапроса = 
"SELECT
|KatSopr.F$NSopr НомДок
|,dbo.uf_ToMSDate(KatSopr.F$DSopr) ДДок
|, CASE WHEN Dogovor.F$NoDoc IS NULL THEN Dogovor.F$NoDoc_Ext ELSE Dogovor.F$NoDoc END НомерДоговора
|, dbo.uf_ToMSDate(Dogovor. F$DDoc) ДДоговор
|, Dogovor.F$Summa ДоговорСумма
|, Dogovor.F$SUMNDS ДоговорНДС
|, KatOrg.F$Code КодКонтрагент
|, KatOrg.F$Name ИмяКонтрагент	
|, KatUsl.F$Kod КодУслуга
|, KatUsl.F$Name ИмяУслуга
|, KatEd.F$Abbr ЕдИзм
|, SpSopr.FSKolFact КоличествоДок, SpSopr.F$Price ЦенаДок, SpSopr.F$SumNDS СуммаНДСДок
|, CASE WHEN KatSopr.F$VhodNal=l THEN SpSopr.F$KolFact*SpSopr.F$Price-SpSopr.F$SumNDS ELSE SpSopr.F$
|, SpSoprPodr.AttrValvString Подразделение
|, OborotSoprDoc.SumOb	СуммаОборот
|, AttrValOS.KatOSInNum КодОР, AttrValOS.KatOSNameOS ИмяОР
| AttrValBuhSchet.BuhSchet БухСчет, AttrValBuhSchet.BuhSchetName БухСчетИмя
|, AttrValStZatr.StZatrKod КодЗатрата, AttrValStZatr.StZatrName ИмяЗатрата
| FROM TSKatSopr KatSopr
| LEFT JOIN T$Dogovor Dogovor ON KatSopr.FSCDogovor = Dogovor.F$NRec
| LEFT JOIN T$KatOrg KatOrg ON KatSopr.FScOrg = KatOrg.FSNRec
| INNER JOIN TSSpSopr SpSopr ON SpSopr.FScSopr = KatSopr.F$NRec
| LEFT JOIN T$KatUsl KatUsl ON SpSopr.FScMCUsl = KatUsl.F$NRec»;
| LEFT JOIN (SELECT AttrVal.FScRec AttrValcRec, AttrVal.FSvString AttrValvString
|	FROM TSAttrVal AttrVal
|	INNER JOIN TSAttrNam AttrNam ON AttrVal.FScAttrNam=AttrNam.FSNRec AND |AttrNam.FSName=‘Подразделение’
|	WHERE AttrVal.FSwTable=1110) SpSoprPodr ON SpSoprPodr.AttrValcRec=SpSopr.FSNRec
| INNER JOIN (SELECT Oborot.FScSoprDoc cSoprDoc, SUM(Oborot.FSSumOb) SumOb
|	FROM T$Oborot Oborot
|	WHERE Oborot.FSSchetK = ‘560’
|	AND Oborot.F$SubSchK = ‘01’
|	AND dbo.uf_ToMSDate(Oborot.FSDatOb) BETWEEN ‘"+ДатаС+"’ AND ‘"+ДатаПо+"'
|	AND dbo.Tolnt64 (Oborot.FScPlansSch)=281474976710657
|	GROUP BY Oborot.FScSoprDoc
|	HAVING ROUND(SUM(Oborot.FSSumOb), 2)00) Oborot SoprDoc ON KatSopr. FSNRec=OborotSoprDoc. cSoprDoc
|LEFT JOIN (SELECT AttrVal.FScRec AttrValcRec, KatOS.FSlnNum KatOSInNum, KatOS.F$NameOS KatOSNameOS
|	FROM TSAttrNam AttrNam
|	LEFT JOIN TSAttrVal AttrVal ON AttrVal.FSCAttrNam = AttrNam.FSNRec
|	LEFT JOIN TSKatOS KatOS ON AttrVal.FSvComp = KatOS.FSNRec
|	WHERE AttrNam.FSName = тОбъект ремонта’
|	AND AttrNam.F$wTable = 1110) AttrValOS ON SpSopr.F$NRec = AttrValOS.AttrValcRec
| LEFT JOIN (SELECT AttrVal.FScRec AttrValcRec
|	, CASE WHEN BuhSchet.FSSubSch = TT THEN SUBSTRING(BuhSchet.FSSchet, 2, LEN (BuhSchet.FSSchet) - 1) ELSE |SUBSTRINGS
|	, BuhSchet.FSName BuhSchetName
|FROM TSAttrNam AttrNam
|	LEFT OUTER JOIN TSAttrVal AttrVal ON AttrVal.FSCAttrNam = AttrNam.FSNRec
|	LEFT OUTER JOIN TSBuhSchet BuhSchet ON AttrVal.FSvComp = BuhSchet.FSNRec
| WHERE AttrNam.F$Name = ‘Ан_Счет отнесения затрат’
| AND AttrNam.FSwTable = 1110) AttrValBuhSchet ON SpSopr.FSNRec = AttrValBuhSchet.AttrValcRec
| INNER JOIN (SELECT AttrVal.FScRec AttrValcRec, StZatr.F$Kod StZatrKod, StZatr.F$Name StZatrName
| FROM TSAttrNam AttrNam
| LEFT JOIN TSAttrVal AttrVal ON AttrVal.FScAttrNam = AttrNam.FSNRec
| LEFT JOIN TSStZatr StZatr ON AttrVal.FSvComp = StZatr.FSNRec
| WHERE AttrNam.FSName = 'Ан_Статьи расходов/доходов’
| AND AttrNam.FSwTable = 1110

 

Причем, как вы видите в тексте запроса, мы используем богатый арсенал по организации выборок, предоставленный нам инструментом SQL Server в Management Studio.

А дальше еще проще: загружаем полученные данные в таблицу значений и выводим ее на форму:

 

НаборДанных = Новый СОМОбъект("ADODB.Recordset");
НаборДанных.ActiveConnection = ГалактикаСоединение;
НаборДанных.Open(ТекстЗапроса, ГалактикаСоединение);
Таблица = Новый ТаблицаЗначений;
Для НомерСтолбца = 0 По НаборДанных.Fields.Count-1 Цикл 
ИмяСтолбца =НаборДанных.Fields.Item(НомерСтолбца).Name; 
Таблица.Колонки.Добавить(ИмяСтолбца);
КонецЦикла;
Пока НаборДанных.EOF = 0 Цикл
НоваяСтрока = Таблица.Добавить () ;
Для НомерСтолбца = 0 По НаборДанных.Fields.Count-1 Цикл
НоваяСтрока.Установить (НомерСтолбца, НаборДанных.Fields (НомерСтолбца). Value);
КонецЦикла;
НаборДанных.MoveNext();
КонецЦикла;
НаборДанных.Close();

Надо сказать, что пользователь был очень доволен. Он получил необходимые данные, используя преимущество 1С – юзабилити.

Вступайте в нашу телеграмм-группу Инфостарт

#Каксделатьв1С #СоединениеCOMв1Сплатформе

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь 1С v8.3 Управляемые формы Анализ и прогнозирование 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    27239    32    49    

43

Внешние источники данных Программист Бизнес-аналитик 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Розница 3.0 Платные (руб)

Обработка для выгрузки данных из подготовленных СКД в фоновом режиме в базу ClickHouseDB, PostgreSQL, MySQL, в шину данных с поддержкой REST API (CSV, JSON. SQL), в локальные файлы (CSV, JSON, XLS, XLSX) или в Google Sheets. Это дополнительная подключаемая обработка.

18000 руб.

21.08.2024    5122    12    4    

12

Производство готовой продукции (работ, услуг) Внешние источники данных 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник 1С "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

10200 руб.

24.06.2021    23777    60    55    

43

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

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП, ФРЕШ).

13200 руб.

19.12.2016    50923    107    106    

76

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

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

60000 руб.

16.11.2018    31872    23    31    

23

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

Хотите, чтобы остатки и цены товаров в вашей базе всегда были актуальными без лишних усилий? Теперь это возможно - автоматизируйте процесс загрузки и обновления данных о номенклатуре от ваших поставщиков или конкурентов. Как это работает? Вы сами настраиваете правила и расписание для каждого поставщика, чтобы обновление информации из произвольных форматов прайс-листов происходило автоматически.

15000 руб.

15.05.2024    2531    3    0    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. qazaz2 17 01.08.20 10:54 Сейчас в теме
Тема сисек динамичности не раскрыта)
2. cleaner_it 198 02.08.20 10:42 Сейчас в теме
(1) Зато раскрыта тема неструктурированного кода))
i.s.o; kamisov; +2 Ответить
4. qazaz2 17 02.08.20 17:30 Сейчас в теме
(2) Но автору все равно + за готовность делиться
3. kamisov 224 02.08.20 11:37 Сейчас в теме
Вы вначале написали про COMConnector, но вместо этого используете драйвер OLEDB провайдера SQLOLEDB через компоненту ADO - то есть “прямые запросы”. КомКоннектор и прямые запросы - принципиально разные вещи. КомКоннектор может вас спасти от многих вещей, которые вы не предусмотрели в прямых запросах: уровень изоляции транзакции, блокировки внутри 1С, проверка возможности подключения к базе (вдруг там реструктуризация?) и прочие.

По поводу запроса: рекомендую использовать параметры (bind-переменные) вместо включения их в текст запроса. Дело в том, что SQL сервер (да и Oracle, и PostgreSQL) хранит готовый план запроса для конкретного текста запроса. Если вы меняете текст хотя бы немного, например другую дату, сервер не находит у себя готовый план запроса и вычисляет его заново.
maldinitaly; JohnyDeath; yufan; Roootru; cleaner_it; +5 Ответить
Для отправки сообщения требуется регистрация/авторизация