Чужая конфигурация 1С: с чего начать чтение кода

· 10 мин

Содержание

Новички открывают модуль на три тысячи строк и пытаются читать его сверху вниз. Это худший способ. Код 1С почти никогда не читают подряд: сначала находят точку входа, потом идут по вызовам.

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

Работайте с копией базы. Любые правки в Конфигураторе, даже «просто посмотреть и поправить пробел», делайте на тестовой копии. Типовую конфигурацию на поддержке не меняйте без понимания последствий для обновлений.

Что вы видите в Конфигураторе: окно и дерево метаданных

Конфигуратор запускается из окна выбора баз кнопкой «Конфигуратор» или через меню «Администрирование» самой программы в режиме Предприятия. Нужны права администратора информационной базы.

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

Основные ветки дерева:

  • 🗂 Общие — общие модули, подсистемы, роли, общие формы, макеты, параметры сеанса. Здесь живёт «библиотечный» код.
  • 📚 Константы, справочники, документы — то, с чем работает пользователь.
  • 📊 Регистры — сведений, накопления, бухгалтерии, расчёта. Это таблицы, в которые документы записывают итог своей работы.
  • 📄 Отчёты и обработки — самостоятельные объекты со своей формой и модулями.
  • 🔢 Перечисления, планы видов характеристик, планы счетов — справочная «обвязка».

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

Как за пять минут понять устройство незнакомой базы

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

У каждого объекта дерева есть контекстное меню «Открыть». У документа откроется окно с вкладками: данные, формы, команды, макеты. Вкладка «Движения» показывает, в какие регистры документ записывает данные. Это самая полезная вкладка для понимания логики.

Где лежит код: типы модулей и точки входа

Код 1С хранится в модулях. Модуль — это текстовый файл с процедурами и функциями, привязанный к объекту. Какой именно модуль открывать, зависит от того, что вы ищете.

МодульКогда в него идтиЧто там обычно
Модуль объектаЛогика записи и проведения документаОбработкаПроведения, ПередЗаписью, ПриЗаписи
Модуль менеджераСлужебные функции вокруг объекта целикомПечатные формы, заполнение, экспортные функции
Модуль формыПоведение окна: кнопки, поля, событияПриОткрытии, обработчики команд, ПриИзменении полей
Модуль набора записейЛогика записи регистраПередЗаписью, ПриЗаписи набора
Общий модульПереиспользуемые функцииРасчёты, работа со строками, интеграции
Модуль приложенияЗапуск программыЧто делается при старте и завершении
Модуль сеансаИнициализация параметров сеансаУстановка значений при входе пользователя

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

Если вам нужно понять, что происходит при нажатии кнопки, идите не в модуль объекта, а в модуль формы. Найдите команду, посмотрите, какой обработчик у неё указан в свойствах, и откройте его.

Директивы компиляции: почему код «разорван» на клиент и сервер

Над процедурами стоят директивы вроде &НаКлиенте и &НаСервере. Они определяют, где выполняется код. Клиентская процедура не видит данных базы напрямую, поэтому для запроса она вызывает серверную.

Цепочка читается так: кнопка → клиентский обработчик → серверный вызов с передачей параметров → запрос к базе → возврат результата на форму. Знание этой схемы избавляет от половины вопросов «почему код делится на две процедуры».

Как искать по коду: поиск, ссылки, навигация

Читать код вслепую нет смысла, его ищут. В Конфигураторе три основных инструмента.

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

Практический приём: пользователь видит сообщение «Не заполнен контрагент». Скопируйте этот текст, найдите его поиском по конфигурации и сразу попадёте в проверку, которая его выдаёт.

Для перехода к строке с номером из сообщения об ошибке используйте Ctrl+G. Платформа пишет номер строки модуля в тексте ошибки, и это экономит много времени.

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

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

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

Что смотреть в документе

  • Реквизиты шапки и табличные части — то, что вводит пользователь.
  • Вкладка «Движения» — список регистров, в которые пишет документ.
  • Процедура ОбработкаПроведения в модуле объекта — сам код проведения.

Типовой код проведения идёт по шаблону. Сначала формируются наборы записей, затем они заполняются данными из табличной части, и в конце проверяются остатки. Для регистров накопления вы увидите вид движения «Приход» или «Расход».

Какие бывают регистры

РегистрЧто хранитПример
СведенийДанные по состоянию на дату, без прихода и расходаЦены, курсы валют
НакопленияКоличество или сумма с движением «приход/расход»Остатки товаров, взаиморасчёты
БухгалтерииПроводки по плану счетовДт/Кт, суммы, субконто
РасчётаНачисления, зависящие от периода действияЗарплатные начисления

Для разбора кода найдите в проведении ту строку, где открывается набор записей, например Движения.ТоварыНаСкладах. Это и есть адрес регистра, который можно найти в дереве метаданных и посмотреть его измерения, ресурсы и реквизиты.

Не читайте движения документа в журнале как единственный источник. Часть записей создаётся из подписок на события и общих модулей. Если после проведения в регистре есть строки, которых нет в ОбработкаПроведения, ищите в подписках на события (ветка «Общие»).

Не понимаете, откуда в регистре взялась запись. С чего начать?

Отладка: пройти код по шагам

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

Порядок работы:

  1. Откройте нужный модуль в Конфигураторе.
  2. Поставьте точку останова на строке: клавиша F9 или щелчок в левом поле. Строка отметится красным кружком.
  3. Запустите отладку клавишей F5 («Отладка» → «Начать отладку»). Откроется программа в режиме Предприятия.
  4. Выполните действие пользователя: проведите документ или нажмите кнопку.
  5. Выполнение остановится на отмеченной строке. Конфигуратор покажет значения переменных.

Клавиши шагов:

  • F10 — выполнить строку, не заходя в вызываемые процедуры.
  • F11 — зайти внутрь вызываемой процедуры.
  • Shift+F11 — выйти из текущей процедуры.
  • F5 — продолжить до следующей точки останова.

Когда остановка произошла, откройте окно «Табло» и добавьте выражения, которые хотите отслеживать. Для разового просмотра пригодится окно вычисления выражения, оно вызывается через меню отладки.

Ставьте точку останова не на первой строке процедуры, а на строке, после которой данные уже собраны. Так вы сразу увидите, что именно пришло на вход.

Если отладка не останавливается, причины обычно такие: код выполняется на сервере, а отладка запущена только для клиента; точка поставлена в модуле, который в этом сценарии не вызывается; база запущена не из Конфигуратора. В свойствах отладки (меню «Сервис» → «Параметры» → «Отладка») проверьте, что включена отладка серверного кода.

Перед первым запуском отладки
Выполнено: 0 / 5

Запросы в коде 1С: как читать и проверять

Запрос на встроенном языке выглядит как текст в кавычках, часто в многострочной форме с символом | в начале продолжения. Внутри это язык запросов, похожий на SQL, но с русскими ключевыми словами.

Минимальная структура:

ВЫБРАТЬ
    Номенклатура.Наименование КАК Наименование,
    Остатки.КоличествоОстаток КАК Остаток
ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
    ПО Остатки.Номенклатура = Номенклатура.Ссылка
ГДЕ
    Номенклатура.ЭтоГруппа = ЛОЖЬ

Читайте запрос так: что выбираем (после ВЫБРАТЬ), откуда (после ИЗ), как соединяем (ПО), какие условия (ГДЕ), как группируем (СГРУППИРОВАТЬ ПО).

Что нужно знать про виртуальные таблицы. У регистров накопления есть Остатки, Обороты, ОстаткиИОбороты. Они считаются платформой на лету из движений. В скобках после имени передают параметры: дату и отбор. Если отбор указан в скобках, а не в ГДЕ, запрос работает быстрее.

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

СКД: как читать отчёты на схеме компоновки данных

Большинство отчётов в типовых конфигурациях построены на системе компоновки данных. В коде такого отчёта часто почти нет. Логика лежит в схеме, которую открывают из объекта отчёта (вкладка «Данные» → «Схема компоновки данных»).

Основные вкладки схемы:

  • Наборы данных — откуда отчёт берёт данные. Чаще всего это запрос, но бывает объект или объединение наборов.
  • Связи наборов данных — как соединяются несколько наборов.
  • Вычисляемые поля — выражения, не хранящиеся в базе.
  • Ресурсы — что и как суммируется или считается в итогах.
  • Параметры — значения, влияющие на запрос: даты, организации.
  • Настройки — группировки, отборы, порядок и вывод, то есть то, что пользователь видит в «Настройках» отчёта.

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

Модуль отчёта на СКД тоже существует. Туда выносят обработчики вроде ПриКомпоновкеРезультата, если нужно подправить настройки программно. Это место, где «магия» отчёта и скрывается, когда в схеме ничего подозрительного нет.

Ошибки новичков при чтении чужого кода

Большинство затыков повторяются:

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

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

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