1c77-dev
Разработка и доработка под 1С:Предприятие 7.7 (она же "77", "семерка"): правка и создание модулей кода (.1s, кодировка CP1251), форм (.frm), объектов конфигурации (1Cv7.MD), внешних обработок и отчето
SKILL.mdskills/1c77-dev/SKILL.md
GitHubРазработка под 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_queryMCP1c77-metadata.Собрать
.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).