1C-CodeОсновы 1С → Конфигуратор и дерево метаданных

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

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

Глава 16 из 36 · чтение примерно 24 минут

Задача с работы звучит так: «в накладной не считается скидка». Чтобы её выполнить, надо знать, куда идти. Эта глава — про карту.

Дерево конфигурации

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

Ветки идут в постоянном порядке, и он не алфавитный — он смысловой, от общего к частному:

Главные ветки дерева

ВеткаЧто этоПример
Общието, что используется вездеобщие модули, картинки, макеты
Константыодно значение на всю базуОрганизация по умолчанию
Справочникисписки того, что существуетНоменклатура, Контрагенты
Документысобытия, которые произошлиРеализация, Поступление
Перечисленияжёсткий список вариантовВидОперации: Продажа, Возврат
Отчётыпоказать данныеОборотно-сальдовая ведомость
Обработкисделать что-то с даннымиЗагрузка прайса из Excel
Регистры сведенийзначение на дату и разрезЦены номенклатуры
Регистры накопленияприход и расходТоварыНаСкладах
Регистры бухгалтериипроводки по счетамХозрасчётный
Планы видов характеристиксвойства, заводимые пользователемДопРеквизиты
Роликому что можноКладовщик, Бухгалтер

Мелкие ветки, мимо которых проходят зря

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

Ветки, которые встретятся в первый же месяц

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

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

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

Общий реквизит — один реквизит, добавленный сразу в десятки объектов. Так в типовых сделана «Организация»: она не заведена в каждом документе по отдельности. На этом же механизме работает разделение данных, когда в одной базе живут несколько независимых организаций.

Как запомнить разницу

Справочник отвечает на вопрос «что существует». Товар существует независимо от того, продавали его сегодня.

Документ отвечает на «что случилось». У него всегда есть дата и номер: событие произошло в конкретный момент.

Регистр отвечает на «сколько и где». Он не вводится руками — его пишут документы при проведении.

Эти три вопроса — «что существует», «что случилось», «сколько сейчас» — и есть устройство любой учётной системы.

Что внутри объекта

Раскройте любой справочник — и увидите одинаковый набор веток. Он одинаков у всех объектов, и это сильно упрощает жизнь: разобравшись с одним, вы знаете устройство всех.

Реквизиты — поля объекта. У контрагента это ИНН, КПП, ЮрАдрес.

Табличные части — таблицы внутри объекта. У накладной это «Товары»: сколько строк, столько позиций.

Формы — как объект выглядит на экране. Форм бывает несколько: списка, элемента, выбора.

Макеты — печатные формы и схемы отчётов.

Модули — код. Их несколько, и какой когда выполняется — тема отдельной главы: это одно из самых частых мест, где новичок пишет верный код не туда.

Предопределённые элементы

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

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

И ровно поэтому с ними легко сделать больно.

Предопределённый элемент нельзя просто удалить

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

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

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

Как найти нужное в чужой конфигурации

Типовая — это тысячи объектов и сотни тысяч строк кода. Листать дерево бесполезно; ищут четырьмя способами, и порядок обычно такой.

1. От того, что видит человек. Он показывает кнопку или поле на экране. В предприятии — «Изменить форму» или подсказка с именем элемента; дальше это имя ищется в конфигураторе.

2. Глобальный поиск по конфигурации. Ищет по всему коду и свойствам сразу. Им находят «откуда берётся эта надпись» — по куску текста из окна.

3. Поиск ссылок на объект. Правой кнопкой по объекту в дереве — «Найти ссылки». Отвечает на «кто этим пользуется» и обязателен ДО правки: иначе правка задевает тех, о ком вы не знали.

4. По журналу регистрации. Если ошибка уже была, в журнале есть имя процедуры и модуля — это точный адрес.

Отладчик как способ поиска

Самый честный ответ на «какой код тут работает» даёт не поиск, а стек вызовов. Ставите точку останова в общем месте — например, в записи объекта — нажимаете кнопку в предприятии и смотрите, откуда пришли.

Это быстрее чтения кода в типовой, где одну процедуру зовут из десяти мест, и половина вызовов — через переопределяемые модули БСП.

Четыре инструмента поиска, и у каждого свой вопрос

«Найти нужное место в чужой конфигурации» — это не одно умение, а четыре разных, и путать их значит тратить часы там, где хватило бы минуты.

Чем искать и на какой вопрос это отвечает

ИнструментОтвечает на вопросКогда именно он
Глобальный поиск по конфигурации«где вообще встречается это слово»знаете кусок текста, имя функции, сообщение об ошибке
Поиск ссылок на объект«кто пользуется этим справочником»собираетесь менять объект и хотите знать, что сломается
Отладчик с точкой останова«какой код выполняется на самом деле»подписок и переопределений столько, что по тексту не проследить
Синтакс-помощник«какие у этого метода параметры»знаете что делать, не помните как оно называется

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

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

Конфигурацию можно выгрузить в файлы

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

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

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

Свойства объекта: то, что решает за вас

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

Свойства, которые чаще всего и нужны

СвойствоЧто меняетКогда трогают
Длина и точностьсколько влезет в реквизитденьги: 15 и 2; проценты не забыть, что длина считается ВСЯ
Индексироватьбудет ли быстрый поиск по реквизитуотбор или соединение по этому полю
Проверка заполненияругаться ли при записи пустогообязательные реквизиты — без единой строки кода
Связи параметров выборачто подставится в списке выборадоговор только этого контрагента
Функциональная опциявиден ли объект вообщеучёт по складам выключен — полей склада нет нигде
Основная формакакая форма откроется«почему при открытии не срабатывает мой код»

Переименование объекта — это не косметика

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

Поэтому переименование делают редко и с глобальным поиском по старому имени. А в расширениях — не делают вовсе: аннотации цепляются по имени.

Подсистемы: зачем они, кроме меню

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

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

Где искать код

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

1. Что не так — при записи или при проведении? Если сумма не сходится после проведения — смотрите модуль объекта, процедуру ОбработкаПроведения. Если поле не пересчиталось на экране — модуль формы.

2. Глобальный поиск. В конфигураторе это Ctrl+Shift+F по всей конфигурации. Ищите не название ошибки, а имя реквизита: «Скидка» найдёт все места, где её трогают.

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

На чём спотыкаются

Правят типовую конфигурацию, не сняв с поддержки, и удивляются, что нельзя. Типовая стоит «на поддержке»: часть объектов защищена от изменения. Снять с поддержки просто, а последствия долгие — про это глава про обновление.

Ищут в «Общих модулях» то, что лежит в модуле объекта. Правило простое: код про конкретный документ лежит у этого документа. В общий модуль выносят то, что нужно многим.

Добавляют реквизит и не понимают, почему его нет на форме. Реквизит объекта и элемент формы — разные вещи. Добавили реквизит — положите его на форму отдельно.

Имя, синоним и комментарий

У каждого объекта и каждого реквизита есть три названия, и путать их дорого.

Имя — то, чем объект зовут в коде. Без пробелов, латиница или кириллица: ВидНоменклатуры. Менять имя у работающей конфигурации больно: код по всей базе перестанет его находить.

Синоним — то, что видит пользователь: «Вид номенклатуры». Его можно менять свободно, на код не влияет.

Комментарий — для разработчика. Не показывается нигде, кроме конфигуратора.

Упражнение 1. Куда это положить

Функция ГдеХранить(Описание) получает описание того, что надо завести, и возвращает ветку дерева: "Справочники", "Документы" или "РегистрыНакопления". Правило: если в описании есть слово "список" — справочник; если "произошло" — документ; если "остаток" — регистр накопления.

Решается в тренажёре: код запускается и проверяется сразу.

Упражнение 2. Чем искать

Функция ЧемИскать(Вопрос) получает строку: "текст сообщения" — знаем текст, который видит пользователь; "кто ссылается" — собираемся менять объект. Вернуть "глобальный поиск" для первого и "поиск ссылок" для второго.

Решается в тренажёре: код запускается и проверяется сразу.

Короткий свод

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

Как закрепить

Читать про код и писать код — разные умения. В тренажёре к этой главе идут упражнения: вы пишете решение, оно запускается на настоящем интерпретаторе 1С и проверяется сразу, без установки платформы.

Открыть эту главу в тренажёре

Что такое 1С:Предприятие: конфигурация и база
Справочники: списки того, что существует