1c77-dev · git:20260706.2e32c95 · 2026-07-06 · sha256 b1a1ed7c81b48f87
1c77-dev git:20260706.2e32c95A
Immutable. This exact content is served forever at /api/v1/blob/b1a1ed7c81b48f87.
--- 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).