Правка модулей 1С в Конфигураторе: от открытия до отладки

· 9 мин

Содержание

Код 1С редактируют в Конфигураторе: запустите базу в этом режиме, откройте дерево метаданных через Конфигурация → Открыть конфигурацию, найдите объект и откройте его модуль. Если конфигурация типовая и стоит на поддержке, сначала нужно разрешить изменения, иначе модуль откроется только для чтения.

Дальше всё стандартно: правите текст, проверяете синтаксис, запускаете базу под отладчиком и смотрите, как работает код. Ниже — весь путь по порядку, с горячими клавишами и ловушками, на которых спотыкаются новички.

Запуск Конфигуратора и доступ к дереву метаданных

В окне запуска 1С выберите базу и нажмите кнопку Конфигуратор, а не «1С:Предприятие». Тот же режим можно включить из командной строки: 1cv8.exe DESIGNER /F "C:\Bases\Trade" для файловой базы. Для серверной базы вместо /F используют /S с именем сервера и базы.

После входа окно будет почти пустым. Откройте дерево командой Конфигурация → Открыть конфигурацию. Слева появятся ветки: общие объекты, справочники, документы, регистры, отчёты, обработки.

Для работы нужны права администратора базы. Если пользователя нет в списке с ролью полных прав, Конфигуратор откажет во входе.

Что делать с типовой конфигурацией на поддержке

Бухгалтерия, ЗУП и УТ поставляются на замке. Объект можно посмотреть, но не изменить. Чтобы править:

  1. Откройте Конфигурация → Поддержка → Настройка поддержки.
  2. Включите возможность изменения конфигурации: платформа предупредит, что обновления станут сложнее.
  3. Выберите правило для нужной ветки или объекта: «Объект поставщика редактируется с сохранением поддержки» — оптимальный вариант, он позволит потом объединять ваши правки с релизами.

Каждая правка типового модуля — это будущий конфликт при обновлении. Если задачу можно решить дополнением, а не изменением типового кода, берите расширение (см. ниже).

Перед правкой рабочей базы сохраните копию: Администрирование → Выгрузить информационную базу в Конфигураторе, либо просто скопируйте папку файловой базы.

Где лежит код: какие бывают модули

Код 1С не лежит в одном месте. Он разбросан по модулям, и от типа модуля зависит, что в нём можно делать и когда он вызывается.

МодульГде открытьДля чего
Модуль управляемого приложенияСвойства конфигурацииСобытия старта и завершения работы
Модуль сеансаСвойства конфигурацииУстановка параметров сеанса
Общий модульВетка «Общие → Общие модули»Процедуры и функции, которые зовут из разных мест
Модуль объектаСправочник, документ и т. п.Обработка проведения, записи, заполнения
Модуль менеджераТам жеСлужебные методы, не привязанные к записи
Модуль формыРедактор формы, закладка «Модуль»Поведение формы и её элементов
Модуль командыРаздел «Команды» объектаДействие, которое запускает команда
Модуль набора записейРегистрыСобытия записи движений

Чтобы открыть модуль , дважды щёлкните по общему модулю. Для справочника или документа вызовите контекстное меню объекта и выберите открытие модуля объекта или модуля менеджера. Форму откройте двойным щелчком и перейдите на закладку «Модуль».

Директивы компиляции в управляемых формах

В модуле управляемой формы над процедурой стоит директива. Она определяет, где процедура выполняется:

  • &НаКлиенте — на компьютере пользователя, есть доступ к элементам формы;
  • &НаСервере — на сервере, есть доступ к реквизитам формы и базе;
  • &НаСервереБезКонтекста — на сервере без передачи всей формы, работает быстрее;
  • &НаКлиентеНаСервереБезКонтекста — можно вызвать с обеих сторон.

Типичная ошибка новичка — вызвать серверную процедуру прямо из клиентской без разделения и получить сообщение о том, что процедура не найдена. Клиент вызывает только серверные процедуры, помеченные в этой же форме директивами; серверный код не обращается к элементам формы.

Работа в текстовом редакторе: подсказки, навигация, поиск

Редактор в Конфигураторе простой, но знать его приёмы полезно. Вот те, что экономят больше всего времени:

  • Ctrl+Пробел — список доступных методов и переменных. Набираете начало слова, получаете варианты.
  • Ctrl+Shift+Пробел — подсказка по параметрам процедуры или функции, пока вы стоите внутри скобок.
  • Ctrl+F — поиск в текущем модуле, Ctrl+G — переход на нужную строку.
  • Ctrl+F2 — поставить закладку на строку, F2 — перейти к следующей закладке.
  • Поиск по всей конфигурации — в меню «Правка», пункт про поиск в конфигурации. Он находит вызовы процедуры по всем модулям сразу.

Блок текста можно сдвигать и комментировать через меню «Текст». Выделите несколько строк и закомментируйте их одной командой, а не вручную по символу.

Мини-пример для проверки редактора. Создайте в модуле формы клиентскую процедуру и серверную, которую она зовёт:

&НаКлиенте
Процедура ПоказатьНоменклатуру(Команда)
    ПоказатьНоменклатуруНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПоказатьНоменклатуруНаСервере()
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10 Наименование ИЗ Справочник.Номенклатура";
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить(Выборка.Наименование);
    КонецЦикла;
КонецПроцедуры

Код работает в любой конфигурации, где есть справочник «Номенклатура». Если справочника нет, платформа сообщит об этом при синтаксическом контроле.

Не набирайте имена объектов вручную. Выберите их из подсказки по Ctrl+Пробел: опечатка в названии справочника всплывёт только при запуске.

Мини-кейс: запрет записи документа без комментария

Допустим, бухгалтерия просит не давать сохранять документ, пока не заполнен комментарий. Задача на пять минут, зато на ней видно весь цикл правки.

  1. Откройте документ в дереве метаданных и вызовите модуль объекта.
  2. Добавьте обработчик события записи:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если ПустаяСтрока(Комментарий) Тогда
        Сообщить("Заполните комментарий к документу.");
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры
  1. Запустите синтакс-контроль: если у документа нет реквизита Комментарий, платформа покажет это сразу.
  2. Сохраните конфигурацию, обновите конфигурацию БД и откройте документ в пользовательском режиме.

Параметр Отказ решает всё: пока он равен Истина, запись не выполнится. Сообщение пользователь увидит в нижней панели.

В типовых конфигурациях подобные проверки лучше делать не в готовом модуле, а в расширении: тогда обновление поставщика не сотрёт вашу правку. Если же модуль уже отредактирован напрямую, комментируйте свои вставки, чтобы потом их легко найти при объединении.

Отдельно о стиле. Давайте процедурам говорящие имена и не пишите длинных полотен на сотни строк. Вынесите повторяющийся фрагмент в общий модуль, и править его придётся в одном месте. Старый код не удаляйте насовсем: закомментируйте на время проверки, а когда убедитесь, что всё работает, уберите.

Отладка: как заглянуть внутрь работающего кода

Отладчик нужен, когда результат не совпадает с ожидаемым, а по тексту причина не видна. Принцип такой: вы останавливаете выполнение на нужной строке и смотрите значения переменных.

Запуск под отладкой

Нажмите F5 или выберите Отладка → Начать отладку. Платформа предложит обновить конфигурацию базы, если вы вносили правки, и откроет клиент 1С:Предприятия. Работайте как обычный пользователь: когда код дойдёт до отмеченной строки, управление вернётся в Конфигуратор.

Точки останова и пошаговое выполнение

Поставьте курсор на строку и нажмите F9. Слева появится красный кружок. Дальше в паузе работают такие команды:

КлавишаДействие
F10Выполнить строку, не заходя в вызываемые процедуры
F11Зайти внутрь вызываемой процедуры
Shift+F11Выйти из текущей процедуры
F5Продолжить до следующей точки останова
Shift+F5Остановить отладку

Для точки останова можно задать условие. Откройте её свойства через контекстное меню и впишите выражение, например Выборка.Наименование = "Стол". Остановка произойдёт только на нужном элементе цикла, а не на каждой из тысяч итераций.

Табло, вычисление выражений и стек вызовов

Три окна в меню «Отладка» заменяют десяток вызовов Сообщить():

  • Табло — список выражений, значения которых обновляются на каждом шаге;
  • Вычислить выражение (Shift+F9) — разовое вычисление, можно проверить запрос или вызов функции;
  • Стек вызовов — цепочка процедур, которая привела в эту строку.

Если ошибка возникает неизвестно где, включите Отладка → Остановка по ошибке. Отладчик остановится на строке, где сработало исключение, даже если вы не ставили точку.

Диагностика: выберите симптом

Сравнение и объединение конфигураций

Задача возникает в двух ситуациях: вы обновили типовую конфигурацию и хотите перенести свои правки, либо нужно понять, чем рабочая база отличается от тестовой.

В меню Конфигурация есть пункты сравнения и объединения. Источником может быть конфигурация базы данных, файл конфигурации .cf, конфигурация поставщика или хранилище. Сравнение открывает дерево различий: у каждого объекта стоит признак «изменён», «добавлен» или «удалён».

Алгоритм работы:

  1. Выберите источник сравнения и запустите его.
  2. Пройдите по дереву, раскрывая только изменённые ветки.
  3. Для спорного модуля откройте окно сравнения текстов: изменения подсвечены построчно.
  4. Решите по каждому объекту, чьи правки оставить, и поставьте флажки.
  5. Запустите объединение и проверьте результат синтаксическим контролем.

Конфликты чаще всего появляются в модулях, которые правили и вы, и поставщик. Здесь автоматика не угадает смысл, придётся читать оба варианта и сводить вручную.

Синтаксический контроль и проверка конфигурации

Синтаксис модуля проверяется командой Текст → Синтакс-контроль (Ctrl+F7). Она находит незакрытые скобки, несуществующие переменные, неверное число параметров и опечатки в ключевых словах. Запускайте её после каждого заметного изменения.

Для всей конфигурации есть Конфигурация → Проверка конфигурации. В диалоге вы выбираете, что проверять. Среди пунктов, которые стоит включить:

  • проверка логической целостности — находит битые ссылки между объектами;
  • поиск ссылок на удалённые объекты;
  • поиск неиспользуемых процедур и функций — помогает убрать мёртвый код;
  • контроль модулей на сервере и на клиенте.

Результат появится в окне сообщений. Двойной щелчок по строке откроет модуль в проблемном месте.

Проверка всей конфигурации на крупной базе идёт долго. Запускайте её после работы, а не перед каждой правкой.

Перед сохранением правок
Выполнено: 0 / 4

Безопасная правка: расширения и хранилище

Прямое изменение типового кода — самый рискованный путь. Есть два способа сделать работу чище.

Расширения конфигурации появились в платформе 8.3.6. В расширении вы перехватываете процедуры и добавляете свои реквизиты, не трогая основную конфигурацию. Открываются они через Конфигурация → Расширения конфигурации. Расширение подключается как файл .cfe, а затем нужно обновить конфигурацию базы данных — это два отдельных шага. При обновлении типовой конфигурации расширение остаётся на месте.

Хранилище конфигурации нужно, когда над одной базой работает несколько разработчиков. Открывается через Конфигурация → Хранилище конфигурации. Перед правкой объект «захватывают», после — «помещают» с комментарием. Пока объект захвачен, другой разработчик его не изменит.

Для новых проектов многие переходят на 1С:Enterprise Development Tools — среду разработки на базе Eclipse. Она удобнее для больших команд, но принципы те же: модули, отладка, контроль синтаксиса.

Частые вопросы

Модуль открывается, но текст не редактируется. Почему?
Объект стоит на поддержке поставщика. Откройте Конфигурация → Поддержка → Настройка поддержки и разрешите изменения для нужной ветки.
Можно ли редактировать код в обычном режиме 1С:Предприятия?
Нет. Модули конфигурации меняются только в Конфигураторе. В пользовательском режиме доступны лишь внешние обработки и отчёты, подключённые к базе.
Почему правки не видны после сохранения?
Сохранение меняет основную конфигурацию, а база работает с конфигурацией БД. Нажмите F7 или обновите конфигурацию базы данных, затем запустите пользовательский режим.
Чем отличается `F10` от `F11` в отладчике?
F10 выполняет вызов процедуры целиком, F11 заходит внутрь, чтобы пройти её построчно.
Можно ли отладить серверный код?
Да. В клиент-серверном режиме отладчик останавливается и на серверных процедурах, если клиент запущен под отладкой из Конфигуратора.