Соединение 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Сплатформе

См. также

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

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

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

84000 руб.

19.08.2020    22664    19    1    

22

Экстрактор данных 1С в BI - выгрузка данных из 1С в BI-аналитику

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

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

15.11.2022    13959    12    SQV0    47    

30

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

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

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

60000 руб.

05.10.2022    9334    9    8    

11

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

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

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

24000 руб.

24.04.2017    48935    97    163    

86

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

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

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

24000 руб.

16.11.2018    30114    20    31    

21

Загрузка в БГУ из УРМ "Криста"

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

Обработки для загрузки данных из УРМ "Криста" в бухгалтерию государственного учреждения редакция 2.0. Есть Демо доступ на вкладке Бесплатные файлы на 1 месяц со дня получения демонстрационного ключа регистрации. Поддерживает ПО "Web-исполнение" от НПО "Криста".

4800 руб.

19.06.2013    38618    136    90    

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

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