Соединение 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 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

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

15.11.2022    18916    17    SQV0    49    

37

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

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

84000 руб.

19.08.2020    24018    22    1    

24

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

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

60000 руб.

05.10.2022    10245    11    8    

13

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

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

10200 руб.

24.06.2021    20170    55    53    

33

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

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

48000 руб.

16.11.2018    30568    21    31    

22

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

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

48000 руб.

24.04.2017    50110    98    165    

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

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