Разработка под 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 доработки
Понять объект. Метаданные и код существующих объектов конфигурации смотри через 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.
Править код только через CP1251. Используй scripts/cp1251_io.py или Python напрямую
(Path.read_text(encoding='cp1251') / write_text(..., encoding='cp1251', newline='')).
Никогда не правь .1s инструментом, который пишет UTF-8 - сломаешь кодировку всего файла.
Для повторяемых вставок (одинаковый блок в N мест) используй patch_by_marker.py - он идемпотентен.
Сверить синтаксис 7.7 ДО сборки. Прогони мысленно (или поиском) по чек-листу особенностей из
references/syntax-gotchas-77.md. Самая частая ошибка: голый вызов функции или число в условии
Если/ИначеЕсли без операции сравнения. Проверка запросов - validate_query MCP 1c77-metadata.
Собрать .ert и проверить. Сборка - только рабочим GComp через PowerShell (build_ert.py).
Перед сборкой - бэкап .ert. После - убедиться, что timestamp/размер изменились (GComp молча
не пересобирает при битых аргументах). Финальная компиляция BSL и проверка - при открытии в самой 7.7.
Самопроверка перед сборкой .ert
Чек-лист прогонять по СВОЕМУ сгенерированному коду ДО вызова gcomp:
Детали и полный список - 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).
1---2name: 1c77-dev3description: Разработка и доработка под 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)4---56# Разработка под 1С 7.7 (1c77-dev)78Доработка кода, форм, метаданных и внешних обработок 1С:Предприятия 7.7. Версия 7.7 кардинально9отличается от 8.x, и привычные для 8.x приемы тут ломаются. Этот скилл собирает рабочие приемы,10особенности синтаксиса и готовые скрипты.1112## Чем 7.7 отличается (читать обязательно)1314- **Нет EDT и .bsl/.mdo.** Конфигурация хранится в бинарном `1Cv7.MD`, внешние обработки - в бинарном `.ert`.15 Редактируемые исходники получают разбором через **GComp** (текстовые `.1s`, `.frm`, `.mdp`, `.mxl`).16- **Кодировка везде CP1251.** Файлы `.1s`/`.frm`/`.mdp` - не UTF-8. Инструмент Grep (ищет по UTF-8-байтам)17 кириллицу в них **не находит**. Read показывает кракозябры. Читать/править - только через Python с18 `encoding='cp1251'` (см. `scripts/cp1251_io.py`) либо через MCP-сервер `1c77-metadata`.19- **Синтаксис строже и беднее 8.x.** Нет типа Булево; число в условии `Если` не приводится к логическому;20 многих функций 8.x (`ЗначениеЗаполнено`, штатной `ПустаяСтрока` как Булево) нет или ведут себя иначе.21 Это источник большинства ошибок компиляции. Подробно: `references/syntax-gotchas-77.md`.2223## Карта навигации2425Читай нужный файл по ситуации, не загружай все сразу:2627| Когда | Файл |28|-------|------|29| Пишешь/правишь BSL-код 7.7, ловишь ошибку компиляции "Выражение должно иметь логический тип" и т.п. | `references/syntax-gotchas-77.md` |30| Нужно понять структуру `.1s` / `.frm` / `.mdp` / `.mxl` / `.ert`, что внутри обработки | `references/file-formats-77.md` |31| Надо разобрать `.ert` в исходники или собрать обратно | `references/gcomp.md` |32| Анализ метаданных конфигурации, поиск реквизита, проверка запроса 7.7, окружение | `references/mcp-and-tools.md` |3334Скрипты в `scripts/` (запуск с `--help`):35- `cp1251_io.py` - чтение/запись/grep по `.1s` в CP1251 (когда обычный Grep слеп).36- `analyze_module.py` - инвентаризация модуля: `СоздатьОбъект`, типы метаданных, глобальные `гл*`-функции, обращения к реквизитам.37- `patch_by_marker.py` - идемпотентная вставка блока кода по маркеру-якорю (для повторяемых правок).38- `build_ert.py` / `unpack_ert.py` - обертки GComp (сборка/разбор `.ert`) через PowerShell.3940## Базовый workflow доработки41421. **Понять объект.** Метаданные и код существующих объектов конфигурации смотри через MCP `1c77-metadata`43 (`get_object`, `get_module`, `search_field`, `validate_query`) - это быстрее и точнее ручного парсинга.44 Для внешней обработки `.ert` сначала разбери ее GComp (`unpack_ert.py`), затем работай с `.1s`/`.frm`.45 Детали: `references/mcp-and-tools.md`, `references/gcomp.md`.46472. **Править код только через CP1251.** Используй `scripts/cp1251_io.py` или Python напрямую48 (`Path.read_text(encoding='cp1251')` / `write_text(..., encoding='cp1251', newline='')`).49 Никогда не правь `.1s` инструментом, который пишет UTF-8 - сломаешь кодировку всего файла.50 Для повторяемых вставок (одинаковый блок в N мест) используй `patch_by_marker.py` - он идемпотентен.51523. **Сверить синтаксис 7.7 ДО сборки.** Прогони мысленно (или поиском) по чек-листу особенностей из53 `references/syntax-gotchas-77.md`. Самая частая ошибка: голый вызов функции или число в условии54 `Если`/`ИначеЕсли` без операции сравнения. Проверка запросов - `validate_query` MCP `1c77-metadata`.55564. **Собрать `.ert` и проверить.** Сборка - только рабочим GComp через PowerShell (`build_ert.py`).57 Перед сборкой - бэкап `.ert`. После - убедиться, что timestamp/размер изменились (GComp молча58 не пересобирает при битых аргументах). Финальная компиляция BSL и проверка - при открытии в самой 7.7.5960## Самопроверка перед сборкой .ert6162Чек-лист прогонять по СВОЕМУ сгенерированному коду ДО вызова gcomp:6364- [ ] В условиях `Если`/`Пока` нет голых вызовов функций или чисел - каждое сравнение явное65 и в скобках: `(Ф(х)=1) И (у=2)`.66- [ ] `ПустаяСтрока`/`ПустоеЗначение` сравнивать с 1/0.67- [ ] Каждая вызываемая процедура/функция объявлена ВЫШЕ точки вызова или в глобальном68 модуле - проверить греп-поиском определения.69- [ ] `Симв()`, не `Символ()`; тернарник `?(усл,а,б)` с явными сравнениями.70- [ ] Нет обращений к несуществующим у 7.7 методам 8.x.7172Детали и полный список - `references/syntax-gotchas-77.md`.7374Типовые ошибки компиляции ("Выражение должно иметь логический тип", "Процедура не обнаружена",75"Плохой тип переменной") - сначала прогнать этот чек-лист, потом лезть в отладку.7677## Критические правила (ключевые отличия синтаксиса, детали в references)7879- **Логический тип в `Если`.** `Если ПустаяСтрока(Х) Тогда` -> ошибка "Выражение должно иметь логический тип".80 Нужно сравнение: `Если ПустаяСтрока(Х) = 1 Тогда`, а `НЕ ПустаяСтрока(Х)` -> `ПустаяСтрока(Х) = 0`.81 То же для тернарника: `?(ПустоеЗначение(Х) = 1, "", ...)`. Полный список - `references/syntax-gotchas-77.md`.82- **CP1251.** Grep по кириллице в `.1s` молчит (UTF-8 vs CP1251). Не делай вывод "совпадений нет" по Grep -83 ищи через `cp1251_io.py grep` или MCP.84- **GComp запускать только из PowerShell.** Из Bash кириллица в путях бьется, gcomp молча выходит с ложным85 успехом и ничего не собирает. Рабочий exe - в `C:\Program Files\GComp\Release\` (с `GComp.dll` рядом),86 "голый" exe из каталогов проекта не запускается. Детали - `references/gcomp.md`.87- **Минимальный diff при багфиксе.** Правь только код, связанный с багом. Не переформатируй CP1251-файл88 целиком - рискуешь кодировкой и шумным diff.8990## Проверка качества9192После правки BSL 7.7 - прогон через MCP `1c-naparnik` (`ask_1c_ai`) для оценки и `validate_query`93(`1c77-metadata`) для запросов. EDT-валидация и `bsl-platform-help` к 7.7 неприменимы (это 8.x).