Соединение 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-системе.

28500 руб.

15.11.2022    21527    21    49    

39

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

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

84000 руб.

24.04.2017    51805    104    165    

91

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

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

120000 руб.

19.08.2020    25638    25    1    

27

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

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

84000 руб.

05.10.2022    11257    13    8    

15

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

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

13200 руб.

19.12.2016    47728    87    105    

68

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

Расширение позволяет автоматизировать управление картами лояльности и взаимодействие с покупателями при помощи интеграции корпоративной системы 1С и специализированного облачного сервиса "CARDPR". Автоматическая онлайн синхронизация сведений о владельце электронной карты лояльности и баланса бонусных баллов на карте между корпоративной системой 1С и мобильным устройством покупателя. Оповещение покупателя об изменении баланса его электронной карты лояльности и проведении каких-либо маркетинговых акций в компании при помощи рассылки push-сообщений на его мобильное устройство.

36000 руб.

20.07.2023    3377    1    2    

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

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