Чужая конфигурация 1С: с чего начать чтение кода
Содержание
Новички открывают модуль на три тысячи строк и пытаются читать его сверху вниз. Это худший способ. Код 1С почти никогда не читают подряд: сначала находят точку входа, потом идут по вызовам.
Разобраться в коде 1С быстрее всего так: открыть конфигурацию в Конфигураторе, найти нужный объект в дереве метаданных, определить, в каком модуле лежит интересующее действие, и пройти его отладчиком. Дальше разберём каждый шаг на практике.
Работайте с копией базы. Любые правки в Конфигураторе, даже «просто посмотреть и поправить пробел», делайте на тестовой копии. Типовую конфигурацию на поддержке не меняйте без понимания последствий для обновлений.
Что вы видите в Конфигураторе: окно и дерево метаданных
Конфигуратор запускается из окна выбора баз кнопкой «Конфигуратор» или через меню «Администрирование» самой программы в режиме Предприятия. Нужны права администратора информационной базы.
Откройте дерево метаданных: пункт меню Конфигурация → Открыть конфигурацию. Слева появится иерархия, и вся логика базы устроена вокруг неё.
Основные ветки дерева:
- 🗂 Общие — общие модули, подсистемы, роли, общие формы, макеты, параметры сеанса. Здесь живёт «библиотечный» код.
- 📚 Константы, справочники, документы — то, с чем работает пользователь.
- 📊 Регистры — сведений, накопления, бухгалтерии, расчёта. Это таблицы, в которые документы записывают итог своей работы.
- 📄 Отчёты и обработки — самостоятельные объекты со своей формой и модулями.
- 🔢 Перечисления, планы видов характеристик, планы счетов — справочная «обвязка».
Подсистемы показывают, как конфигурация поделена по разделам интерфейса. Если вы знаете, что нужный функционал открывается в разделе «Продажи», начните с одноимённой подсистемы: у неё есть состав объектов.
Как за пять минут понять устройство незнакомой базы
Посмотрите три вещи. Какие документы есть и в какие регистры они пишут. Какие общие модули подключены. Есть ли подсистемы с понятными названиями.
У каждого объекта дерева есть контекстное меню «Открыть». У документа откроется окно с вкладками: данные, формы, команды, макеты. Вкладка «Движения» показывает, в какие регистры документ записывает данные. Это самая полезная вкладка для понимания логики.
Где лежит код: типы модулей и точки входа
Код 1С хранится в модулях. Модуль — это текстовый файл с процедурами и функциями, привязанный к объекту. Какой именно модуль открывать, зависит от того, что вы ищете.
| Модуль | Когда в него идти | Что там обычно |
|---|---|---|
| Модуль объекта | Логика записи и проведения документа | ОбработкаПроведения, ПередЗаписью, ПриЗаписи |
| Модуль менеджера | Служебные функции вокруг объекта целиком | Печатные формы, заполнение, экспортные функции |
| Модуль формы | Поведение окна: кнопки, поля, события | ПриОткрытии, обработчики команд, ПриИзменении полей |
| Модуль набора записей | Логика записи регистра | ПередЗаписью, ПриЗаписи набора |
| Общий модуль | Переиспользуемые функции | Расчёты, работа со строками, интеграции |
| Модуль приложения | Запуск программы | Что делается при старте и завершении |
| Модуль сеанса | Инициализация параметров сеанса | Установка значений при входе пользователя |
Модуль приложения и модуль сеанса — это точки входа верхнего уровня. Остальные запускаются событиями: пользователь нажал кнопку, провёл документ, открыл форму.
Если вам нужно понять, что происходит при нажатии кнопки, идите не в модуль объекта, а в модуль формы. Найдите команду, посмотрите, какой обработчик у неё указан в свойствах, и откройте его.
Директивы компиляции: почему код «разорван» на клиент и сервер
Над процедурами стоят директивы вроде &НаКлиенте и &НаСервере. Они определяют, где выполняется код. Клиентская процедура не видит данных базы напрямую, поэтому для запроса она вызывает серверную.
Цепочка читается так: кнопка → клиентский обработчик → серверный вызов с передачей параметров → запрос к базе → возврат результата на форму. Знание этой схемы избавляет от половины вопросов «почему код делится на две процедуры».
Как искать по коду: поиск, ссылки, навигация
Читать код вслепую нет смысла, его ищут. В Конфигураторе три основных инструмента.
- Поиск в открытом модуле.
Ctrl+Fищет текст в текущем окне.F3переходит к следующему вхождению. - Поиск по всей конфигурации. В меню «Правка» есть пункт поиска по конфигурации. Вводите имя процедуры, текст сообщения об ошибке или имя реквизита. Результаты показываются списком в нижней панели, двойной клик открывает модуль на нужной строке.
- Поиск мест использования. В контекстном меню объекта дерева есть пункт «Найти ссылки на объект». Он покажет, где реквизит или документ упоминается в запросах и модулях.
Практический приём: пользователь видит сообщение «Не заполнен контрагент». Скопируйте этот текст, найдите его поиском по конфигурации и сразу попадёте в проверку, которая его выдаёт.
Для перехода к строке с номером из сообщения об ошибке используйте Ctrl+G. Платформа пишет номер строки модуля в тексте ошибки, и это экономит много времени.
Общие модули удобно читать так: найдите вызов функции, затем перейдите в её определение через контекстное меню модуля. Если такого пункта у вас нет, ищите имя функции по всей конфигурации и смотрите вхождение со словом Функция перед именем.
Как устроены типовые документы и регистры
Большинство бизнес-логики 1С сводится к одной схеме: документ при проведении формирует движения по регистрам, а отчёты читают эти регистры. Если понимаете эту схему, понимаете половину конфигурации.
Что смотреть в документе
- Реквизиты шапки и табличные части — то, что вводит пользователь.
- Вкладка «Движения» — список регистров, в которые пишет документ.
- Процедура
ОбработкаПроведенияв модуле объекта — сам код проведения.
Типовой код проведения идёт по шаблону. Сначала формируются наборы записей, затем они заполняются данными из табличной части, и в конце проверяются остатки. Для регистров накопления вы увидите вид движения «Приход» или «Расход».
Какие бывают регистры
| Регистр | Что хранит | Пример |
|---|---|---|
| Сведений | Данные по состоянию на дату, без прихода и расхода | Цены, курсы валют |
| Накопления | Количество или сумма с движением «приход/расход» | Остатки товаров, взаиморасчёты |
| Бухгалтерии | Проводки по плану счетов | Дт/Кт, суммы, субконто |
| Расчёта | Начисления, зависящие от периода действия | Зарплатные начисления |
Для разбора кода найдите в проведении ту строку, где открывается набор записей, например Движения.ТоварыНаСкладах. Это и есть адрес регистра, который можно найти в дереве метаданных и посмотреть его измерения, ресурсы и реквизиты.
Не читайте движения документа в журнале как единственный источник. Часть записей создаётся из подписок на события и общих модулей. Если после проведения в регистре есть строки, которых нет в ОбработкаПроведения, ищите в подписках на события (ветка «Общие»).
ОбработкаПроведения и посмотрите, какой набор Движения заполняется.ПередЗаписью часто добавляет данные автоматически.Отладка: пройти код по шагам
Отладчик показывает реальный путь выполнения, а не то, что вы вообразили, читая текст. Это главный инструмент понимания чужого кода.
Порядок работы:
- Откройте нужный модуль в Конфигураторе.
- Поставьте точку останова на строке: клавиша
F9или щелчок в левом поле. Строка отметится красным кружком. - Запустите отладку клавишей
F5(«Отладка» → «Начать отладку»). Откроется программа в режиме Предприятия. - Выполните действие пользователя: проведите документ или нажмите кнопку.
- Выполнение остановится на отмеченной строке. Конфигуратор покажет значения переменных.
Клавиши шагов:
F10— выполнить строку, не заходя в вызываемые процедуры.F11— зайти внутрь вызываемой процедуры.Shift+F11— выйти из текущей процедуры.F5— продолжить до следующей точки останова.
Когда остановка произошла, откройте окно «Табло» и добавьте выражения, которые хотите отслеживать. Для разового просмотра пригодится окно вычисления выражения, оно вызывается через меню отладки.
Ставьте точку останова не на первой строке процедуры, а на строке, после которой данные уже собраны. Так вы сразу увидите, что именно пришло на вход.
Если отладка не останавливается, причины обычно такие: код выполняется на сервере, а отладка запущена только для клиента; точка поставлена в модуле, который в этом сценарии не вызывается; база запущена не из Конфигуратора. В свойствах отладки (меню «Сервис» → «Параметры» → «Отладка») проверьте, что включена отладка серверного кода.
Запросы в коде 1С: как читать и проверять
Запрос на встроенном языке выглядит как текст в кавычках, часто в многострочной форме с символом | в начале продолжения. Внутри это язык запросов, похожий на SQL, но с русскими ключевыми словами.
Минимальная структура:
ВЫБРАТЬ
Номенклатура.Наименование КАК Наименование,
Остатки.КоличествоОстаток КАК Остаток
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
ПО Остатки.Номенклатура = Номенклатура.Ссылка
ГДЕ
Номенклатура.ЭтоГруппа = ЛОЖЬ
Читайте запрос так: что выбираем (после ВЫБРАТЬ), откуда (после ИЗ), как соединяем (ПО), какие условия (ГДЕ), как группируем (СГРУППИРОВАТЬ ПО).
Что нужно знать про виртуальные таблицы. У регистров накопления есть Остатки, Обороты, ОстаткиИОбороты. Они считаются платформой на лету из движений. В скобках после имени передают параметры: дату и отбор. Если отбор указан в скобках, а не в ГДЕ, запрос работает быстрее.
Для проверки запроса не обязательно запускать всё приложение. Откройте конструктор запроса: в модуле поставьте курсор внутри текста запроса и вызовите конструктор из контекстного меню. Он покажет таблицы, поля и условия в виде вкладок. Для экспериментов удобна внешняя консоль запросов — её часто ставят на тестовую базу как внешнюю обработку .
СКД: как читать отчёты на схеме компоновки данных
Большинство отчётов в типовых конфигурациях построены на системе компоновки данных. В коде такого отчёта часто почти нет. Логика лежит в схеме, которую открывают из объекта отчёта (вкладка «Данные» → «Схема компоновки данных»).
Основные вкладки схемы:
- Наборы данных — откуда отчёт берёт данные. Чаще всего это запрос, но бывает объект или объединение наборов.
- Связи наборов данных — как соединяются несколько наборов.
- Вычисляемые поля — выражения, не хранящиеся в базе.
- Ресурсы — что и как суммируется или считается в итогах.
- Параметры — значения, влияющие на запрос: даты, организации.
- Настройки — группировки, отборы, порядок и вывод, то есть то, что пользователь видит в «Настройках» отчёта.
Читать отчёт СКД удобно в таком порядке: сначала набор данных и его запрос, затем ресурсы, затем настройки по умолчанию. Если колонка выводится не так, как вы ожидаете, причина обычно в ресурсе или в условном оформлении.
Модуль отчёта на СКД тоже существует. Туда выносят обработчики вроде ПриКомпоновкеРезультата, если нужно подправить настройки программно. Это место, где «магия» отчёта и скрывается, когда в схеме ничего подозрительного нет.
Ошибки новичков при чтении чужого кода
Большинство затыков повторяются:
- 🔍 Открывают не тот модуль. Ищут проведение в модуле формы. Проведение — в модуле объекта.
- 🔍 Не видят расширения. В базе подключено расширение, которое переопределяет метод. В Конфигураторе расширения открываются отдельно: меню
Конфигурация→Расширения конфигурации. Код, который вы читаете в основной конфигурации, может выполняться с «перехватом». - 🔍 Путают обычный и управляемый режим. В управляемых формах код делится на клиент и сервер, в обычных нет.
- 🔍 Читают код, а не данные. Часть поведения определяют настройки в самой базе: константы, значения функциональных опций. Посмотрите их в режиме Предприятия.
- 🔍 Правят типовой модуль «по месту». При обновлении изменения конфликтуют или пропадают.