Курс «Продвинутый промптинг» · Итоговый документ

Разработка и аудит промпта
для генерации кода 1С:Предприятие 8.3

Полный цикл работы над промптом: четыре итерации, три независимых аудита по 39 правилам методички, финальная версия промпта и регламент эксплуатации в реальных LLM.

4
итерации
38/39
правил закрыто
+14
прирост
3
крит. ошибки
исправлено
1710
слов в промпте

1Резюме проекта

Что делалось, что найдено и чем закончилось.

Задача промпта. Сгенерировать внешнюю обработку для «1С:Бухгалтерия предприятия 3.0», которая выгружает один из трёх справочников («Контрагенты», «Номенклатура», «Физические лица») в файл XLSX на локальный диск.

Задача проекта. Довести промпт до соответствия всем 39 правилам методички и, что важнее, до состояния, в котором он порождает компилируемый код.

Три критические ошибки, найденные аудитом

Формальное соответствие правилам не гарантирует работоспособности. Ниже — дефекты, которые прошли бы проверку «по галочкам», но привели бы к нерабочему коду.

🛑 Ошибка №1 — запрос не скомпилируется

Условие НЕ ЭтоГруппа было задано для всех трёх справочников. Но «Физические лица» в типовой БП 3.0 — неиерархический справочник, реквизита ЭтоГруппа у него нет. Результат: ошибка «Поле не найдено».

→ Исправлено: условие поставлено в зависимость от Метаданные.Справочники[…].Иерархический.

🛑 Ошибка №2 — код неработоспособен в веб-клиенте

Few-Shot пример показывал Новый ДиалогВыбораФайла + Диалог.Показать(), хотя промпт требовал следовать БСП и учитывать веб-клиент. Без предварительной установки расширения работы с файлами такой код в браузере не отработает.

→ Исправлено: показ только через ФайловаяСистемаКлиент.ПоказатьДиалогВыбора, которая сама инициирует установку расширения.

🛑 Ошибка №3 — две версии промпта в одном тексте

Итерация 2 физически содержала полный текст итерации 1, а следом — новую версию. Инструкции противоречили друг другу: старая требовала «Шаг 3. Реализация кода», новая — остановиться после Шага 2 и ждать подтверждения. Ключевой механизм интерактивной фиксации был бы заблокирован.

→ Исправлено: дубль удалён, уникальные требования перенесены в актуальную версию.

⚠️ Две ловушки, добавленные превентивно

Удвоение кавычек. Подстановка "" КАК ИНН внутри строкового литерала 1С требует записи из пяти кавычек подряд: """"" КАК ИНН". Без явного предупреждения модель ошибается почти гарантированно.

Директивы при декомпозиции. Из &НаСервереБезКонтекста нельзя вызывать &НаСервере-процедуры. Требование «вынеси логику в отдельные процедуры» без этой оговорки провоцирует невалидный код.

Результат

ИтерацияВыполненоЧастичноНе выполненоN/AКлючевое событие
Итерация 1241041Исходный промпт студента
Итерация 231701Закрыт метакогнитивный блок, найден дубль версий
Итерация 338001Полная переработка, устранены 3 крит. ошибки
Итерация 4 (v4)38001Микро-тюнинг: исполнимость, не покрытие
ℹ️ Почему 38, а не 39

Правило 34 «Анализ истории» остаётся N/A осознанно. Закрыть его можно, только переведя промпт в формат шаблона с опорой на прошлые сессии — а это прямо противоречит правилу 36 «Автономность». Это размен, а не упущение.

2Финальный промпт v4

Готов к использованию. Копируется целиком, одним блоком, в чистый чат.

269
строк
1710
слов
14 040
символов
~4–5.6k
токенов
18%
доля Few-Shot
📋 prompt_final_v4_clean.txt полный текст · 21 функциональный блок
[РОЛЬ]
Ты — ведущий эксперт по разработке на платформе 1С:Предприятие 8.3, архитектор
прикладных решений и преподаватель со стажем. Отвечаешь как практик, который
пишет код в продакшн и проходит аудит по стандартам разработки 1С.

[КОНТЕКСТ ПРОЕКТА]
- Платформа: 1С:Предприятие 8.3.22 и выше.
- Конфигурация: «1С:Бухгалтерия предприятия, редакция 3.0» (демобаза).
- Режим: управляемое приложение, интерфейс «Такси».
- Библиотека: БСП 3.1.10 (состав общих модулей — по этой версии).
- Целевые клиенты: тонкий клиент (основной) и веб-клиент (обязателен к учёту).
- Артефакт: внешняя обработка .epf, запуск через «Файл → Открыть».
  Регистрация в справочнике «ДополнительныеОтчётыИОбработки» НЕ требуется.
- Подсистема размещения: «Сервис» (только для отображения команды, если применимо).

[УРОВЕНЬ ЗАДАЧИ]
- Бизнес-уровень: бухгалтеру нужна разовая ручная выгрузка справочника в Excel
  для сверки с контрагентом. Не регламентная операция, не обмен данными.
- Технический уровень: универсальная форма с выбором объекта выгрузки,
  один запрос к базе, формирование ТабличногоДокумента, сохранение в XLSX.

[ЦЕЛЬ]
Спроектировать логику и написать код внешней обработки, которая позволяет
пользователю выбрать один из трёх справочников («Контрагенты», «Номенклатура»,
«Физические лица») и выгрузить его данные в файл XLSX на локальный диск.

[СРЕДСТВА — РАЗРЕШЁННЫЙ ИНСТРУМЕНТАРИЙ]
- Запрос к базе (один), ТабличныйДокумент, Поток.
- Общие модули БСП: ФайловаяСистемаКлиент, ОбщегоНазначенияКлиент,
  ОбщегоНазначения.
- Асинхронная модель: Асинх/Ждать либо ОписаниеОповещения.
- Динамическое формирование текста запроса через Метаданные.

[ОГРАНИЧЕНИЯ — ЗАПРЕТЫ]
- ЗАПРЕЩЕНО использовать синхронные модальные вызовы: Предупреждение(), Вопрос(),
  ВвестиЗначение(), ОткрытьФормуМодально().
- ЗАПРЕЩЕНО выполнять запросы и вызовы сервера внутри циклов.
- ЗАПРЕЩЕНО использовать COM-объект Excel (Новый COMОбъект("Excel.Application")).
- ЗАПРЕЩЕНО использовать hardcode-пути к файлам и каталогам.
- ЗАПРЕЩЕНО вызывать платформенный метод Диалог.Показать() и его синхронный
  аналог Диалог.Выбрать(). Создавать объект «Новый ДиалогВыбораФайла» РАЗРЕШЕНО
  и НЕОБХОДИМО — но исключительно как параметр, передаваемый в
  ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(Оповещение, Диалог).
  Показ диалога любым иным способом — нарушение.
- ЗАПРЕЩЕНО выводить пользователю строковые литералы напрямую: любой текст,
  видимый пользователю (сообщения, заголовки, фильтры, состояния, представления
  колонок), обязан быть обёрнут в НСтр("ru = '…'"). Хардкод-строка в интерфейсе —
  нарушение стандартов локализации.
- ЗАПРЕЩЕНО применять ПРЕДСТАВЛЕНИЕ() и условия вида «ГДЕ ИСТИНА» в запросе.
- ЗАПРЕЩЕНО выдумывать реквизиты, которых нет в метаданных БП 3.0.

[ПАРАМЕТРЫ ГЕНЕРАЦИИ]
- Температура: 0.0 — минимальная креативность, максимально предсказуемый ответ.
- Top-k: минимальный — только эталонные, стандартные конструкции 1С.
- Тон и стиль: строгий академический, профессиональный технический язык.
  Без вводных фраз, без маркетинговых оборотов, без похвалы задаче.

[ПРИОРИТЕТ МЕТРИК]
1. Поддерживаемость и читаемость кода.
2. Производительность.
При конфликте метрик выбирай читаемость и укажи это одной строкой.

[СПЕЦИФИКА МЕТАДАННЫХ И СВЕРКА]
- Справочники ссылочного типа, доступ — с учётом прав текущего пользователя.
- Иерархичность НЕ одинакова у трёх объектов:
  • Контрагенты — иерархический (иерархия групп и элементов);
  • Номенклатура — иерархическая;
  • Физические лица — НЕиерархический, реквизита «ЭтоГруппа» у него НЕТ.
  Условие «НЕ ЭтоГруппа» добавляй в запрос ТОЛЬКО тогда, когда
  Метаданные.Справочники[ИмяСправочника].Иерархический = Истина.
  Текст запроса формируй динамически с учётом этого признака.
- ОБЯЗАТЕЛЬНАЯ СВЕРКА: перед написанием запроса сверь каждое поле из матрицы
  ниже с реальным составом метаданных БП 3.0. Если реквизита у объекта нет —
  не подставляй похожий и не выдумывай: выведи строку
  «Расхождение с метаданными: <объект>.<реквизит> — отсутствует, решение: …».

[МАТРИЦА ПОЛЕЙ]
| Справочник       | Наименование | Код | ИНН                 | Ссылка |
|------------------|--------------|-----|---------------------|--------|
| Контрагенты      | да           | да  | да                  | да     |
| Номенклатура     | да           | да  | нет реквизита       | да     |
| ФизическиеЛица   | да           | да  | да                  | да     |

- Состав колонок XLSX ОДИНАКОВ для всех трёх справочников — ровно 4 колонки.
  Структура результата запроса не должна «плавать» между справочниками.
- Отсутствующий реквизит ИНН (Номенклатура) НЕ пропускается и НЕ заменяется
  NULL: в тексте запроса подставляется пустая строковая константа с тем же
  псевдонимом — "" КАК ИНН. Это гарантирует одинаковый состав и типы колонок.
  ВНИМАНИЕ на синтаксис: в коде 1С кавычки внутри строкового литерала
  удваиваются, поэтому фрагмент записывается как  """"" КАК ИНН"  (см. Пример 2).
- Наличие реквизита определяй программно, а не жёстким перебором имён:
  ОбъектМД.Реквизиты.Найти("ИНН") <> Неопределено.
- Колонка «Ссылка» выгружается строкой: в запросе выбирается сама Ссылка,
  а при заполнении ячейки применяется Строка(Ссылка.УникальныйИдентификатор()).
  Вызов УникальныйИдентификатор() в тексте запроса недопустим.

[ТРЕБОВАНИЯ К ЗАПРОСУ]
- Ровно ОДИН запрос к базе. Операция только на чтение.
- Транзакции и управляемые блокировки НЕ использовать: блокировки нужны при
  записи, для чтения справочника они избыточны.
- Временные таблицы и индексирование НЕ требуются — обоснуй это одной строкой.
- Обязательно: ключевое слово РАЗРЕШЕННЫЕ (учёт RLS).
- Обязательно: явное перечисление полей с псевдонимами. Без «*», без ПРЕДСТАВЛЕНИЕ().
- Обязательно в ГДЕ: НЕ ПометкаУдаления; НЕ ЭтоГруппа — по условию иерархичности.
- Обязательно: УПОРЯДОЧИТЬ ПО Наименование.

[УПРАВЛЕНИЕ ФОРМОЙ]
- Код строго разделён на клиентский и серверный контекст, директивы компиляции
  проставлены явно.
- Серверный вызов — без контекста формы, если это возможно.
- На время формирования файла: блокируй команду выгрузки и выводи индикацию
  через Состояние(НСтр("ru = 'Формирование файла…'")).
- По завершении записи — асинхронное уведомление с путём к файлу
  (ОповеститьПользователя или асинхронный аналог предупреждения).
- Обновление данных формы (Refresh / ОповеститьОбИзменении) — N/A: обработка
  не изменяет данные базы. Отметь это явно одной строкой.
- Обработай два сценария отказа: (а) справочник не выбран; (б) пользователь
  закрыл диалог выбора файла без сохранения. Молча завершаться нельзя.

[БСП — КОНКРЕТНЫЕ МЕХАНИЗМЫ]
- Диалог сохранения файла: ФайловаяСистемаКлиент.ПоказатьДиалогВыбора —
  он сам инициирует подключение расширения работы с файлами в веб-клиенте.
- Сообщения пользователю: ОбщегоНазначенияКлиент.СообщитьПользователю.
- Все интерфейсные тексты — через НСтр("ru = '…'") без исключений.
- Именование процедур, функций и переменных — по стандартам разработки 1С (СТД).
  Экспортные методы снабжай комментарием-описанием.

[ВАРИАНТЫ АРХИТЕКТУРЫ — ToT]
Предложи 2 варианта реализации:
  А. Сервер формирует ТабличныйДокумент и возвращает его на клиент;
     клиент записывает файл методом Записать(Путь, ТипФайлаТабличногоДокумента.XLSX).
  Б. Сервер формирует файл и помещает его во временное хранилище;
     клиент получает его по адресу и сохраняет.
Сравни строго по двум критериям: поддерживаемость и работоспособность
в веб-клиенте. Выбери один вариант. Обоснование — не более 3 предложений.

[МЕТАКОГНИТИВНЫЙ ПОДХОД — CoT, Top-Down]
Работай сверху вниз. До написания кода выведи текстовое описание логики:
  Шаг 0. Пересказ сути задачи одним предложением — фиксация ТЗ.
  Шаг 1. Структура реквизитов и команд формы (ИмяСправочника — тип Строка,
         список выбора из трёх значений).
  Шаг 2. Алгоритм работы: что выполняется на клиенте, что на сервере,
         как данные передаются между слоями.
Если после Шага 0 в ТЗ остаются неоднозначности — задай не более 3 уточняющих
вопросов и дождись ответа.

[ИНТЕРАКТИВНАЯ ФИКСАЦИЯ — КРИТИЧЕСКОЕ ТРЕБОВАНИЕ]
После Шагов 0–2 ОСТАНОВИСЬ. Код в этом сообщении не выводи ни в каком виде —
ни целиком, ни фрагментом, ни «для наглядности», ни в виде псевдокода.
Заверши сообщение вопросом:
«Структура и логика утверждены? Можно переходить к генерации кода?»

Если ты работаешь в обычном интерактивном чате (ChatGPT, Claude, Gemini и любой
диалоговый интерфейс, где пользователь может ответить следующим сообщением) —
остановка ОБЯЗАТЕЛЬНА. Вывод кода до получения явного подтверждения считается
критической ошибкой выполнения задания и обесценивает весь ответ.
Стремление «сэкономить пользователю время» и выдать всё сразу — не оправдание.
Единственное исключение: неинтерактивный запуск (одиночный вызов API, batch,
автоматизированный конвейер), где ответ пользователя технически невозможен.
Только в этом случае выведи строку «Продолжаю без подтверждения» и переходи
к коду. Если сомневаешься, интерактивен ли режим, — считай, что интерактивен,
и остановись.

[ОБЪЁМ]
- Шаги 0–2 (описание логики): до 15 строк.
- Код модуля формы: до 150 строк.
- Сопроводительный текст (без учёта строк кода): до 700 слов.
- Порог рефакторинга: если код превышает 80 строк, декомпозируй его.
  Логику заполнения шапки и строк ТабличногоДокумента вынеси в отдельные
  вспомогательные процедуры/функции ТОГО ЖЕ серверного контекста —
  с директивой &НаСервереБезКонтекста, вызываемые из
  СформироватьТабличныйДокументНаСервере.
  УЧТИ ОГРАНИЧЕНИЕ ПЛАТФОРМЫ: из процедуры &НаСервереБезКонтекста нельзя
  обращаться к контексту формы и вызывать процедуры с директивой &НаСервере.
  Допустимы только вызовы других &НаСервереБезКонтекста-методов этой формы
  и методов серверных общих модулей. Декомпозиция не должна нарушать это правило.

[СБОРКА ПО ЧАСТЯМ]
Код выдавай четырьмя отдельными блоками в этом порядке:
  1) Реквизиты и команды формы (списком, с типами).
  2) Формирование шапки ТабличногоДокумента.
  3) // --- СЕРВЕР --- : запрос и заполнение ТабличногоДокумента.
  4) // --- КЛИЕНТ --- : команда, диалог выбора файла, обработчик завершения.
Каждый блок кода оформляй в ограждении ```bsl.

[ПРИМЕРЫ — FEW-SHOT]
Пример 1. Клиент: подготовка объекта диалога и его показ средствами БСП.
&НаКлиенте
Процедура Выгрузить(Команда)
    Если НЕ ЗначениеЗаполнено(ИмяСправочника) Тогда
        ОбщегоНазначенияКлиент.СообщитьПользователю(
            НСтр("ru = 'Не выбран справочник для выгрузки.'"), , "ИмяСправочника");
        Возврат;
    КонецЕсли;
    // Объект диалога создаётся, но НЕ показывается напрямую:
    // метод Диалог.Показать() запрещён, показ — только через БСП.
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Заголовок  = НСтр("ru = 'Укажите файл для сохранения'");
    Диалог.Фильтр     = НСтр("ru = 'Книга Excel (*.xlsx)|*.xlsx'");
    Диалог.Расширение = "xlsx";
    Оповещение = Новый ОписаниеОповещения("ВыгрузитьЗавершение", ЭтотОбъект);
    ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(Оповещение, Диалог);
КонецПроцедуры

Пример 2. Сервер: динамический текст запроса с учётом иерархии и отсутствия ИНН.
&НаСервереБезКонтекста
Функция ТекстЗапросаВыгрузки(ИмяСправочника)
    ОбъектМД = Метаданные.Справочники[ИмяСправочника];
    // Условие по группам — только для иерархических справочников.
    УсловиеГруппы = ?(ОбъектМД.Иерархический, "
        |   И НЕ Спр.ЭтоГруппа", "");
    // Реквизита ИНН может не быть: подставляем пустую строковую константу,
    // чтобы состав и типы колонок совпадали для всех справочников.
    // Внутри литерала кавычки удвоены: получится  "" КАК ИНН
    ПолеИНН = ?(ОбъектМД.Реквизиты.Найти("ИНН") = Неопределено,
        """"" КАК ИНН",
        "Спр.ИНН КАК ИНН");
    Возврат
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |   Спр.Наименование КАК Наименование,
        |   Спр.Код          КАК Код,
        |   " + ПолеИНН + ",
        |   Спр.Ссылка       КАК Ссылка
        |ИЗ
        |   Справочник." + ИмяСправочника + " КАК Спр
        |ГДЕ
        |   НЕ Спр.ПометкаУдаления" + УсловиеГруппы + "
        |УПОРЯДОЧИТЬ ПО
        |   Наименование";
КонецФункции

Пример 3. Клиент: обработчик завершения диалога с отработкой отказа.
&НаКлиенте
Процедура ВыгрузитьЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
    Если ВыбранныеФайлы = Неопределено ИЛИ ВыбранныеФайлы.Количество() = 0 Тогда
        Возврат; // Пользователь отказался от сохранения — молча выходим корректно.
    КонецЕсли;
    Состояние(НСтр("ru = 'Формирование файла…'"));
    ТабДок = СформироватьТабличныйДокументНаСервере(ИмяСправочника);
    ТабДок.Записать(ВыбранныеФайлы[0], ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры

[САМОПРОВЕРКА — ОБЯЗАТЕЛЬНЫЙ ЧЕК-ЛИСТ]
Сразу после кода пройди чек-лист и выведи результат по каждому пункту
в формате «пункт — ОК / нарушение: <описание>»:
  1. Нет вызовов сервера и запросов внутри циклов.
  2. Все клиентские взаимодействия асинхронные, модальных вызовов нет,
     Диалог.Показать() не используется.
  3. Директивы компиляции проставлены и корректны; из &НаСервереБезКонтекста
     нет обращений к контексту формы и к &НаСервере-процедурам.
  4. Обработаны оба сценария отказа: справочник не выбран; диалог закрыт без выбора.
  5. Условие «НЕ ЭтоГруппа» не применяется к неиерархическому справочнику;
     колонка ИНН присутствует у всех трёх справочников.
  6. Все интерфейсные строки обёрнуты в НСтр() — хардкод-текста нет.
Если найдено нарушение — приведи исправленный фрагмент кода, а не только описание.

[ПОВЕДЕНИЕ ПРИ НЕВОЗМОЖНОСТИ ВЫПОЛНИТЬ ТРЕБОВАНИЕ]
Если какой-либо пункт невыполним или противоречит другому — не пропускай его
молча и не подменяй близким по смыслу. Вынеси в раздел «Не выполнено и почему»
с указанием причины и предложи альтернативу.

[ФИКСАЦИЯ РЕЗУЛЬТАТА]
Заверши ответ двумя элементами:
  1. Блок «Готово: <краткий статус в одну строку>».
  2. Следующий шаг — в виде готового, автономного, самодостаточного промпта
     для следующей итерации (например: добавление отбора по периоду создания,
     сохранение настроек выгрузки, выгрузка нескольких справочников за раз).

Приступай с Шага 0.

3Инструкция по применению

Промпт двухфазный: сначала согласование архитектуры, затем генерация кода.

Фаза 1 — согласование

Модель выдаёт и останавливается:

  • Шаг 0 — пересказ ТЗ одной строкой
  • Шаг 1 — реквизиты и команды формы
  • Шаг 2 — алгоритм клиент/сервер
  • ToT — 2 варианта архитектуры + выбор
  • Вопрос об утверждении

Кода в первом ответе быть не должно.

Фаза 2 — генерация

После вашего подтверждения:

  • 4 блока кода по СБОРКА ПО ЧАСТЯМ
  • Чек-лист самопроверки из 6 пунктов
  • Блок «Готово: …»
  • Промпт для следующей итерации

Порядок запуска

  1. Отключите кастомные инструкции уровня аккаунта — они конфликтуют с блоком интерактивной остановки.
  2. Откройте новый чат. Промпт автономен и не рассчитан на подхват прошлого контекста.
  3. Вставьте промпт целиком из файла prompt_final_v4_clean.txt.
  4. Примите фазу 1 по чек-листу из раздела 9.
  5. Отправьте подтверждение — готовые формулировки в разделе 9.
  6. Проверьте код по пяти пунктам приёмки.
✅ Реплика для запуска фазы 2
Да, структура и логика утверждены. Продолжай: выводи код четырьмя блоками
согласно [СБОРКА ПО ЧАСТЯМ], каждый блок в ограждении ```bsl,
затем чек-лист самопроверки из 6 пунктов и блок «Готово».

4Аудит: итерация 1

Исходный промпт студента. Результат — 24/39 полностью выполненных правил.

24
выполнено
10
частично
4
не выполнено
1
N/A
61,5%
покрытие
📌 Общая оценка

Сильный практический промпт с полностью закрытыми базовым и тактическим уровнями. Провал сосредоточен в метакогнитивном блоке (17–20) и в замыкании цикла работы (29): промпт умеет ставить задачу, но не умеет проверять себя и фиксировать результат.

Не выполнено — 4 правила

16. Few-Shot
Пример единственный, серии из 2–3 нет.
18. ToT
Альтернативные архитектуры не запрошены.
19. Саморефлексия
Нет проверки кода на ошибки.
29. Обратная связь
Цикл работы не замкнут.

Полная таблица по 39 правилам

ПравилоРазделСтатусКомментарий
1ДействиеБазовыйВыполненоГлаголы «спроектировать», «написать код», «создать» — команда однозначна.
2ДанныеБазовыйВыполненоНазваны справочники, поля и формат XLSX. Неоднозначно «код/ИНН»: у Номенклатуры ИНН нет.
3КонтекстБазовыйВыполненоПлатформа 8.3.22+, БП 3.0, демобаза, управляемое приложение, «Такси».
4Структура ответаБазовыйВыполненоЗадан порядок: описание логики (3 шага) → код с маркерами Клиент/Сервер.
5ТемператураКреативностьВыполнено«Температура: 0.0» продублирована словесным описанием — корректно.
6Top-kКреативностьВыполнено«Top-k: минимальный» с пояснением про эталонные конструкции 1С.
7Длина ответаКреативностьЧастичноЕсть «избегай длинных вводных», но нет измеримой границы в токенах или строках.
8РольСтратегическийВыполнено«Ведущий эксперт по 1С, архитектор, преподаватель» — роль релевантна.
9Контекстная привязкаСтратегическийЧастичноУровень проекта есть, но подсистемы не названы, бизнес- и техуровень не разделены.
10Цель—Средства—ОграниченияСтратегическийВыполненоЦель, средства и запреты присутствуют, но средства рассыпаны по тексту.
11Формат выводаТактическийВыполненоПояснения + код с фиксированной последовательностью.
12Тон и стильТактическийВыполнено«Строгий академический, профессиональный технический язык».
13Разделители и маркерыТактическийВыполненоМаркеры // --- КЛИЕНТ --- и // --- СЕРВЕР ---.
14Отрицание и запретыТактическийВыполненоСильнейший блок: запрет модальных вызовов, циклов, COM, hardcode-путей.
15One-ShotДемонстрационныйВыполненоШаблон структуры с директивами компиляции приведён.
16Few-ShotДемонстрационныйНе вып.Пример единственный. Обучающей серии из 2–3 примеров нет.
17CoTМетакогнитивныйВыполнено«Прежде чем писать код, выведи текстовое описание логики» + 3 шага.
18ToTМетакогнитивныйНе вып.Альтернативные архитектуры не запрошены — единственное решение.
19СаморефлексияМетакогнитивныйНе вып.Требования проверить код на ошибки нет. Пересказ ТЗ его не заменяет.
20Сужение горлышкаМетакогнитивныйЧастичноОграничения жёсткие, но выданы разом. Итеративного ужесточения нет.
21Учёт версионностиСпецифика 1СВыполненоУказано 8.3.22+ и «БСП актуальной версии» — номер БСП плавающий.
22Указание метрикиСпецифика 1СВыполненоПриоритеты проранжированы: поддерживаемость → производительность.
23Специфика метаданныхСпецифика 1СЧастичноСказано о ссылочности и правах, но не раскрыты иерархия, группы, пометка удаления.
24Работа с запросамиСпецифика 1СЧастичноЕсть «один запрос» и явные поля, но «заблокированный запрос» — некорректный термин для чтения.
25Управление формойСпецифика 1СЧастичноКлиент/Сервер и асинхронность заданы, индикация и блокировка формы — нет.
26Задание рамокСложная задачаВыполненоКонечный продукт и срок названы; состав артефактов размыт.
27Фокус на первом шагеСложная задачаВыполнено«Шаг 1. Описание структуры реквизитов» — стартовая точка выделена.
28Проверка пониманияСложная задачаВыполненоЕсть просьба пересказать суть задачи одним предложением.
29Обратная связь и фиксацияСложная задачаНе вып.Механизма закрепления результата и следующего шага нет — диалог обрывается.
30Сузить фокусКорректировкаВыполнено«Только ТОП-3 справочника», без вводных фраз.
31Уточнить логикуКорректировкаЧастичноПошаговость есть, но нет требования сверить выводы с метаданными.
32Конкретизировать заданиеКорректировкаЧастичноОписана реакция обработки на бездействие пользователя, но не поведение модели.
33Исправить тон/форматКорректировкаЧастичноТон задан на входе, механизма самокоррекции при отклонении нет.
34Анализ историиШаблонN/AПромпт одноразовый, на прошлые диалоги не опирается.
35Синтез идеалаШаблонВыполненоРоль, параметры, домен, CoT и пример объединены в связный документ.
36АвтономностьШаблонВыполненоОтсылок к «этому чату» нет, промпт переносим.
37Top-Down подходИнструментальныйВыполненоСначала структура и алгоритм, затем реализация.
38Сборка «по частям»ИнструментальныйЧастичноРазбиение только по контексту исполнения, не по артефактам обработки.
39Адаптация под фреймворкиИнструментальныйВыполненоБСП указана как ориентир, но без конкретных механизмов.

Топ-5 рекомендаций по итогам итерации 1

  1. Добавить блок саморефлексии. Чек-лист самопроверки после кода: сервер в цикле, директивы компиляции, асинхронность, обработка пустого выбора.
  2. Ввести ToT — 2 варианта архитектуры. ТабличныйДокумент vs ТаблицаЗначений+Поток: выбор влияет на работу в веб-клиенте.
  3. Устранить доменные неточности. Убрать «заблокированный запрос», добавить РАЗРЕШЁННЫЕ, отсечение групп, матрицу полей.
  4. Замкнуть цикл работы и сделать ограничения итеративными.
  5. Оцифровать объём и довести примеры до серии из 2–3.

5Аудит: итерация 2

Доработанный промпт. Результат — 31/39, категория «не выполнено» обнулена.

31
выполнено
7
частично
0
не выполнено
1
N/A
+7
прирост
🛑 Блокирующее замечание: в тексте две версии промпта подряд

Сначала идёт полный текст итерации 1, затем — без разделителя — итерация 2. Это прямое логическое противоречие внутри одного промпта.

Итерация 1 (осталась в тексте)Итерация 2 (новая)Следствие
«Шаг 3. Реализация кода»Шагов два, затем стоп и ожиданиеМодель выдаст код сразу, фиксация не сработает
One-Shot — пустая заглушкаFew-Shot с реальным кодомСлабый образец стоит выше и берётся за основу
«Избегай длинных вводных»Лимиты 15/150/900Дублирование ослабляет строгое требование
Роль, запреты, версионность повторены дважды~40% объёма — шум, размывающий веса
🛑 Фактическая ошибка метаданных

Условие НЕ ЭтоГруппа задано как обязательное для всех трёх справочников. «Контрагенты» и «Номенклатура» иерархические — для них корректно. «Физические лица» в типовой БП 3.0 не иерархический справочник, реквизита ЭтоГруппа у него нет: запрос не скомпилируется.

⚠️ Few-Shot противоречит требованию БСП

Промпт требует следовать БСП, но образец использует Новый ДиалогВыбораФайла + Диалог.Показать(). В веб-клиенте это не сработает без расширения работы с файлами. Каноничный путь — ФайловаяСистемаКлиент.ПоказатьДиалогВыбора.

✅ Что стало заметно лучше

Метакогнитивный блок закрыт полностью (17–20). Механизм ИНТЕРАКТИВНАЯ ФИКСАЦИЯ — сильнейшая находка итерации: он одновременно закрывает правило 20 «сужение горлышка» и усиливает 28 «проверку понимания». Раздел «процесс работы над сложной задачей» (26–29) тоже закрыт.

Полная таблица по 39 правилам

ПравилоРазделСтатусКомментарий
1ДействиеБазовыйВыполненоГлаголы «спроектировать», «написать код», «создать» — команда однозначна.
2ДанныеБазовыйВыполненоНазваны справочники, поля и формат XLSX. Неоднозначно «код/ИНН»: у Номенклатуры ИНН нет.
3КонтекстБазовыйВыполненоПлатформа 8.3.22+, БП 3.0, демобаза, управляемое приложение, «Такси».
4Структура ответаБазовыйВыполненоЗадан порядок: описание логики (3 шага) → код с маркерами Клиент/Сервер.
5ТемператураКреативностьВыполнено«Температура: 0.0» продублирована словесным описанием — корректно.
6Top-kКреативностьВыполнено«Top-k: минимальный» с пояснением про эталонные конструкции 1С.
7Длина ответаКреативностьВыполненоПоявился блок с лимитами 15/150/900 и порогом рефакторинга на 80 строках. (частично → выполнено)
8РольСтратегическийВыполнено«Ведущий эксперт по 1С, архитектор, преподаватель» — роль релевантна.
9Контекстная привязкаСтратегическийЧастичноБез изменений: подсистема не названа, бизнес- и техуровень не разделены.
10Цель—Средства—ОграниченияСтратегическийВыполненоЦель, средства и запреты присутствуют, но средства рассыпаны по тексту.
11Формат выводаТактическийВыполненоПояснения + код с фиксированной последовательностью.
12Тон и стильТактическийВыполнено«Строгий академический, профессиональный технический язык».
13Разделители и маркерыТактическийВыполненоМаркеры // --- КЛИЕНТ --- и // --- СЕРВЕР ---.
14Отрицание и запретыТактическийВыполненоСильнейший блок: запрет модальных вызовов, циклов, COM, hardcode-путей.
15One-ShotДемонстрационныйВыполненоШаблон структуры с директивами компиляции приведён.
16Few-ShotДемонстрационныйЧастичноБлок назван «FEW-SHOT», но серверная функция осталась пустой заглушкой. Примеров меньше 2–3. (не вып. → частично)
17CoTМетакогнитивныйВыполнено«Прежде чем писать код, выведи текстовое описание логики» + 3 шага.
18ToTМетакогнитивныйВыполненоПоявился блок: 2 варианта, сравнение, выбор, обоснование ≤3 предложений. Развилка мелковата. (не вып. → выполнено)
19СаморефлексияМетакогнитивныйВыполненоЧек-лист из 4 пунктов + исправленные фрагменты. Содержание пунктов не задано. (не вып. → выполнено)
20Сужение горлышкаМетакогнитивныйВыполненоРеализовано образцово: остановка с ожиданием подтверждения + порог рефакторинга. (частично → выполнено)
21Учёт версионностиСпецифика 1СВыполненоУказано 8.3.22+ и «БСП актуальной версии» — номер БСП плавающий.
22Указание метрикиСпецифика 1СВыполненоПриоритеты проранжированы: поддерживаемость → производительность.
23Специфика метаданныхСпецифика 1СВыполненоМатрица полей, отсечение групп и пометки удаления. Но НЕ ЭтоГруппа задано для всех трёх справочников. (частично → выполнено)
24Работа с запросамиСпецифика 1СЧастичноДетализировано, но «заблокированный запрос» не исправлен, про индексы и врем. таблицы выпало.
25Управление формойСпецифика 1СЧастичноАсинхронность задана чётко. Индикация, блокировка команды и поведение после записи — нет.
26Задание рамокСложная задачаВыполненоКонечный продукт и срок названы; состав артефактов размыт.
27Фокус на первом шагеСложная задачаВыполнено«Шаг 1. Описание структуры реквизитов» — стартовая точка выделена.
28Проверка пониманияСложная задачаВыполненоЕсть просьба пересказать суть задачи одним предложением.
29Обратная связь и фиксацияСложная задачаВыполненоБлок фиксации: «Готово: …» + следующий шаг готовым промптом. Цикл замкнут. (не вып. → выполнено)
30Сузить фокусКорректировкаВыполнено«Только ТОП-3 справочника», без вводных фраз.
31Уточнить логикуКорректировкаЧастичноМатрица привязывает вывод к данным, но сверки с метаданными нет.
32Конкретизировать заданиеКорректировкаЧастичноБез изменений: поведение модели при невыполнимом пункте не задано.
33Исправить тон/форматКорректировкаВыполненоПоявился рабочий механизм: превышение 80 строк обязывает к рефакторингу. (частично → выполнено)
34Анализ историиШаблонN/AПромпт одноразовый, на прошлые диалоги не опирается.
35Синтез идеалаШаблонВыполненоРоль, параметры, домен, CoT и пример объединены в связный документ.
36АвтономностьШаблонВыполненоОтсылок к «этому чату» нет, промпт переносим.
37Top-Down подходИнструментальныйВыполненоСначала структура и алгоритм, затем реализация.
38Сборка «по частям»ИнструментальныйЧастичноРазбиение усилилось, но артефакты (реквизиты, макет, модуль объекта) не разделены.
39Адаптация под фреймворкиИнструментальныйВыполненоБСП указана как ориентир, но без конкретных механизмов.

Топ-5 рекомендаций по итогам итерации 2

  1. Удалить дублирующий текст итерации 1. Самый критичный дефект: две версии с взаимоисключающими инструкциями.
  2. Исправить ошибку с ЭтоГруппа для «Физических лиц» через проверку Иерархический.
  3. Привести Few-Shot в соответствие с БСП и добавить третий пример — текст запроса.
  4. Убрать «заблокированный запрос» и задать содержание чек-листа самопроверки.
  5. Углубить ToT и добавить обязательную сверку с метаданными.

6Итерация 3: полная переработка

Промпт переписан с нуля. Результат — 38/39, все «частичные» закрыты.

Журнал правок — 17 изменений

Проблема итерации 2Решение
1Две версии промпта подряд с противоречиямиДубль удалён; уникальные требования («задание рамок», пересказ ТЗ) перенесены в явные блоки
2НЕ ЭтоГруппа для всех справочниковИерархичность разобрана поимённо, условие зависит от Метаданные…Иерархический
3Few-Shot противоречит БСППереход на ФайловаяСистемаКлиент.ПоказатьДиалогВыбора, прямой вызов внесён в запреты
4Примеров было полтораТри полноценных: диалог, текст запроса, обработчик завершения
5«Заблокированный запрос» для чтения«Только чтение, без транзакций и управляемых блокировок»
6Неясен формат выгрузки поля «Ссылка»Строка(Ссылка.УникальныйИдентификатор()) в ячейке, не в запросе
7Содержание чек-листа не заданоЗафиксирован, расширен до 5 пунктов + требование исправленных фрагментов
8ToT-развилка — деталь реализацииЗаменена: ТабличныйДокумент на клиент vs временное хранилище
9Бизнес- и техуровень не разделеныБлок [УРОВЕНЬ ЗАДАЧИ], артефакт .epf, способ запуска, подсистема
10Нет сверки полей с метаданнымиОБЯЗАТЕЛЬНАЯ СВЕРКА с форматом «Расхождение с метаданными: …»
11Не задано поведение при невыполнимом пунктеБлок с разделом «Не выполнено и почему»
12Разбиение только Клиент/Сервер[СБОРКА ПО ЧАСТЯМ]: 4 артефакта + ограждение bsl
13Индикация и блокировка формы не оговореныСостояние(), блокировка команды, Refresh = N/A явно
14900 слов конфликтовали со 150 строками кода700 слов сопроводительного текста, код считается отдельно
15«БСП актуальной версии» — плавающее понятиеЗафиксирована БСП 3.1.10
16«ОЖИДАЙ команды» ломал автономность в APIИсключение «Продолжаю без подтверждения»
17Запрет Предупреждение vs ПоказатьПредупреждениеУбрано; сообщения через ОбщегоНазначенияКлиент.СообщитьПользователю

7Итерация 4: микро-тюнинг

Покрытие правил не изменилось — выросла исполнимость промпта.

ℹ️ Зачем нужна была четвёртая итерация

Формальная оценка упёрлась в потолок на итерации 3. Правки v4 устраняют два места, где модель с высокой вероятностью выдала бы нерабочий код, и одну лазейку, через которую она пропустила бы обязательную остановку.

ЗамечаниеЧто сделано
1Микро-противоречие: запрет «Новый ДиалогВыбораФайла» против кода Примера 1 Запрет переформулирован точечно: под запретом методы Диалог.Показать() и Диалог.Выбрать(), создание объекта объявлено разрешённым и необходимым как параметра для БСП
2Лазейка «Продолжаю без подтверждения» Блок переименован в КРИТИЧЕСКОЕ ТРЕБОВАНИЕ. Названы ChatGPT/Claude/Gemini как интерактивные среды. Добавлено правило: «если сомневаешься — считай режим интерактивным и остановись»
3Пустая колонка ИНН для Номенклатуры Задано "" КАК ИНН строковой константой, а не NULL. Наличие реквизита определяется через Реквизиты.Найти("ИНН")
4Порог рефакторинга и недоступность контекста формы Вспомогательные процедуры — в том же контексте &НаСервереБезКонтекста; описано ограничение платформы
5НСтр() зафиксирован только в блоке БСП Перенесён в [ОГРАНИЧЕНИЯ] отдельным запретом, добавлен п.6 чек-листа

Два технических уточнения сверх рекомендаций

⚠️ Синтаксическая ловушка с кавычками

Строковая константа "" КАК ИНН внутри текста запроса, который сам является строковым литералом 1С, требует удвоения кавычек — пять кавычек подряд. Модель почти гарантированно ошибётся без предупреждения.

ПолеИНН = ?(ОбъектМД.Реквизиты.Найти("ИНН") = Неопределено,
    """"" КАК ИНН",          // -> "" КАК ИНН
    "Спр.ИНН КАК ИНН");
⚠️ Точная формулировка про директивы

Из &НаСервереБезКонтекста нельзя вызывать не «экспортные процедуры формы» вообще, а именно процедуры с директивой &НаСервере — им нужен контекст.

Вызовы других &НаСервереБезКонтекста-методов законны, и именно на них должна опираться декомпозиция. Запрети шире — модель откажется дробить код и упрётся в лимит 150 строк.

8Сводная динамика по 39 правилам

Путь каждого правила от исходного промпта до финальной версии.

Итерация 1 24104
Базовый и тактический уровни закрыты на 100%. Провал в метакогнитивном блоке: нет саморефлексии, ToT и замыкания цикла.
Итерация 2 3170 +7
Метакогнитивный блок и «сложная задача» закрыты полностью. Обнаружены дубль версий и ошибка с ЭтоГруппа.
Итерация 3 3800 +7
Полная переработка: 17 правок, устранены три критические ошибки, все «частичные» доведены до выполненных.
Итерация 4 (v4) 38 потолок методички
Микро-тюнинг исполнимости: устранены две ловушки генерации нерабочего кода и лазейка обхода остановки.

Матрица переходов

ПравилоРазделИтер. 1Итер. 2v4
1ДействиеБазовый
2ДанныеБазовый
3КонтекстБазовый
4Структура ответаБазовый
5ТемператураКреативность
6Top-kКреативность
7Длина ответаКреативность~
8РольСтратегический
9Контекстная привязкаСтратегический~~
10Цель—Средства—ОграниченияСтратегический
11Формат выводаТактический
12Тон и стильТактический
13Разделители и маркерыТактический
14Отрицание и запретыТактический
15One-ShotДемонстрационный
16Few-ShotДемонстрационный~
17CoTМетакогнитивный
18ToTМетакогнитивный
19СаморефлексияМетакогнитивный
20Сужение горлышкаМетакогнитивный~
21Учёт версионностиСпецифика 1С
22Указание метрикиСпецифика 1С
23Специфика метаданныхСпецифика 1С~
24Работа с запросамиСпецифика 1С~~
25Управление формойСпецифика 1С~~
26Задание рамокСложная задача
27Фокус на первом шагеСложная задача
28Проверка пониманияСложная задача
29Обратная связь и фиксацияСложная задача
30Сузить фокусКорректировка
31Уточнить логикуКорректировка~~
32Конкретизировать заданиеКорректировка~~
33Исправить тон/форматКорректировка~
34Анализ историиШаблонN/AN/AN/A
35Синтез идеалаШаблон
36АвтономностьШаблон
37Top-Down подходИнструментальный
38Сборка «по частям»Инструментальный~~
39Адаптация под фреймворкиИнструментальный

Итоги по разделам методички

РазделПравилаИтер. 1Итер. 2v4
1. Базовый уровень1–4444
2. Параметры креативности5–7233
3. Стратегический уровень8–10223
4. Тактический уровень11–14444
5. Демонстрационный уровень15–16112
6. Метакогнитивный уровень17–20144
7. Специализированный для 1С21–25235
8. Процесс сложной задачи26–29344
9. Стратегии корректировки30–33124
10. Создание шаблона34–36222 +1 N/A
11. Инструментальный уровень37–39223
ИТОГО39243138

9Регламент эксплуатации

Как запускать промпт, что контролировать в ответе и как реагировать на сбои.

⚠️ Поправка к оценке объёма промпта

Замер показывает 1 710 слов, а не 600–700, как предполагалось. Расхождение в 2,5 раза меняет вывод о рисках контекста.

МетрикаЗначение
Символов14 040
Слов1 710
Строк269
Оценка в токенах (кириллица, 2.5–3.5 симв/токен)≈ 4 000–5 600
Доля блока [ПРИМЕРЫ — FEW-SHOT]2 511 симв. = 18%

Модели 128k+ (GPT-4o/4.1, Claude 3.5+, Gemini 1.5+): промпт занимает 3–4% окна, вытеснение Few-Shot нереалистично. Риск не в объёме, а в позиционном ослаблении инструкций из середины («lost in the middle»).

Модели 8k–32k: промпт съедает 15–60% окна. Здесь рекомендация справедлива — к третьему-четвёртому обмену Few-Shot начнёт вымываться.

9.1. Подготовка среды

СредаГде смотретьДействие
ChatGPTSettings → Personalization → Custom instructionsОтключить на время работы
ClaudeProfile → Custom instructions; Project instructionsОчистить или вести в чистом проекте
GeminiSaved infoОтключить
APIsystem-сообщение обвязкиУбедиться, что не требует полного ответа

Дополнительно: начинать с нового чата и не включать режимы «краткий ответ» — они подавляют CoT и блок вариантов архитектуры.

9.2. Приёмка фазы 1 (Шаги 0–2)

ПроверкаНормаЕсли нарушено
Код в первом ответеотсутствует полностьюНе принимать, вернуть репликой из 9.4
Объём Шагов 0–2до 15 строкНапомнить лимит из блока [ОБЪЁМ]
ToT2 варианта + выбор + ≤3 предложенияЗатребовать сравнение по веб-клиенту явно
Тип ИмяСправочникаСтрока со списком из 3 значенийОтклонить вариант с СправочникСсылка
Завершающий вопросзадан дословноМодель не собирается останавливаться

9.3. Приёмка кода — пять точек контроля

1. Кавычки в константе ИННчастая ошибка
Корректно: пять кавычек подряд → в тексте запроса получается "" КАК ИНН. Типовые ошибки: "" КАК ИНН без удвоения (обрыв литерала), NULL КАК ИНН (ломает тип колонки), исключение колонки целиком (состав колонок «плавает»).
2. Веб-клиент и расширение работы с файламичастая ошибка
Только ФайловаяСистемаКлиент.ПоказатьДиалогВыбора. Признаки неверного кода: Диалог.Показать(), Диалог.Выбрать(), самодельная конструкция с ПодключитьРасширениеРаботыСФайлами() в синхронном стиле. Обёртка БСП инициирует установку сама.
3. Директивы при декомпозициинизкий риск
Если код превысил 80 строк — у вспомогательных процедур должна быть директива &НаСервереБезКонтекста. Вызов &НаСервере оттуда не компилируется.
4. Иерархиязакрыто в промпте
НЕ Спр.ЭтоГруппа — только под условием ОбъектМД.Иерархический. Безусловное добавление → падение на «Физических лицах».
5. Локализациязакрыто в промпте
Все интерфейсные строки в НСтр("ru = '…'"), включая заголовок диалога, фильтр и Состояние().

9.4. Готовые реплики

Стандартное подтверждение (модели 128k+)

Да, структура и логика утверждены. Продолжай: выводи код четырьмя блоками
согласно [СБОРКА ПО ЧАСТЯМ], каждый блок в ограждении ```bsl,
затем чек-лист самопроверки из 6 пунктов и блок «Готово».

Подтверждение с подпоркой контекста (окно ≤32k или длинный диалог)

Напоминаю ключевые требования: условие «НЕ ЭтоГруппа» — только при
Метаданные.Справочники[ИмяСправочника].Иерархический = Истина;
для Номенклатуры поле ИНН подставляется как пустая строковая константа
с удвоенными кавычками; показ диалога — только через
ФайловаяСистемаКлиент.ПоказатьДиалогВыбора; все интерфейсные тексты — в НСтр().

Если модель выдала код сразу, проигнорировав остановку

Нарушен блок [ИНТЕРАКТИВНАЯ ФИКСАЦИЯ]. Ты в интерактивном чате, остановка была
обязательной. Отбрось выданный код. Выведи заново только Шаги 0–2 (до 15 строк)
и заверши сообщение вопросом об утверждении.

Если пропущен чек-лист самопроверки

Не выполнен блок [САМОПРОВЕРКА]. Пройди все 6 пунктов в формате
«пункт — ОК / нарушение: <описание>» и приведи исправленные фрагменты кода.

9.5. Про Markdown-экранирование

Риск реален, но проявляется не при чтении промпта, а при выводе ответа. Пять кавычек подряд внутри ограждения bsl передаются корректно; проблема возникает, когда модель выводит код без ограждения — тогда рендерер может схлопнуть кавычки визуально.

Профилактика заложена в промпт: блок [СБОРКА ПО ЧАСТЯМ] требует ограждать каждый блок. Если модель проигнорировала — требуйте переоформить, а не переписывать код:

Оберни каждый блок кода в ограждение ```bsl. В функции ТекстЗапросаВыгрузки
покажи строковый литерал с удвоенными кавычками без изменений.

9.6. Сводка рисков

РискВероятностьГде перехватывается
Игнорирование остановкисредняя9.2, реплика в 9.4
Ошибка с кавычками в ИННсредняя9.3, п.1
Безусловное НЕ ЭтоГруппанизкая9.3, п.4 — закрыто в промпте
Нарушение директив при декомпозициинизкая9.3, п.3
Вытеснение Few-Shotвысокая на ≤32kПоправка к объёму, реплика с подпоркой
Схлопывание кавычек рендереромнизкая9.5

Итоговый документ проекта · 4 итерации промпта · 3 аудита по 39 правилам · регламент эксплуатации
Финальная оценка: 38 из 39 правил закрыто, правило 34 — осознанное N/A