Правка модулей 1С в Конфигураторе: от открытия до отладки
Содержание
Код 1С редактируют в Конфигураторе: запустите базу в этом режиме, откройте дерево метаданных через Конфигурация → Открыть конфигурацию, найдите объект и откройте его модуль. Если конфигурация типовая и стоит на поддержке, сначала нужно разрешить изменения, иначе модуль откроется только для чтения.
Дальше всё стандартно: правите текст, проверяете синтаксис, запускаете базу под отладчиком и смотрите, как работает код. Ниже — весь путь по порядку, с горячими клавишами и ловушками, на которых спотыкаются новички.
Запуск Конфигуратора и доступ к дереву метаданных
В окне запуска 1С выберите базу и нажмите кнопку Конфигуратор, а не «1С:Предприятие». Тот же режим можно включить из командной строки: 1cv8.exe DESIGNER /F "C:\Bases\Trade" для файловой базы. Для серверной базы вместо /F используют /S с именем сервера и базы.
После входа окно будет почти пустым. Откройте дерево командой Конфигурация → Открыть конфигурацию. Слева появятся ветки: общие объекты, справочники, документы, регистры, отчёты, обработки.
Для работы нужны права администратора базы. Если пользователя нет в списке с ролью полных прав, Конфигуратор откажет во входе.
Что делать с типовой конфигурацией на поддержке
Бухгалтерия, ЗУП и УТ поставляются на замке. Объект можно посмотреть, но не изменить. Чтобы править:
- Откройте
Конфигурация → Поддержка → Настройка поддержки. - Включите возможность изменения конфигурации: платформа предупредит, что обновления станут сложнее.
- Выберите правило для нужной ветки или объекта: «Объект поставщика редактируется с сохранением поддержки» — оптимальный вариант, он позволит потом объединять ваши правки с релизами.
Каждая правка типового модуля — это будущий конфликт при обновлении. Если задачу можно решить дополнением, а не изменением типового кода, берите расширение (см. ниже).
Перед правкой рабочей базы сохраните копию: Администрирование → Выгрузить информационную базу в Конфигураторе, либо просто скопируйте папку файловой базы.
Где лежит код: какие бывают модули
Код 1С не лежит в одном месте. Он разбросан по модулям, и от типа модуля зависит, что в нём можно делать и когда он вызывается.
| Модуль | Где открыть | Для чего |
|---|---|---|
| Модуль управляемого приложения | Свойства конфигурации | События старта и завершения работы |
| Модуль сеанса | Свойства конфигурации | Установка параметров сеанса |
| Общий модуль | Ветка «Общие → Общие модули» | Процедуры и функции, которые зовут из разных мест |
| Модуль объекта | Справочник, документ и т. п. | Обработка проведения, записи, заполнения |
| Модуль менеджера | Там же | Служебные методы, не привязанные к записи |
| Модуль формы | Редактор формы, закладка «Модуль» | Поведение формы и её элементов |
| Модуль команды | Раздел «Команды» объекта | Действие, которое запускает команда |
| Модуль набора записей | Регистры | События записи движений |
Чтобы открыть модуль , дважды щёлкните по общему модулю. Для справочника или документа вызовите контекстное меню объекта и выберите открытие модуля объекта или модуля менеджера. Форму откройте двойным щелчком и перейдите на закладку «Модуль».
Директивы компиляции в управляемых формах
В модуле управляемой формы над процедурой стоит директива. Она определяет, где процедура выполняется:
&НаКлиенте— на компьютере пользователя, есть доступ к элементам формы;&НаСервере— на сервере, есть доступ к реквизитам формы и базе;&НаСервереБезКонтекста— на сервере без передачи всей формы, работает быстрее;&НаКлиентеНаСервереБезКонтекста— можно вызвать с обеих сторон.
Типичная ошибка новичка — вызвать серверную процедуру прямо из клиентской без разделения и получить сообщение о том, что процедура не найдена. Клиент вызывает только серверные процедуры, помеченные в этой же форме директивами; серверный код не обращается к элементам формы.
Работа в текстовом редакторе: подсказки, навигация, поиск
Редактор в Конфигураторе простой, но знать его приёмы полезно. Вот те, что экономят больше всего времени:
Ctrl+Пробел— список доступных методов и переменных. Набираете начало слова, получаете варианты.Ctrl+Shift+Пробел— подсказка по параметрам процедуры или функции, пока вы стоите внутри скобок.Ctrl+F— поиск в текущем модуле,Ctrl+G— переход на нужную строку.Ctrl+F2— поставить закладку на строку,F2— перейти к следующей закладке.- Поиск по всей конфигурации — в меню «Правка», пункт про поиск в конфигурации. Он находит вызовы процедуры по всем модулям сразу.
Блок текста можно сдвигать и комментировать через меню «Текст». Выделите несколько строк и закомментируйте их одной командой, а не вручную по символу.
Мини-пример для проверки редактора. Создайте в модуле формы клиентскую процедуру и серверную, которую она зовёт:
&НаКлиенте
Процедура ПоказатьНоменклатуру(Команда)
ПоказатьНоменклатуруНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПоказатьНоменклатуруНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10 Наименование ИЗ Справочник.Номенклатура";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
КонецПроцедуры
Код работает в любой конфигурации, где есть справочник «Номенклатура». Если справочника нет, платформа сообщит об этом при синтаксическом контроле.
Не набирайте имена объектов вручную. Выберите их из подсказки по Ctrl+Пробел: опечатка в названии справочника всплывёт только при запуске.
Мини-кейс: запрет записи документа без комментария
Допустим, бухгалтерия просит не давать сохранять документ, пока не заполнен комментарий. Задача на пять минут, зато на ней видно весь цикл правки.
- Откройте документ в дереве метаданных и вызовите модуль объекта.
- Добавьте обработчик события записи:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ПустаяСтрока(Комментарий) Тогда
Сообщить("Заполните комментарий к документу.");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
- Запустите синтакс-контроль: если у документа нет реквизита
Комментарий, платформа покажет это сразу. - Сохраните конфигурацию, обновите конфигурацию БД и откройте документ в пользовательском режиме.
Параметр Отказ решает всё: пока он равен Истина, запись не выполнится. Сообщение пользователь увидит в нижней панели.
В типовых конфигурациях подобные проверки лучше делать не в готовом модуле, а в расширении: тогда обновление поставщика не сотрёт вашу правку. Если же модуль уже отредактирован напрямую, комментируйте свои вставки, чтобы потом их легко найти при объединении.
Отдельно о стиле. Давайте процедурам говорящие имена и не пишите длинных полотен на сотни строк. Вынесите повторяющийся фрагмент в общий модуль, и править его придётся в одном месте. Старый код не удаляйте насовсем: закомментируйте на время проверки, а когда убедитесь, что всё работает, уберите.
Отладка: как заглянуть внутрь работающего кода
Отладчик нужен, когда результат не совпадает с ожидаемым, а по тексту причина не видна. Принцип такой: вы останавливаете выполнение на нужной строке и смотрите значения переменных.
Запуск под отладкой
Нажмите F5 или выберите Отладка → Начать отладку. Платформа предложит обновить конфигурацию
базы, если вы вносили правки, и откроет клиент 1С:Предприятия. Работайте как обычный пользователь: когда код дойдёт до отмеченной строки, управление вернётся в Конфигуратор.
Точки останова и пошаговое выполнение
Поставьте курсор на строку и нажмите F9. Слева появится красный кружок. Дальше в паузе работают такие команды:
| Клавиша | Действие |
|---|---|
F10 | Выполнить строку, не заходя в вызываемые процедуры |
F11 | Зайти внутрь вызываемой процедуры |
Shift+F11 | Выйти из текущей процедуры |
F5 | Продолжить до следующей точки останова |
Shift+F5 | Остановить отладку |
Для точки останова можно задать условие. Откройте её свойства через контекстное меню и впишите выражение, например Выборка.Наименование = "Стол". Остановка произойдёт только на нужном элементе цикла, а не на каждой из тысяч итераций.
Табло, вычисление выражений и стек вызовов
Три окна в меню «Отладка» заменяют десяток вызовов Сообщить():
- Табло — список выражений, значения которых обновляются на каждом шаге;
- Вычислить выражение (
Shift+F9) — разовое вычисление, можно проверить запрос или вызов функции; - Стек вызовов — цепочка процедур, которая привела в эту строку.
Если ошибка возникает неизвестно где, включите Отладка → Остановка по ошибке. Отладчик остановится на строке, где сработало исключение, даже если вы не ставили точку.
F10 и посмотрите снова.Сравнение и объединение конфигураций
Задача возникает в двух ситуациях: вы обновили типовую конфигурацию и хотите перенести свои правки, либо нужно понять, чем рабочая база отличается от тестовой.
В меню Конфигурация есть пункты сравнения и объединения. Источником может быть конфигурация базы данных, файл конфигурации .cf, конфигурация поставщика или хранилище. Сравнение открывает дерево различий: у каждого объекта стоит признак «изменён», «добавлен» или «удалён».
Алгоритм работы:
- Выберите источник сравнения и запустите его.
- Пройдите по дереву, раскрывая только изменённые ветки.
- Для спорного модуля откройте окно сравнения текстов: изменения подсвечены построчно.
- Решите по каждому объекту, чьи правки оставить, и поставьте флажки.
- Запустите объединение и проверьте результат синтаксическим контролем.
Конфликты чаще всего появляются в модулях, которые правили и вы, и поставщик. Здесь автоматика не угадает смысл, придётся читать оба варианта и сводить вручную.
Синтаксический контроль и проверка конфигурации
Синтаксис модуля проверяется командой Текст → Синтакс-контроль (Ctrl+F7). Она находит незакрытые скобки, несуществующие переменные, неверное число параметров и опечатки в ключевых словах. Запускайте её после каждого заметного изменения.
Для всей конфигурации есть Конфигурация → Проверка конфигурации. В диалоге вы выбираете, что проверять. Среди пунктов, которые стоит включить:
- проверка логической целостности — находит битые ссылки между объектами;
- поиск ссылок на удалённые объекты;
- поиск неиспользуемых процедур и функций — помогает убрать мёртвый код;
- контроль модулей на сервере и на клиенте.
Результат появится в окне сообщений. Двойной щелчок по строке откроет модуль в проблемном месте.
Проверка всей конфигурации на крупной базе идёт долго. Запускайте её после работы, а не перед каждой правкой.
Безопасная правка: расширения и хранилище
Прямое изменение типового кода — самый рискованный путь. Есть два способа сделать работу чище.
Расширения конфигурации
появились в платформе 8.3.6. В расширении вы перехватываете процедуры и добавляете свои реквизиты, не трогая основную конфигурацию. Открываются они через Конфигурация → Расширения конфигурации. Расширение подключается как файл .cfe, а затем нужно обновить конфигурацию базы данных — это два отдельных шага. При обновлении типовой конфигурации расширение остаётся на месте.
Хранилище конфигурации нужно, когда над одной базой работает несколько разработчиков. Открывается через Конфигурация → Хранилище конфигурации. Перед правкой объект «захватывают», после — «помещают» с комментарием. Пока объект захвачен, другой разработчик его не изменит.
Для новых проектов многие переходят на 1С:Enterprise Development Tools — среду разработки на базе Eclipse. Она удобнее для больших команд, но принципы те же: модули, отладка, контроль синтаксиса.
Частые вопросы
Модуль открывается, но текст не редактируется. Почему?
Конфигурация → Поддержка → Настройка поддержки и разрешите изменения для нужной ветки.Можно ли редактировать код в обычном режиме 1С:Предприятия?
Почему правки не видны после сохранения?
F7 или обновите конфигурацию базы данных, затем запустите пользовательский режим.Чем отличается `F10` от `F11` в отладчике?
F10 выполняет вызов процедуры целиком, F11 заходит внутрь, чтобы пройти её построчно.