Полный цикл работы над промптом: четыре итерации, три независимых аудита по 39 правилам методички, финальная версия промпта и регламент эксплуатации в реальных LLM.
Что делалось, что найдено и чем закончилось.
Задача промпта. Сгенерировать внешнюю обработку для «1С:Бухгалтерия предприятия 3.0», которая выгружает один из трёх справочников («Контрагенты», «Номенклатура», «Физические лица») в файл XLSX на локальный диск.
Задача проекта. Довести промпт до соответствия всем 39 правилам методички и, что важнее, до состояния, в котором он порождает компилируемый код.
Формальное соответствие правилам не гарантирует работоспособности. Ниже — дефекты, которые прошли бы проверку «по галочкам», но привели бы к нерабочему коду.
Условие НЕ ЭтоГруппа было задано для всех трёх справочников.
Но «Физические лица» в типовой БП 3.0 — неиерархический справочник, реквизита
ЭтоГруппа у него нет. Результат: ошибка «Поле не найдено».
→ Исправлено: условие поставлено в зависимость от
Метаданные.Справочники[…].Иерархический.
Few-Shot пример показывал Новый ДиалогВыбораФайла + Диалог.Показать(),
хотя промпт требовал следовать БСП и учитывать веб-клиент. Без предварительной установки
расширения работы с файлами такой код в браузере не отработает.
→ Исправлено: показ только через
ФайловаяСистемаКлиент.ПоказатьДиалогВыбора, которая сама инициирует установку расширения.
Итерация 2 физически содержала полный текст итерации 1, а следом — новую версию. Инструкции противоречили друг другу: старая требовала «Шаг 3. Реализация кода», новая — остановиться после Шага 2 и ждать подтверждения. Ключевой механизм интерактивной фиксации был бы заблокирован.
→ Исправлено: дубль удалён, уникальные требования перенесены в актуальную версию.
Удвоение кавычек. Подстановка "" КАК ИНН внутри строкового литерала 1С
требует записи из пяти кавычек подряд: """"" КАК ИНН". Без явного предупреждения
модель ошибается почти гарантированно.
Директивы при декомпозиции. Из &НаСервереБезКонтекста нельзя вызывать
&НаСервере-процедуры. Требование «вынеси логику в отдельные процедуры»
без этой оговорки провоцирует невалидный код.
| Итерация | Выполнено | Частично | Не выполнено | N/A | Ключевое событие |
|---|---|---|---|---|---|
| Итерация 1 | 24 | 10 | 4 | 1 | Исходный промпт студента |
| Итерация 2 | 31 | 7 | 0 | 1 | Закрыт метакогнитивный блок, найден дубль версий |
| Итерация 3 | 38 | 0 | 0 | 1 | Полная переработка, устранены 3 крит. ошибки |
| Итерация 4 (v4) | 38 | 0 | 0 | 1 | Микро-тюнинг: исполнимость, не покрытие |
Правило 34 «Анализ истории» остаётся N/A осознанно. Закрыть его можно, только переведя промпт в формат шаблона с опорой на прошлые сессии — а это прямо противоречит правилу 36 «Автономность». Это размен, а не упущение.
Готов к использованию. Копируется целиком, одним блоком, в чистый чат.
[РОЛЬ]
Ты — ведущий эксперт по разработке на платформе 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.
Промпт двухфазный: сначала согласование архитектуры, затем генерация кода.
Модель выдаёт и останавливается:
Кода в первом ответе быть не должно.
После вашего подтверждения:
prompt_final_v4_clean.txt.Да, структура и логика утверждены. Продолжай: выводи код четырьмя блоками
согласно [СБОРКА ПО ЧАСТЯМ], каждый блок в ограждении ```bsl,
затем чек-лист самопроверки из 6 пунктов и блок «Готово».
Исходный промпт студента. Результат — 24/39 полностью выполненных правил.
Сильный практический промпт с полностью закрытыми базовым и тактическим уровнями. Провал сосредоточен в метакогнитивном блоке (17–20) и в замыкании цикла работы (29): промпт умеет ставить задачу, но не умеет проверять себя и фиксировать результат.
| № | Правило | Раздел | Статус | Комментарий |
|---|---|---|---|---|
| 1 | Действие | Базовый | Выполнено | Глаголы «спроектировать», «написать код», «создать» — команда однозначна. |
| 2 | Данные | Базовый | Выполнено | Названы справочники, поля и формат XLSX. Неоднозначно «код/ИНН»: у Номенклатуры ИНН нет. |
| 3 | Контекст | Базовый | Выполнено | Платформа 8.3.22+, БП 3.0, демобаза, управляемое приложение, «Такси». |
| 4 | Структура ответа | Базовый | Выполнено | Задан порядок: описание логики (3 шага) → код с маркерами Клиент/Сервер. |
| 5 | Температура | Креативность | Выполнено | «Температура: 0.0» продублирована словесным описанием — корректно. |
| 6 | Top-k | Креативность | Выполнено | «Top-k: минимальный» с пояснением про эталонные конструкции 1С. |
| 7 | Длина ответа | Креативность | Частично | Есть «избегай длинных вводных», но нет измеримой границы в токенах или строках. |
| 8 | Роль | Стратегический | Выполнено | «Ведущий эксперт по 1С, архитектор, преподаватель» — роль релевантна. |
| 9 | Контекстная привязка | Стратегический | Частично | Уровень проекта есть, но подсистемы не названы, бизнес- и техуровень не разделены. |
| 10 | Цель—Средства—Ограничения | Стратегический | Выполнено | Цель, средства и запреты присутствуют, но средства рассыпаны по тексту. |
| 11 | Формат вывода | Тактический | Выполнено | Пояснения + код с фиксированной последовательностью. |
| 12 | Тон и стиль | Тактический | Выполнено | «Строгий академический, профессиональный технический язык». |
| 13 | Разделители и маркеры | Тактический | Выполнено | Маркеры // --- КЛИЕНТ --- и // --- СЕРВЕР ---. |
| 14 | Отрицание и запреты | Тактический | Выполнено | Сильнейший блок: запрет модальных вызовов, циклов, COM, hardcode-путей. |
| 15 | One-Shot | Демонстрационный | Выполнено | Шаблон структуры с директивами компиляции приведён. |
| 16 | Few-Shot | Демонстрационный | Не вып. | Пример единственный. Обучающей серии из 2–3 примеров нет. |
| 17 | CoT | Метакогнитивный | Выполнено | «Прежде чем писать код, выведи текстовое описание логики» + 3 шага. |
| 18 | ToT | Метакогнитивный | Не вып. | Альтернативные архитектуры не запрошены — единственное решение. |
| 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 | Автономность | Шаблон | Выполнено | Отсылок к «этому чату» нет, промпт переносим. |
| 37 | Top-Down подход | Инструментальный | Выполнено | Сначала структура и алгоритм, затем реализация. |
| 38 | Сборка «по частям» | Инструментальный | Частично | Разбиение только по контексту исполнения, не по артефактам обработки. |
| 39 | Адаптация под фреймворки | Инструментальный | Выполнено | БСП указана как ориентир, но без конкретных механизмов. |
РАЗРЕШЁННЫЕ, отсечение групп, матрицу полей.Доработанный промпт. Результат — 31/39, категория «не выполнено» обнулена.
Сначала идёт полный текст итерации 1, затем — без разделителя — итерация 2. Это прямое логическое противоречие внутри одного промпта.
| Итерация 1 (осталась в тексте) | Итерация 2 (новая) | Следствие |
|---|---|---|
| «Шаг 3. Реализация кода» | Шагов два, затем стоп и ожидание | Модель выдаст код сразу, фиксация не сработает |
| One-Shot — пустая заглушка | Few-Shot с реальным кодом | Слабый образец стоит выше и берётся за основу |
| «Избегай длинных вводных» | Лимиты 15/150/900 | Дублирование ослабляет строгое требование |
| Роль, запреты, версионность повторены дважды | ~40% объёма — шум, размывающий веса | |
Условие НЕ ЭтоГруппа задано как обязательное для всех трёх справочников.
«Контрагенты» и «Номенклатура» иерархические — для них корректно.
«Физические лица» в типовой БП 3.0 не иерархический справочник, реквизита
ЭтоГруппа у него нет: запрос не скомпилируется.
Промпт требует следовать БСП, но образец использует Новый ДиалогВыбораФайла +
Диалог.Показать(). В веб-клиенте это не сработает без расширения работы с файлами.
Каноничный путь — ФайловаяСистемаКлиент.ПоказатьДиалогВыбора.
Метакогнитивный блок закрыт полностью (17–20). Механизм ИНТЕРАКТИВНАЯ ФИКСАЦИЯ — сильнейшая находка итерации: он одновременно закрывает правило 20 «сужение горлышка» и усиливает 28 «проверку понимания». Раздел «процесс работы над сложной задачей» (26–29) тоже закрыт.
| № | Правило | Раздел | Статус | Комментарий |
|---|---|---|---|---|
| 1 | Действие | Базовый | Выполнено | Глаголы «спроектировать», «написать код», «создать» — команда однозначна. |
| 2 | Данные | Базовый | Выполнено | Названы справочники, поля и формат XLSX. Неоднозначно «код/ИНН»: у Номенклатуры ИНН нет. |
| 3 | Контекст | Базовый | Выполнено | Платформа 8.3.22+, БП 3.0, демобаза, управляемое приложение, «Такси». |
| 4 | Структура ответа | Базовый | Выполнено | Задан порядок: описание логики (3 шага) → код с маркерами Клиент/Сервер. |
| 5 | Температура | Креативность | Выполнено | «Температура: 0.0» продублирована словесным описанием — корректно. |
| 6 | Top-k | Креативность | Выполнено | «Top-k: минимальный» с пояснением про эталонные конструкции 1С. |
| 7 | Длина ответа | Креативность | Выполнено | Появился блок с лимитами 15/150/900 и порогом рефакторинга на 80 строках. (частично → выполнено) |
| 8 | Роль | Стратегический | Выполнено | «Ведущий эксперт по 1С, архитектор, преподаватель» — роль релевантна. |
| 9 | Контекстная привязка | Стратегический | Частично | Без изменений: подсистема не названа, бизнес- и техуровень не разделены. |
| 10 | Цель—Средства—Ограничения | Стратегический | Выполнено | Цель, средства и запреты присутствуют, но средства рассыпаны по тексту. |
| 11 | Формат вывода | Тактический | Выполнено | Пояснения + код с фиксированной последовательностью. |
| 12 | Тон и стиль | Тактический | Выполнено | «Строгий академический, профессиональный технический язык». |
| 13 | Разделители и маркеры | Тактический | Выполнено | Маркеры // --- КЛИЕНТ --- и // --- СЕРВЕР ---. |
| 14 | Отрицание и запреты | Тактический | Выполнено | Сильнейший блок: запрет модальных вызовов, циклов, COM, hardcode-путей. |
| 15 | One-Shot | Демонстрационный | Выполнено | Шаблон структуры с директивами компиляции приведён. |
| 16 | Few-Shot | Демонстрационный | Частично | Блок назван «FEW-SHOT», но серверная функция осталась пустой заглушкой. Примеров меньше 2–3. (не вып. → частично) |
| 17 | CoT | Метакогнитивный | Выполнено | «Прежде чем писать код, выведи текстовое описание логики» + 3 шага. |
| 18 | ToT | Метакогнитивный | Выполнено | Появился блок: 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 | Автономность | Шаблон | Выполнено | Отсылок к «этому чату» нет, промпт переносим. |
| 37 | Top-Down подход | Инструментальный | Выполнено | Сначала структура и алгоритм, затем реализация. |
| 38 | Сборка «по частям» | Инструментальный | Частично | Разбиение усилилось, но артефакты (реквизиты, макет, модуль объекта) не разделены. |
| 39 | Адаптация под фреймворки | Инструментальный | Выполнено | БСП указана как ориентир, но без конкретных механизмов. |
ЭтоГруппа для «Физических лиц» через проверку Иерархический.Промпт переписан с нуля. Результат — 38/39, все «частичные» закрыты.
| № | Проблема итерации 2 | Решение |
|---|---|---|
| 1 | Две версии промпта подряд с противоречиями | Дубль удалён; уникальные требования («задание рамок», пересказ ТЗ) перенесены в явные блоки |
| 2 | НЕ ЭтоГруппа для всех справочников | Иерархичность разобрана поимённо, условие зависит от Метаданные…Иерархический |
| 3 | Few-Shot противоречит БСП | Переход на ФайловаяСистемаКлиент.ПоказатьДиалогВыбора, прямой вызов внесён в запреты |
| 4 | Примеров было полтора | Три полноценных: диалог, текст запроса, обработчик завершения |
| 5 | «Заблокированный запрос» для чтения | «Только чтение, без транзакций и управляемых блокировок» |
| 6 | Неясен формат выгрузки поля «Ссылка» | Строка(Ссылка.УникальныйИдентификатор()) в ячейке, не в запросе |
| 7 | Содержание чек-листа не задано | Зафиксирован, расширен до 5 пунктов + требование исправленных фрагментов |
| 8 | ToT-развилка — деталь реализации | Заменена: ТабличныйДокумент на клиент vs временное хранилище |
| 9 | Бизнес- и техуровень не разделены | Блок [УРОВЕНЬ ЗАДАЧИ], артефакт .epf, способ запуска, подсистема |
| 10 | Нет сверки полей с метаданными | ОБЯЗАТЕЛЬНАЯ СВЕРКА с форматом «Расхождение с метаданными: …» |
| 11 | Не задано поведение при невыполнимом пункте | Блок с разделом «Не выполнено и почему» |
| 12 | Разбиение только Клиент/Сервер | [СБОРКА ПО ЧАСТЯМ]: 4 артефакта + ограждение bsl |
| 13 | Индикация и блокировка формы не оговорены | Состояние(), блокировка команды, Refresh = N/A явно |
| 14 | 900 слов конфликтовали со 150 строками кода | 700 слов сопроводительного текста, код считается отдельно |
| 15 | «БСП актуальной версии» — плавающее понятие | Зафиксирована БСП 3.1.10 |
| 16 | «ОЖИДАЙ команды» ломал автономность в API | Исключение «Продолжаю без подтверждения» |
| 17 | Запрет Предупреждение vs ПоказатьПредупреждение | Убрано; сообщения через ОбщегоНазначенияКлиент.СообщитьПользователю |
Покрытие правил не изменилось — выросла исполнимость промпта.
Формальная оценка упёрлась в потолок на итерации 3. Правки v4 устраняют два места, где модель с высокой вероятностью выдала бы нерабочий код, и одну лазейку, через которую она пропустила бы обязательную остановку.
| № | Замечание | Что сделано |
|---|---|---|
| 1 | Микро-противоречие: запрет «Новый ДиалогВыбораФайла» против кода Примера 1 | Запрет переформулирован точечно: под запретом методы Диалог.Показать() и Диалог.Выбрать(), создание объекта объявлено разрешённым и необходимым как параметра для БСП |
| 2 | Лазейка «Продолжаю без подтверждения» | Блок переименован в КРИТИЧЕСКОЕ ТРЕБОВАНИЕ. Названы ChatGPT/Claude/Gemini как интерактивные среды. Добавлено правило: «если сомневаешься — считай режим интерактивным и остановись» |
| 3 | Пустая колонка ИНН для Номенклатуры | Задано "" КАК ИНН строковой константой, а не NULL. Наличие реквизита определяется через Реквизиты.Найти("ИНН") |
| 4 | Порог рефакторинга и недоступность контекста формы | Вспомогательные процедуры — в том же контексте &НаСервереБезКонтекста; описано ограничение платформы |
| 5 | НСтр() зафиксирован только в блоке БСП |
Перенесён в [ОГРАНИЧЕНИЯ] отдельным запретом, добавлен п.6 чек-листа |
Строковая константа "" КАК ИНН внутри текста запроса, который сам является
строковым литералом 1С, требует удвоения кавычек — пять кавычек подряд.
Модель почти гарантированно ошибётся без предупреждения.
ПолеИНН = ?(ОбъектМД.Реквизиты.Найти("ИНН") = Неопределено,
""""" КАК ИНН", // -> "" КАК ИНН
"Спр.ИНН КАК ИНН");
Из &НаСервереБезКонтекста нельзя вызывать не «экспортные процедуры формы»
вообще, а именно процедуры с директивой &НаСервере — им нужен контекст.
Вызовы других &НаСервереБезКонтекста-методов законны, и именно на них должна
опираться декомпозиция. Запрети шире — модель откажется дробить код и упрётся в лимит 150 строк.
Путь каждого правила от исходного промпта до финальной версии.
ЭтоГруппа.| № | Правило | Раздел | Итер. 1 | Итер. 2 | v4 |
|---|---|---|---|---|---|
| 1 | Действие | Базовый | ✓ | ✓ | ✓ |
| 2 | Данные | Базовый | ✓ | ✓ | ✓ |
| 3 | Контекст | Базовый | ✓ | ✓ | ✓ |
| 4 | Структура ответа | Базовый | ✓ | ✓ | ✓ |
| 5 | Температура | Креативность | ✓ | ✓ | ✓ |
| 6 | Top-k | Креативность | ✓ | ✓ | ✓ |
| 7 | Длина ответа | Креативность | ~ | ✓ | ✓ |
| 8 | Роль | Стратегический | ✓ | ✓ | ✓ |
| 9 | Контекстная привязка | Стратегический | ~ | ~ | ✓ |
| 10 | Цель—Средства—Ограничения | Стратегический | ✓ | ✓ | ✓ |
| 11 | Формат вывода | Тактический | ✓ | ✓ | ✓ |
| 12 | Тон и стиль | Тактический | ✓ | ✓ | ✓ |
| 13 | Разделители и маркеры | Тактический | ✓ | ✓ | ✓ |
| 14 | Отрицание и запреты | Тактический | ✓ | ✓ | ✓ |
| 15 | One-Shot | Демонстрационный | ✓ | ✓ | ✓ |
| 16 | Few-Shot | Демонстрационный | ✕ | ~ | ✓ |
| 17 | CoT | Метакогнитивный | ✓ | ✓ | ✓ |
| 18 | ToT | Метакогнитивный | ✕ | ✓ | ✓ |
| 19 | Саморефлексия | Метакогнитивный | ✕ | ✓ | ✓ |
| 20 | Сужение горлышка | Метакогнитивный | ~ | ✓ | ✓ |
| 21 | Учёт версионности | Специфика 1С | ✓ | ✓ | ✓ |
| 22 | Указание метрики | Специфика 1С | ✓ | ✓ | ✓ |
| 23 | Специфика метаданных | Специфика 1С | ~ | ✓ | ✓ |
| 24 | Работа с запросами | Специфика 1С | ~ | ~ | ✓ |
| 25 | Управление формой | Специфика 1С | ~ | ~ | ✓ |
| 26 | Задание рамок | Сложная задача | ✓ | ✓ | ✓ |
| 27 | Фокус на первом шаге | Сложная задача | ✓ | ✓ | ✓ |
| 28 | Проверка понимания | Сложная задача | ✓ | ✓ | ✓ |
| 29 | Обратная связь и фиксация | Сложная задача | ✕ | ✓ | ✓ |
| 30 | Сузить фокус | Корректировка | ✓ | ✓ | ✓ |
| 31 | Уточнить логику | Корректировка | ~ | ~ | ✓ |
| 32 | Конкретизировать задание | Корректировка | ~ | ~ | ✓ |
| 33 | Исправить тон/формат | Корректировка | ~ | ✓ | ✓ |
| 34 | Анализ истории | Шаблон | N/A | N/A | N/A |
| 35 | Синтез идеала | Шаблон | ✓ | ✓ | ✓ |
| 36 | Автономность | Шаблон | ✓ | ✓ | ✓ |
| 37 | Top-Down подход | Инструментальный | ✓ | ✓ | ✓ |
| 38 | Сборка «по частям» | Инструментальный | ~ | ~ | ✓ |
| 39 | Адаптация под фреймворки | Инструментальный | ✓ | ✓ | ✓ |
| Раздел | Правила | Итер. 1 | Итер. 2 | v4 |
|---|---|---|---|---|
| 1. Базовый уровень | 1–4 | 4 | 4 | 4 |
| 2. Параметры креативности | 5–7 | 2 | 3 | 3 |
| 3. Стратегический уровень | 8–10 | 2 | 2 | 3 |
| 4. Тактический уровень | 11–14 | 4 | 4 | 4 |
| 5. Демонстрационный уровень | 15–16 | 1 | 1 | 2 |
| 6. Метакогнитивный уровень | 17–20 | 1 | 4 | 4 |
| 7. Специализированный для 1С | 21–25 | 2 | 3 | 5 |
| 8. Процесс сложной задачи | 26–29 | 3 | 4 | 4 |
| 9. Стратегии корректировки | 30–33 | 1 | 2 | 4 |
| 10. Создание шаблона | 34–36 | 2 | 2 | 2 +1 N/A |
| 11. Инструментальный уровень | 37–39 | 2 | 2 | 3 |
| ИТОГО | 39 | 24 | 31 | 38 |
Как запускать промпт, что контролировать в ответе и как реагировать на сбои.
Замер показывает 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 начнёт вымываться.
| Среда | Где смотреть | Действие |
|---|---|---|
| ChatGPT | Settings → Personalization → Custom instructions | Отключить на время работы |
| Claude | Profile → Custom instructions; Project instructions | Очистить или вести в чистом проекте |
| Gemini | Saved info | Отключить |
| API | system-сообщение обвязки | Убедиться, что не требует полного ответа |
Дополнительно: начинать с нового чата и не включать режимы «краткий ответ» — они подавляют CoT и блок вариантов архитектуры.
| Проверка | Норма | Если нарушено |
|---|---|---|
| Код в первом ответе | отсутствует полностью | Не принимать, вернуть репликой из 9.4 |
| Объём Шагов 0–2 | до 15 строк | Напомнить лимит из блока [ОБЪЁМ] |
| ToT | 2 варианта + выбор + ≤3 предложения | Затребовать сравнение по веб-клиенту явно |
Тип ИмяСправочника | Строка со списком из 3 значений | Отклонить вариант с СправочникСсылка |
| Завершающий вопрос | задан дословно | Модель не собирается останавливаться |
"" КАК ИНН.
Типовые ошибки: "" КАК ИНН без удвоения (обрыв литерала), NULL КАК ИНН (ломает тип колонки),
исключение колонки целиком (состав колонок «плавает»).ФайловаяСистемаКлиент.ПоказатьДиалогВыбора. Признаки неверного кода:
Диалог.Показать(), Диалог.Выбрать(), самодельная конструкция с
ПодключитьРасширениеРаботыСФайлами() в синхронном стиле. Обёртка БСП инициирует установку сама.&НаСервереБезКонтекста. Вызов &НаСервере оттуда не компилируется.НЕ Спр.ЭтоГруппа — только под условием ОбъектМД.Иерархический.
Безусловное добавление → падение на «Физических лицах».НСтр("ru = '…'"), включая заголовок диалога,
фильтр и Состояние().Да, структура и логика утверждены. Продолжай: выводи код четырьмя блоками
согласно [СБОРКА ПО ЧАСТЯМ], каждый блок в ограждении ```bsl,
затем чек-лист самопроверки из 6 пунктов и блок «Готово».
Напоминаю ключевые требования: условие «НЕ ЭтоГруппа» — только при
Метаданные.Справочники[ИмяСправочника].Иерархический = Истина;
для Номенклатуры поле ИНН подставляется как пустая строковая константа
с удвоенными кавычками; показ диалога — только через
ФайловаяСистемаКлиент.ПоказатьДиалогВыбора; все интерфейсные тексты — в НСтр().
Нарушен блок [ИНТЕРАКТИВНАЯ ФИКСАЦИЯ]. Ты в интерактивном чате, остановка была
обязательной. Отбрось выданный код. Выведи заново только Шаги 0–2 (до 15 строк)
и заверши сообщение вопросом об утверждении.
Не выполнен блок [САМОПРОВЕРКА]. Пройди все 6 пунктов в формате
«пункт — ОК / нарушение: <описание>» и приведи исправленные фрагменты кода.
Риск реален, но проявляется не при чтении промпта, а при выводе ответа. Пять кавычек подряд внутри ограждения bsl передаются корректно; проблема возникает, когда модель выводит код без ограждения — тогда рендерер может схлопнуть кавычки визуально.
Профилактика заложена в промпт: блок [СБОРКА ПО ЧАСТЯМ] требует ограждать каждый блок. Если модель проигнорировала — требуйте переоформить, а не переписывать код:
Оберни каждый блок кода в ограждение ```bsl. В функции ТекстЗапросаВыгрузки
покажи строковый литерал с удвоенными кавычками без изменений.
| Риск | Вероятность | Где перехватывается |
|---|---|---|
| Игнорирование остановки | средняя | 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