---
name: 1c77-dev
description: >-
  Разработка и доработка под 1С:Предприятие 7.7 (она же "77", "семёрка"): правка и создание модулей
  кода (.1s, кодировка CP1251), форм (.frm), объектов конфигурации (1Cv7.MD), внешних обработок и
  отчётов (.ert), плюс разбор и сборка .ert / 1Cv7.MD через GComp. Используй ВСЕГДА, когда задача
  касается 1С 7.7: файлы .1s / .ert / .frm / .mdp / 1Cv7.MD; глобальный модуль, модули проведения и
  формы 7.7; синтаксис 7.7 (нет типа Булево; ПустаяСтрока; СоздатьОбъект; тернарник ?(); ошибка
  компиляции "Выражение должно иметь логический тип"); обход справочников и документов 7.7, выгрузка
  через ТаблицаЗначений или FileSystemObject; сборка или разбор внешних обработок 7.7 (gcomp);
  миграция данных с 7.7; поиск и правка кириллицы в .1s (обычный grep её не находит из-за CP1251).
  Применяй даже без явного "7.7", если речь о старой конфигурации с файлами .1s/.ert/.md или о
  ТиС / Торговле / Бухгалтерии 7.7 / УПП 7.7. НЕ использовать для 1С 8.x: EDT, .bsl, .mdo, .epf, .erf,
  .cf, .cfe, управляемые формы, расширения конфигурации (CFE), СКД, Конвертация данных (КД) 2.x,
  конфигурации УНФ / ERP / ЗУП / УТ / БП 3.x - для них есть отдельные 1c-* скиллы. Не применять и к
  общим задачам с кодировкой CP1251 вне 1С 7.7 (например конвертация csv-файлов).
---

# Разработка под 1С 7.7 (1c77-dev)

Доработка кода, форм, метаданных и внешних обработок 1С:Предприятия 7.7. Версия 7.7 кардинально
отличается от 8.x, и привычные для 8.x приемы тут ломаются. Этот скилл собирает рабочие приемы,
особенности синтаксиса и готовые скрипты.

## Чем 7.7 отличается (читать обязательно)

- **Нет EDT и .bsl/.mdo.** Конфигурация хранится в бинарном `1Cv7.MD`, внешние обработки - в бинарном `.ert`.
  Редактируемые исходники получают разбором через **GComp** (текстовые `.1s`, `.frm`, `.mdp`, `.mxl`).
- **Кодировка везде CP1251.** Файлы `.1s`/`.frm`/`.mdp` - не UTF-8. Инструмент Grep (ищет по UTF-8-байтам)
  кириллицу в них **не находит**. Read показывает кракозябры. Читать/править - только через Python с
  `encoding='cp1251'` (см. `scripts/cp1251_io.py`) либо через MCP-сервер `1c77-metadata`.
- **Синтаксис строже и беднее 8.x.** Нет типа Булево; число в условии `Если` не приводится к логическому;
  многих функций 8.x (`ЗначениеЗаполнено`, штатной `ПустаяСтрока` как Булево) нет или ведут себя иначе.
  Это источник большинства ошибок компиляции. Подробно: `references/syntax-gotchas-77.md`.

## Карта навигации

Читай нужный файл по ситуации, не загружай всё сразу:

| Когда | Файл |
|-------|------|
| Пишешь/правишь BSL-код 7.7, ловишь ошибку компиляции «Выражение должно иметь логический тип» и т.п. | `references/syntax-gotchas-77.md` |
| Нужно понять структуру `.1s` / `.frm` / `.mdp` / `.mxl` / `.ert`, что внутри обработки | `references/file-formats-77.md` |
| Надо разобрать `.ert` в исходники или собрать обратно | `references/gcomp.md` |
| Анализ метаданных конфигурации, поиск реквизита, проверка запроса 7.7, окружение | `references/mcp-and-tools.md` |

Скрипты в `scripts/` (запуск с `--help`):
- `cp1251_io.py` - чтение/запись/grep по `.1s` в CP1251 (когда обычный Grep слеп).
- `analyze_module.py` - инвентаризация модуля: `СоздатьОбъект`, типы метаданных, глобальные `гл*`-функции, обращения к реквизитам.
- `patch_by_marker.py` - идемпотентная вставка блока кода по маркеру-якорю (для повторяемых правок).
- `build_ert.py` / `unpack_ert.py` - обертки GComp (сборка/разбор `.ert`) через PowerShell.

## Базовый workflow доработки

1. **Понять объект.** Метаданные и код существующих объектов конфигурации смотри через MCP `1c77-metadata`
   (`get_object`, `get_module`, `search_field`, `validate_query`) - это быстрее и точнее ручного парсинга.
   Для внешней обработки `.ert` сначала разбери её GComp (`unpack_ert.py`), затем работай с `.1s`/`.frm`.
   Детали: `references/mcp-and-tools.md`, `references/gcomp.md`.

2. **Править код только через CP1251.** Используй `scripts/cp1251_io.py` или Python напрямую
   (`Path.read_text(encoding='cp1251')` / `write_text(..., encoding='cp1251', newline='')`).
   Никогда не правь `.1s` инструментом, который пишет UTF-8 - сломаешь кодировку всего файла.
   Для повторяемых вставок (одинаковый блок в N мест) используй `patch_by_marker.py` - он идемпотентен.

3. **Сверить синтаксис 7.7 ДО сборки.** Прогони мысленно (или поиском) по чек-листу особенностей из
   `references/syntax-gotchas-77.md`. Самая частая ошибка: голый вызов функции или число в условии
   `Если`/`ИначеЕсли` без операции сравнения. Проверка запросов - `validate_query` MCP `1c77-metadata`.

4. **Собрать `.ert` и проверить.** Сборка - только рабочим GComp через PowerShell (`build_ert.py`).
   Перед сборкой - бэкап `.ert`. После - убедиться, что timestamp/размер изменились (GComp молча
   не пересобирает при битых аргументах). Финальная компиляция BSL и проверка - при открытии в самой 7.7.

## Критические правила (ключевые отличия синтаксиса, детали в references)

- **Логический тип в `Если`.** `Если ПустаяСтрока(Х) Тогда` -> ошибка «Выражение должно иметь логический тип».
  Нужно сравнение: `Если ПустаяСтрока(Х) = 1 Тогда`, а `НЕ ПустаяСтрока(Х)` -> `ПустаяСтрока(Х) = 0`.
  То же для тернарника: `?(ПустоеЗначение(Х) = 1, "", ...)`. Полный список - `references/syntax-gotchas-77.md`.
- **CP1251.** Grep по кириллице в `.1s` молчит (UTF-8 vs CP1251). Не делай вывод «совпадений нет» по Grep -
  ищи через `cp1251_io.py grep` или MCP.
- **GComp запускать только из PowerShell.** Из Bash кириллица в путях бьётся, gcomp молча выходит с ложным
  успехом и ничего не собирает. Рабочий exe - в `C:\Program Files\GComp\Release\` (с `GComp.dll` рядом),
  «голый» exe из каталогов проекта не запускается. Детали - `references/gcomp.md`.
- **Минимальный diff при багфиксе.** Правь только код, связанный с багом. Не переформатируй CP1251-файл
  целиком - рискуешь кодировкой и шумным diff.

## Проверка качества

После правки BSL 7.7 - прогон через MCP `1c-naparnik` (`ask_1c_ai`) для оценки и `validate_query`
(`1c77-metadata`) для запросов. EDT-валидация и `bsl-platform-help` к 7.7 неприменимы (это 8.x).
