Передісторія: "А давай попросимо AI написати обробку?"
Все почалося з простої ідеї. 2024 рік, AI скрізь, Claude пише код на Python за секунди, ChatGPT генерує React-компоненти. Логічне питання: а чи може AI написати обробку для 1С?
Спойлер: може. Але не так, як ви думаєте.
Експеримент №1: "Згенеруй мені EPF"
Перша спроба була наївною:
"Створи зовнішню обробку 1С для завантаження даних з Excel"
ChatGPT радісно видав... текстовий опис того, що повинно бути в обробці. Дякую, дуже корисно.
Окей, спробуємо конкретніше:
"Згенеруй XML-файл зовнішньої обробки 1С:Підприємство 8.3 з формою та кнопкою"
Результат — щось схоже на XML, але:
- UUID невалідні (AI їх вигадує)
- Структура неповна
- Sequential ID відсутні
- При спробі завантажити в конфігуратор — помилка
Чому AI не може генерувати 1C XML напряму?
Формат внутрішніх файлів 1С — це не просто XML. Це:
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses"
xmlns:app="http://v8.1c.ru/8.2/managed-application/core"
version="2.16.1">
<ExternalDataProcessor uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890">
<InternalInfo>
<xr:ContainedObject>
<xr:ClassId>d5963243-262e-4398-b4d7-fb16571c1e95</xr:ClassId>
<xr:ObjectId>c8f2e4a1-9b3d-4c5e-8f7a-6b2d1e0c9a8b</xr:ObjectId>
</xr:ContainedObject>
<!-- І ще 50 рядків службової інформації -->
</InternalInfo>
Проблема №1: UUID
Кожен об'єкт має унікальний UUID. AI не може їх генерувати коректно — він або вигадує (і вони конфліктують), або копіює з навчальних даних (і вони конфліктують ще більше).
Проблема №2: Sequential ID
Елементи форми мають числові ID, які повинні йти послідовно і не повторюватися. AI втрачає рахунок після 5-6 елементів.
Проблема №3: Вкладені посилання
Кнопка посилається на команду по ID. Команда посилається на обробник. Обробник — на модуль. Одна помилка в ланцюжку — обробка не завантажується.
Проблема №4: Обсяг
Мінімальна обробка з однією формою і кнопкою — це 300+ рядків XML. AI починає "галюцинувати" вже після 100 рядків.
Експеримент №2: "А якщо дати йому шаблон?"
Наступна ідея — дати AI готовий XML як приклад:
"Ось XML обробки з кнопкою [1000 рядків XML]. Додай ще одну кнопку."
Результат: AI або обрізав XML (ліміт токенів), або "втратив" частину структури при модифікації. Конфігуратор знову лається.
Експеримент №3: "Що якщо спростити формат?"
І тут прийшла ідея: що якщо AI буде генерувати не XML, а щось просте? А конвертацією займеться окремий інструмент?
Який формат ідеальний для AI?
- JSON — добре, але багато дужок, легко помилитися
- YAML — чудово: мінімум синтаксису, читабельний, AI справляється на 95%+
Тест:
"Опиши обробку 1С в форматі YAML: назва, реквізити, форма з полями введення та кнопкою"
Результат:
processor:
name: DataLoader
synonym:
uk: Завантаження даних
attributes:
- name: FilePath
type: string
- name: ProcessedCount
type: number
forms:
- name: Form
elements:
- type: InputField
name: FilePathField
attribute: FilePath
- type: Button
name: LoadButton
command: LoadData
Чисто, зрозуміло, і — головне — AI не помиляється в цьому форматі.
Рішення: YAML + Generator = XML/EPF
Архітектура вийшла такою:
↓
YAML + BSL
UUID генерація
Збірка XML
Компіляція
AI відповідає за:
- Розуміння задачі
- Структуру обробки (YAML)
- Бізнес-логіку (BSL код)
Generator відповідає за:
- Валідні UUID
- Правильні ID елементів
- Коректну структуру XML
- Всі службові поля, які AI не осилить
Практичний приклад
Задача: обробка для отримання курсу валют з API Monobank.
Крок 1: Промпт для AI
Створи обробку для отримання курсу USD з API Monobank
(https://api.monobank.ua/bank/currency).
Форма: кнопка "Отримати курс" і поле для відображення результату.
Крок 2: AI генерує YAML
processor:
name: MonobankRate
synonym:
uk: Курс Monobank
attributes:
- name: ExchangeRate
type: string
forms:
- name: Form
default: true
elements:
- type: Label
name: RateLabel
title:
uk: "Курс USD:"
- type: InputField
name: RateField
attribute: ExchangeRate
readonly: true
- type: Button
name: GetRateBtn
command: GetRate
title:
uk: Отримати курс
commands:
- name: GetRate
handler: GetRate
Крок 3: AI генерує BSL
#Region GetRate
&AtClient
Procedure GetRate(Command)
Result = GetRateAtServer();
Object.ExchangeRate = Result;
EndProcedure
&AtServer
Function GetRateAtServer()
HTTP = New HTTPConnection("api.monobank.ua", , , , , 10);
Request = New HTTPRequest("/bank/currency");
Response = HTTP.Get(Request);
If Response.StatusCode = 200 Then
JSON = New JSONReader;
JSON.SetString(Response.GetBodyAsString());
Data = ReadJSON(JSON);
For Each Rate In Data Do
// USD (840) to UAH (980)
If Rate.currencyCodeA = 840 And Rate.currencyCodeB = 980 Then
Return Format(Rate.rateSell, "NFD=2");
EndIf;
EndDo;
EndIf;
Return "Помилка отримання курсу";
EndFunction
#EndRegion
Крок 4: Генерація
python -m 1c_processor_generator yaml \
--config config.yaml \
--handlers-file handlers.bsl \
--output output/ \
--output-format epf
Крок 5: Готово!
30 секунд — і у вас робоча обробка з формою та інтеграцією з API.
Що вміє генератор
| Можливість | Підтримка |
|---|---|
| Елементи форми | InputField, Button, Table, CheckBox, RadioButton, Pages, Groups, Labels |
| Дані | Реквізити, ТабличніЧастини, ТаблицяЗначень |
| Типи | Рядок, Число, Дата, Булево, СправочникПосилання.*, ДокументПосилання.* |
| BSL | Клієнт-серверні пари, обробники подій |
| Валідація | YAML-схема, синтаксис BSL, перевірка посилань |
| Вивід | XML (імпорт в конфігуратор) або EPF (готовий файл) |
FREE vs PRO
Генератор безкоштовний і open source. Але є нюанс:
| Функція | FREE | PRO |
|---|---|---|
| Генерація XML | ✓ | ✓ |
| Валідація YAML | ✓ | ✓ |
| Компіляція в EPF | — | ✓ |
| Валідація BSL компілятором | — | ✓ |
FREE генерує XML — далі ви самі завантажуєте в конфігуратор і компілюєте.
PRO компілює одразу в EPF і — головне — проганяє код через компілятор 1С. Якщо AI написав СправочникПосилання.Номенклатура замість СправочникПосилання.Товари — ви дізнаєтесь про це одразу, а не коли обробка впаде в проді.
Висновки
- AI не може генерувати 1C XML напряму — занадто складний формат
- YAML — ідеальний проміжний формат — простий для AI, читабельний для людей
- Generator — міст між AI та платформою 1С — бере на себе всю технічну складність
- 30 секунд замість 30 хвилин — реальний приріст швидкості для типових задач
Спробуйте самі
Документація написана так, щоб AI-агенти (Claude Code, Cursor, Cline) могли її читати і використовувати генератор автоматично.