Як змусити ChatGPT/Claude генерувати робочі обробки 1С

(спойлер: напряму — ніяк)

AI + 1C Processor Generator: від промпта до готової обробки за 30 секунд

Передісторія: "А давай попросимо 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 напряму?

Порівняння XML vs YAML: складний 1C XML проти простого YAML

Формат внутрішніх файлів 1С — це не просто XML. Це:

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: назва, реквізити, форма з полями введення та кнопкою"

Результат:

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

Архітектура вийшла такою:

Ви + AI
"Зроби форму з кнопкою"

YAML + BSL
Generator
Валідація
UUID генерація
Збірка XML
Компіляція
Результат
Готовий XML або EPF

AI відповідає за:

  • Розуміння задачі
  • Структуру обробки (YAML)
  • Бізнес-логіку (BSL код)

Generator відповідає за:

  • Валідні UUID
  • Правильні ID елементів
  • Коректну структуру XML
  • Всі службові поля, які AI не осилить

Практичний приклад

Приклад: обробка для отримання курсу валют з API Monobank

Задача: обробка для отримання курсу валют з API Monobank.

Крок 1: Промпт для AI

Створи обробку для отримання курсу USD з API Monobank
(https://api.monobank.ua/bank/currency).
Форма: кнопка "Отримати курс" і поле для відображення результату.

Крок 2: AI генерує YAML

config.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

handlers.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: Генерація

Terminal:
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

FREE vs PRO: порівняння версій 1C Processor Generator

Генератор безкоштовний і open source. Але є нюанс:

Функція FREE PRO
Генерація XML
Валідація YAML
Компіляція в EPF
Валідація BSL компілятором

FREE генерує XML — далі ви самі завантажуєте в конфігуратор і компілюєте.

PRO компілює одразу в EPF і — головне — проганяє код через компілятор 1С. Якщо AI написав СправочникПосилання.Номенклатура замість СправочникПосилання.Товари — ви дізнаєтесь про це одразу, а не коли обробка впаде в проді.

Висновки

  1. AI не може генерувати 1C XML напряму — занадто складний формат
  2. YAML — ідеальний проміжний формат — простий для AI, читабельний для людей
  3. Generator — міст між AI та платформою 1С — бере на себе всю технічну складність
  4. 30 секунд замість 30 хвилин — реальний приріст швидкості для типових задач

Спробуйте самі

Документація написана так, щоб AI-агенти (Claude Code, Cursor, Cline) могли її читати і використовувати генератор автоматично.

GitHub (FREE) PRO + Trial