1c77-dev · git:20260716.3655134 · 2026-07-16 · sha256 d51d30e262f22a80
1c77-dev git:20260716.3655134A
Immutable. This exact content is served forever at /api/v1/blob/d51d30e262f22a80.
--- name: 1c77-dev description: ">-" --- # Разработка под 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. ## Самопроверка перед сборкой .ert Чек-лист прогонять по СВОЕМУ сгенерированному коду ДО вызова gcomp: - [ ] В условиях `Если`/`Пока` нет голых вызовов функций или чисел - каждое сравнение явное и в скобках: `(Ф(х)=1) И (у=2)`. - [ ] `ПустаяСтрока`/`ПустоеЗначение` сравнивать с 1/0. - [ ] Каждая вызываемая процедура/функция объявлена ВЫШЕ точки вызова или в глобальном модуле - проверить греп-поиском определения. - [ ] `Симв`, не `Символ`; тернарник `?(усл,а,б)` с явными сравнениями. - [ ] Нет обращений к несуществующим у 7.7 методам 8.x. Детали и полный список - `references/syntax-gotchas-77.md`. Типовые ошибки компиляции («Выражение должно иметь логический тип», «Процедура не обнаружена», «Плохой тип переменной») - сначала прогнать этот чек-лист, потом лезть в отладку. ## Критические правила (ключевые отличия синтаксиса, детали в 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).