COM-з’єднання 1С
Сервер 1С
Що істотно при міграції COM-інтеграцій у K2 ERP?
query.Text =
{
Правильна міграція — це не перенесення COM як технології, а перенесення корисної інтеграційної логіки в сучасну ERP-архітектуру: REST API, JSON, фонові задачі, audit log, Power BI, захищені секрети й контрольовані права доступу.; Запит.Текст =
Для чого використовують COM-з’єднання
Ідемпотентність означає, що повторний запуск не створює дублікати.;</syntaxhighlight>
{
!;== Як функціонує COMConnector ==
Найчастіше через неправильну розрядність, відсутність платформи 1С, незареєстрований COM-компонент, відсутність прав або запуск під іншим користувачем.; COM-з’єднання дуже залежить від розрядності:
- інтеграції з Excel;
- вивантаження даних у зовнішню систему;
- завантаження замовлень;
- створення документів із зовнішньої програми;
- автоматизації обмінів;
- міграції даних;
- синхронізації довідників;
- отримання залишків;
- отримання цін;
- формування контрольних сум;
- технічного адміністрування;
- запуску старих інтеграцій;
- зв’язку з .NET, PowerShell, VBScript або іншими Windows-застосунками.; * тимчасовий інструмент вивантаження даних;
- старий механізм інтеграції, який потрібно замінити.; !; Без такої інформації COM-інтеграція стає “чорною скринькою”.; Приклади:
↓
Проста аналогія. COM-з’єднання — це “технічний вхід” у 1С для іншої програми.;</syntaxhighlight>
Кожен запуск створює новий документ.; Варіант у K2 ERPЧи варто робити нові інтеграції через COM?
"sku": "SKU-002",
Довідники, документи, регістри, запити Практичні перевірки: Причини: </syntaxhighlight>
COM-з’єднання має змогу бути проміжним механізмом для формування JSON.;
COM-з’єднання і Excel
- немає external_id;
- external_id не зберігається;
- пошук виконується за номером, який має змогу повторюватися;
- помилка після запису документа;
- повторний запуск імпорту;
- немає журналу інтеграції.;
<div style="border:3px solid #ef6c00; background:#fff3e0; padding:14px; margin:16px 0;"> # C#-сервіс підключається до 1С через COM.; Але після міграції COM-з’єднання зазвичай краще замінити на API або інший сучасний механізм.;
dynamic connection = connector.Connect(connectionString);
Для COM-інтеграцій потрібно вести журнал.; # Чи запускається той самий код інтерактивно.; |-
Що таке V83.COMConnector?; "@
"ВЫБРАТЬ " + як ілюстрація: {
Потрібно знайти всі COM-з’єднання, зрозуміти, які інформаційні дані вони читають або записують, які external_id використовують, які права мають, де зберігаються паролі, і замінити їх на API, фонові задачі, Power BI або інтеграційний шар K2 ERP.; Причина Set Connection = Connector.Connect(ConnectionString) COM-з’єднання і продуктивністьДобре:
COM-з’єднання часто застосовували для інтеграції 1С/BAS з Excel, сайтами, CRM, WMS, MES, банківськими обробками, внутрішніми сервісами, скриптами адміністрування, міграційними утилітами та старими корпоративними системами.; "sku": "SKU-001", Типова схема: Головне. COM-з’єднання 1С — це спосіб керувати 1С із зовнішньої програми.; File="C:\Bases\Accounting";Usr="Администратор";Pwd="password";
Чому COMConnector не створюється?Контрагенты.Наименование КАК Наименование Такий підхід часто кращий, ніж писати всю бізнес-логіку в зовнішній програмі.; Коментар Через COM можна читати інформаційні дані з регістрів за допомогою запитів.;== Висновок == При описі COM-з’єднань 1С і BAS в українському контексті потрібно згадувати санкційні та безпекові ризики.; | Зовнішнє підключення до 1С/BAS через COMConnector.; | Розрядність, реєстрація COM, права, паролі, версії платформи, дублікати документів.; ↓ == Контрольні суми після міграції COM-інтеграцій ==
Спрощений приклад логіки:
При переході з [[1С]] або [[BAS]] у [[K2 ERP]] COM-з’єднання потрібно інвентаризувати окремо.; {
=== Для чого застосовується V83.COMConnector? ===
static void Main()
!; Зовнішній застосунок підключається до бази, отримує об’єкт з’єднання і далі має змогу працювати з довідниками, документами, запитами, регістрами та методами 1С майже так, ніби код виконується всередині 1С.;[[Категорія:Банк]]
[[Категорія:1С]]
Адміністратор має знати:
Marshal.ReleaseComObject(connector);
Якщо ExternalID уже існує — документ оновлюється або пропускається.; Він надає можливість зовнішнім Windows-програмам підключатися до 1С/BAS, читати інформаційні дані, виконувати запити, створювати документи, викликати експортні процедури й автоматизувати обміни.; Після початку російської агресії проти України використання такого програмного забезпечення стало питанням не тільки бухгалтерії, а й кібербезпеки, комплаєнсу, репутації та цифрової незалежності.;== COM-з’єднання і розширення == Критично. COM-з’єднання — це не без ускладнень “технічний доступ”.;Такий варіант часто використовували, коли сама 1С не мала зручного API або коли інтеграцію робила зовнішня команда.; while ($selection.Next()) {
V83.COMConnector застосовується для створення зовнішнього COM-з’єднання з базою 1С 8.x.;== COM-з’єднання і права доступу == Можливі причини: Usr="Администратор";Pwd="password"; як ілюстрація: </syntaxhighlight> } Рядок.Номенклатура = Номенклатура; істотно про 1С та BAS. В Україні продукти екосистеми 1С і частина продуктів BAS пов’язані з санкційними, юридичними, кібербезпековими та репутаційними ризиками.; # Реєстрацію COM.;== Помилка: ActiveX component can't create object ==
ВЫБРАТЬ Логувати потрібно: Документ = Соединение.Документы.ЗаказПокупателя.СоздатьДокумент(); COM-з’єднання погано підходить, якщо: Причини: Для продуктивних інтеграцій краще клієнт-серверний режим або сучасний API.; Loop Наслідки:
Документ.складський облік = складський облік; "warehouse": "MAIN", Погана практика: Реплікатор K2 і COM-з’єднання 1СЗовнішня програма створює COM-об’єкт, передає рядок підключення, отримує з’єднання з інформаційною базою і далі виконує методи платформи.;== Реєстрація COM-компонента == Під час переходу з 1С або BAS у K2 ERP COM-з’єднання має змогу виконувати дві ролі: Але створення документів через COM має ризики: зовнішня програма має змогу обійти частину звичного користувацького сценарію, не заповнити обов’язкові поля або створити дублікати.; операційна дія COM-з’єднання і актуалізація 1С/BAS
Через COM можна викликати експортні процедури й функції загальних модулів, якщо вони доступні в контексті зовнішнього з’єднання.; |
;== Помилка: зовнішня програма створює дублікати ==
У реальному сценарії треба перевірити права, заповнення обов’язкових реквізитів, договори, організацію, валюту, складський облік, ПДВ, тип цін і регістри.; Через COM можна вивантажити:
* створити окремого службового користувача;
* дати мінімальні права;
* обмежити доступ до зарплати, ПДВ, банку, собівартості;
* заборонити зайві обробки;
* логувати дії;
* регулярно змінювати пароль або використовувати безпечний механізм секретів.;== Ідемпотентність COM-інтеграцій ==
* використовувати запити;
* читати інформаційні дані пакетами;
* обмежувати період;
* брати залишки з регістрів;
* не ходити в базу для кожного рядка;
* оптимізувати пошук external_id.; $selection = $result.Select()
!;
COM-з’єднання має змогу читати й змінювати критичні інформаційні дані.; Що означає Запит = Соединение.NewObject("Запрос"); У K2 ERP інтеграції краще будувати як контрольовані API-сценарії з логами, правами, токенами, статусами, повторною обробкою й аудитом.; У більшості сценаріїв краще створювати документи, які самі формують правильні рухи.; Слабка сторона — залежність від Windows, COM-компонентів, розрядності, версій платформи, прав користувачів, паролів у рядках підключення і слабка придатність для сучасної cloud/API-архітектури.; це механізм зовнішнього підключення до інформаційної бази 1С / 1С:організація через COM-об’єкт.; |- |
Що краще для нових інтеграцій?;== COM-з’єднання і блокування ==
"Контрагенты.Ссылка КАК Ссылка, " + Реплікатор K2 має змогу допомогти при переході з COM-інтеграцій 1С або BAS у K2 ERP.; Держспецзв’язку веде перелік забороненого до використання програмного забезпечення та комунікаційного обладнання; у переліку згадуються продукти 1С/BAS, зокрема 1C:організація 8 і BAS ERP.; # Права користувача.;== COM-з’єднання і адміністрування ==
Set Connector = CreateObject("V83.COMConnector")
Що таке COM-з’єднання 1С$query = $connection.NewObject("Запрос") $connectionString = 'Srvr="server1c";Ref="Accounting";Usr="Администратор";Pwd="password";' Зовнішня програма Ризики: COMConnector
{| class="wikitable" style="width:100%;"
{{DISPLAYTITLE:COM-з’єднання 1С}}
'''COM-з’єднання — це міст між старою 1С і зовнішнім світом.''' Але цей міст потрібно контролювати: права, паролі, логи, external_id, продуктивність, дублікати й безпека мають бути описані й перевірені.; Найчастіше для цього застосовують, коли потрібно COM-об’єкт '''V83.COMConnector''' або подібний компонент відповідної версії платформи.; * підключитися до файлової або клієнт-серверної бази;
* виконати запит;
* прочитати довідник;
* створити документ;
* записати документ;
* провести документ;
* отримати залишки;
* прочитати регістри;
* викликати експортну процедуру загального модуля;
* сформувати інформаційні дані для [[Інтеграція через JSON|JSON]];
* сформувати або прочитати [[XML 1С|XML]];
* запустити міграційне вивантаження;
* виконати службову інтеграцію.; |-
| Що найчастіше ламається?; Помилки
У [[Клієнт-серверний режим 1С|клієнт-серверному режимі]] COM-з’єднання підключається до інформаційної бази через [[Сервер 1С|сервер 1С]].;[[Категорія:Взаєморозрахунки]]
Marshal.ReleaseComObject(connection);
У сучасній архітектурі COM краще замінювати на API, web-сервіси, JSON, черги або інтеграційний шар.; COM доцільний переважно для старих Windows-інтеграцій, тимчасових рішень або міграційних задач.; # Середовище запуску.;<syntaxhighlight lang="text">
"Контрагенты.Наименование КАК Наименование " +
<syntaxhighlight lang="text">
dynamic selection = result.Select();
Через COM-з’єднання зовнішня програма має змогу:
|-
| Excel читає залишки з 1С
| Power BI або API
| Краще прибрати ручну залежність від Excel
|-
| C# створює замовлення в 1С
| REST API K2 ERP
| Потрібна ідемпотентність і external_id
|-
| PowerShell вивантажує довідники
| Scheduled export / API job
| Краще з логом і статусами
|-
| COM формує XML для сайту
| JSON/API-конектор
| Сучасніший формат
|-
| COM міграційно читає регістри
| Реплікатор K2 / міграційний шар
| Потрібні контрольні суми
|-
| Стара служба Windows підключається до 1С
| Integration service
| Потрібні секрети, логи, моніторинг
|}
[[Категорія:API]]
== 32-bit і 64-bit проблеми ==
== Карта міграції COM-з’єднання ==
КонецФункции
Write-Output $selection.Наименование
</div>
|-
| COMConnector
| Технічний доступ до 1С
| REST API / integration layer
| Авторизація і права
|-
| Рядок підключення
| Адреса бази, користувач системи, пароль
| API endpoint + token
| Захист секретів
|-
| Запит 1С
| Вибірка даних
| API method / SQL dataset
| Контроль полів
|-
| ExternalID
| Зовнішній ключ
| External reference
| Захист від дублів
|-
| Журнал обміну
| Статус інтеграції
| Integration log
| Повтори і помилки
|-
| Служба Windows
| Автоматичний запуск
| Background job / scheduler
| Моніторинг
|}
"ВЫБРАТЬ
Set Result = Query.Execute()
* кількість довідників;
* кількість документів;
* кількість рядків;
* суми документів;
* залишки товарів;
* залишки по складах;
* ціни;
* взаєморозрахунки;
* зовнішні ID;
* кількість імпортованих об’єктів;
* кількість помилок;
* дублікати;
* статуси обміну;
* час виконання інтеграції.; Його потрібно захищати так само серйозно, як API з правом запису в ERP.; Наслідок
[[Розширення 1С]] можуть впливати на COM-інтеграції.; Указ Президента України №601/2024 ввів у дію рішення для бізнесу РНБО від 2 вересня 2024 року щодо сфера застосування, скасування та внесення змін до санкцій.; Контроль
Приклад журналу:
Типова помилка:
Цей користувач системи має мати рівно ті права, які потрібні для інтеграції.;<syntaxhighlight lang="csharp">
},
[[Категорія:K2 ERP]]
}
Результат = Соединение.ОбщийМодульИнтеграции.ПолучитьОстаткиДляСайта(ДатаОстатков);
[[Категорія:Партії 1С]]
Для нових інтеграцій краще розглядати REST API, JSON, webhooks, черги або інтеграційний шар.; Перед підтримкою, використанням або міграцією таких систем потрібно перевіряти актуальні офіційні обмеження.; як ілюстрація:
* додано новий обов’язковий реквізит;
* змінено форму, але COM її не використовує;
* додано перевірку перед записом;
* змінено логіку проведення;
* додано підписку на подію;
* змінено права.; Аналог у K2 ERP
|-
| Що таке COM-з’єднання 1С?;== Приклад COM-з’єднання з PowerShell ==
У файловому режимі COM-з’єднання має змогу підключатися без сервера 1С:
Один із популярних старих сценаріїв — Excel підключається до 1С через COM і отримує інформаційні дані.; # Передати параметри підключення.; Це потенційний повний програмний доступ до бази.; dynamic query = connection.NewObject("Запрос");
* зовнішня програма масово проводить документи;
* паралельно користувачі працюють із тими самими регістрами;
* регламентне задача виконує обмін;
* закриття місяця перераховує собівартість.;== COM-з’єднання і регістри ==
Set Selection = Result.Select()
Такий підхід зручний для вивантаження залишків, цін, взаєморозрахунків або контрольних сум.; !; # Обробити результат.; COMConnector
[[Категорія:PowerShell]]
* служба Windows запускається під іншим користувачем;
* у службового користувача немає профілю;
* немає доступу до мережевої папки;
* немає доступу до бази;
* не видно COM-компонент;
* інша розрядність;
* немає прав на тимчасові файли;
* пароль або секрет недоступний службі.; Приклади:
Помилка: COM-з’єднання повільно читає інформаційні даніІнформаційна база 1С/BAS $connection = $connector.Connect($connectionString) Див.; додатково
dynamic connector = Activator.CreateInstance(connectorType); ↓ Рядок.Цена = 1200; Сильна сторона COM — прямий доступ до можливостей 1С.;
|
Чим небезпечне?; Для нових інтеграцій краще розглядати REST API, JSON, webhooks або інтеграційний шар.; # Виконує запит до залишків.; {
== Типові помилки COM-з’єднання ==
[[Категорія:Заміна BAS]]
"quantity": 25
Краще шукати за кодом, артикулом або зовнішнім ID, а не тільки за назвою.; Рядок підключення часто містить пароль.;<syntaxhighlight lang="vbscript">
== COM-з’єднання і довідники ==
Якщо потрібно провести документ: |
; # Виконати запит або метод.;
з цієї причини COM-інтеграції потрібно обов’язково тестувати після оновлень.; * не зберігати пароль відкритим текстом;
Приклад логіки: COM-з’єднання і загальні модуліCOM-з’єднання має змогу бути доречним, якщо: Типові питанняРядок.Количество = 2; У старих інтеграціях COM-з’єднання часто було основним способом “достукатися” до 1С ззовні.; Статус
Приклад COM-з’єднання з C#"ИЗ Справочник.Контрагенты КАК Контрагенты"; Для цього потрібно: Номенклатура = Соединение.Справочники.Номенклатура.НайтиПоКоду("SKU-001"); Приклад ідеї: Результат = Запит.Выполнить(); У C# істотно коректно звільняти COM-об’єкти, інакше можуть залишатися завислі процеси або витоки пам’яті.; У такому режимі потрібно контролювати: Параметри можуть відрізнятися залежно від середовища, версії платформи, кластера, користувачів, типу авторизації та налаштувань безпеки.; Якщо така інтеграційні функціональні можливості функціонує в ризиковому або підсанкційному ПЗ, компанії потрібно оцінити юридичні, технічні й кібербезпекові ризики та планувати перехід на безпечну ERP-платформу.; COM-з’єднання має змогу бути повільним, якщо використовувати його неправильно.;1С історично є собою російською програмною екосистемою.; Причини: Після встановлення розширення потрібно перевірити, чи не зламалися COM-інтеграції.; } Ризики: Краще: Це спрощений приклад.; Не користувач системи відкриває форму руками, а зовнішній скрипт підключається до бази й сам виконує потрібні дії.;</syntaxhighlight>
File="C:\Bases\Accounting";Usr="Администратор";Pwd="password"; |
має змогу дати зовнішній програмі доступ до критичних даних і запису документів.; Помилка
Краще:
dynamic result = query.Execute();
}
Перед міграцією потрібно зібрати:
]
# Створити COMConnector.;== Що перевірити перед міграцією COM-інтеграцій ==
<syntaxhighlight lang="text">
|-
| Не створюється COMConnector
| Не встановлена платформа, не та розрядність, не зареєстрований COM
| інтеграційні функціональні можливості не запускається
|-
| Немає доступу до бази
| Неправильний рядок підключення або права
| Не вдається підключитися
|-
| Помилка авторизації
| Невірний користувач системи або пароль
| З’єднання не створюється
|-
| Дублюються документи
| Немає external_id
| Повторні замовлення або платежі
|-
| Повільна робота
| Запити в циклі, пооб’єктне читання
| інтеграційні функціональні можливості триває годинами
|-
| Завислі процеси
| COM-об’єкти не звільнені
| Пам’ять і процеси не очищуються
|-
| Помилки прав
| Службовий користувач системи має замало або забагато прав
| операційна дія не виконується або є собою ризик витоку
|}
[[Категорія:СКД 1С]]
}
* COMConnector не зареєстрований;
* платформа 1С не встановлена;
* застосовується неправильна розрядність;
* скрипт запускається під іншим користувачем;
* служба не бачить COM-компонент;
* встановлено кілька версій платформи;
* немає прав на запуск COM.; # Після запису фіксує статус.;<div style="border:3px solid #b71c1c; background:#ffebee; padding:14px; margin:16px 0;">
Через COM можна створити блокування так само, як через звичайний код 1С.; Зовнішня програма
Set Query = Connection.NewObject("Запрос")
$query.Text = @"
WScript.Echo Selection Наименование
[[Категорія:COMConnector 1С]]
Погані практики:
string connectionString = "Srvr=\"server1c\";Ref=\"Accounting\";Usr=\"Администратор\";Pwd=\"password\";";
[[Категорія:Типи цін 1С]]
[[Категорія:COM-з’єднання 1С]]
'''COM-з’єднання 1С''' — це потужний, але ризиковий механізм інтеграції.;[[Категорія:Power BI]]
</div>
Функция ПолучитьОстаткиДляСайта(ДатаОстатков) Экспорт
$result = $query.Execute()
Типова дія виконується через встановлення або реєстрацію платформи 1С.; Об’єктів
<div style="border:3px solid #b71c1c; background:#ffebee; padding:14px; margin:16px 0;">
== COM-з’єднання і JSON ==
* використовувати external_id;
* зберігати external_id у 1С;
* перевіряти існування документа перед створенням;
* вести журнал обміну;
* використовувати статуси;
* мати унікальні ключі;
* контролювати повтори після помилок.; Конкретні команди залежать від версії платформи, каталогу встановлення і розрядності.; Приклад пошуку номенклатури:
↓
using System.Runtime.InteropServices;
* REST API;
* JSON;
* webhooks;
* черги повідомлень;
* інтеграційні сервіси;
* ETL;
* Power BI;
* сервісні облікові записи;
* audit log;
* централізоване сховище секретів;
* моніторинг інтеграцій.; '''істотно.''' COM-з’єднання 1С/BAS має змогу давати зовнішній програмі доступ до критичних бізнес-даних: фінансів, складу, банку, зарплати, ПДВ, виробництва, контрагентів, персональних даних, цін, собівартості й документів.; |}
|
|---|
- Проведення документа
- C Sharp
- Регістри 1С
- Конфігуратор 1С
- Зовнішні обробки
- Міграція з BAS
- Міграція з 1С
- JSON
- BAS ERP
- Клієнт-серверний режим 1С
- Права доступу
- Реплікатор K2
- Автоматизація бізнесу
- Обмін даними 1С
- ERP
- Цифрова незалежність України
- Регламентні завдання
- BAS
- Інтеграція 1С
- XML 1С
- Excel
- Запити 1С
- Мова 1С
- Адміністрування 1С
- Сервер 1С
- Міграція даних
- Рухи документа
- Аудит дій
- Номенклатура
- BI
- ПДВ