Справочники и Данные · 12 мин
СПР в 1С: что это и как используется
Что означает аббревиатура СПР в 1С: префикс справочников в коде, объект метаданных «Справочник», примеры обращения и типичные ошибки при работе.
Аббревиатура «СПР» в контексте 1С чаще всего означает справочник — один из базовых объектов метаданных платформы «1С:Предприятие». В коде конфигураций принято именовать переменные и реквизиты с префиксом «Спр»: например, СпрНоменклатура, СпрКонтрагенты. Увидев такое обозначение в запросе, модуле или на форме, можно сразу понять, что речь идёт об элементе или ссылке справочника.
Справочник — это список однотипных условно-постоянных данных: товаров, контрагентов, сотрудников, складов, валют. В отличие от документов, элементы справочника не привязаны к моменту времени и не формируют движения по регистрам сами по себе — они хранят нормативно-справочную информацию, на которую ссылаются документы и другие объекты.
Запрос «СПР 1С что это» возникает у пользователей в двух ситуациях: когда они встречают префикс «Спр» в коде или доработке и когда хотят понять, как устроен объект «Справочник» в конфигураторе. Ниже разобраны оба смысла, приёмы работы и ограничения, о которых стоит знать до изменения конфигурации.
Что такое справочник как объект метаданных
Справочник в 1С — таблица базы данных, каждая строка которой называется элементом. У элемента всегда есть служебные поля: ссылка (уникальный идентификатор), код, наименование, пометка удаления, владелец и родитель (если включены иерархия и подчинение). Поверх этого разработчик добавляет собственные реквизиты: артикул, ставка НДС, телефон, адрес.
Два ключевых свойства определяют поведение справочника. Иерархия позволяет группировать элементы по папкам (группам) — например, «Номенклатура/Материалы/Металлопрокат». Подчинённость связывает элемент с владельцем из другого справочника: классический пример — «Договоры контрагентов», где каждый договор принадлежит конкретному контрагенту и не существует отдельно.
Ещё одно важное свойство — вид иерархии: «иерархия групп и элементов» (группа не может быть значением реквизита) или «иерархия элементов» (любой элемент может быть родителем и одновременно хранить данные). Выбор делается при проектировании, поменять его позже без переноса данных затруднительно.
Почему в коде пишут «Спр» и как читать такие обозначения
Префикс «Спр» — часть негласного соглашения об именовании, которого придерживаются разработчики и фирма «1С» в типовых конфигурациях. Смысл префикса — по имени переменной сразу понимать тип значения, не заглядывая в объявление. Так, СпрСсылка — ссылка на элемент справочника, СпрОбъект — объектная обёртка для записи, ВыборкаСпр — результат выборки.
Похожие префиксы используются и для других объектов: «Док» — документы, «Пер» — перечисления, «Рег» или «РС» — регистры сведений, «СЗ» — список значений, «ТЗ» — таблица значений. Знание этой системы сокращений заметно ускоряет чтение чужого кода и типовых модулей.
Вне кода аббревиатура СПР встречается и в других значениях, которые не стоит путать: СППР — конфигурация «1С:Система проектирования прикладных решений» для управления разработкой, а в обсуждениях сертификации СПР иногда расшифровывают как «сертифицированный профессионал». Контекст подскажет, о чём речь: если рядом слова «код», «реквизит», «элемент» — это про справочник.
Как обратиться к справочнику программно
Работа со справочником в коде идёт через менеджер объекта — Справочники.ИмяСправочника. Типовые операции: найти элемент, получить объект для изменения, создать новый элемент, обойти выборку. Поиск по наименованию ненадёжен (наименования повторяются), поэтому для поиска используют код, реквизиты или запрос.
// Поиск и создание элемента справочника
СпрСсылка = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если СпрСсылка.Пустая() Тогда
СпрОбъект = Справочники.Номенклатура.СоздатьЭлемент();
СпрОбъект.Наименование = "Новый товар";
СпрОбъект.Записать();
СпрСсылка = СпрОбъект.Ссылка;
Иначе
СпрОбъект = СпрСсылка.ПолучитьОбъект();
СпрОбъект.Наименование = "Уточнённое наименование";
СпрОбъект.Записать();
КонецЕсли;Обратите внимание на разницу между ссылкой и объектом. Ссылка — лёгкий идентификатор, её можно передавать, сравнивать и хранить в реквизитах, не читая данные из базы. Объект — полная копия элемента в памяти; получение объекта через ПолучитьОбъект() читает всю запись и требуется только для изменения данных. Частая причина медленного кода — получение объектов в цикле там, где достаточно реквизита через точку от ссылки или запроса.
Для обхода больших объёмов используйте запрос, а не Выбрать() с обращениями к реквизитам внутри цикла. Запрос забирает нужные поля одним обращением к СУБД, тогда как выборка с обращением к реквизитам генерирует отдельное чтение на каждый элемент.
- 1Откройте список справочника через раздел меню, где он опубликован, или через «Все функции» → «Справочники».
- 2Используйте строку поиска по наименованию или отбор по реквизиту — например, по ИНН для контрагентов.
- 3Проверьте, не помечен ли элемент на удаление: включите отображение помеченных, если элемент «не находится».
- 4Убедитесь, что смотрите нужную группу иерархии — в списках с папками элемент может быть скрыт внутри группы.
Где справочники используются в учёте
Практически каждый документ и регистр ссылается на справочники. Проводка по счёту 41 содержит субконто «Номенклатура», документ «Реализация» хранит ссылки на контрагента, договор и склад, регистр сведений «Курсы валют» — на валюту. Поэтому качество справочников напрямую определяет качество отчётов: дубли контрагентов дробят взаиморасчёты, а дубли номенклатуры искажают остатки и себестоимость.
Из-за этого справочники — первое место, куда смотрят при расхождениях в отчётах. Если в оборотно-сальдовой ведомости один поставщик «разваливается» на трёх, почти наверняка в справочнике три элемента с похожими наименованиями, и документы распределены между ними.
Ищите по ИНН, артикулу или точному наименованию; в типовых есть обработка «Поиск и удаление дублей»
Проверьте пометку удаления и соответствие владельца — например, договор отбирается по контрагенту
Проверьте ссылку на предопределённость и восстановите элемент или замените ссылки
Изменение структуры справочника: что можно и чего нельзя
Добавить реквизит в справочник типовой конфигурации можно двумя способами: через механизм «Дополнительные реквизиты» в пользовательском режиме (без снятия с поддержки) или через конфигуратор с изменением состава объекта. Первый способ безопаснее: данные хранятся отдельно, обновления типового релиза не ломаются. Второй даёт полноценный реквизит в запросах и на формах, но требует аккуратности при обновлениях.
Опасные операции со справочниками: удаление реквизита, изменение его типа (особенно сужение длины строки или смена ссылочного типа), отключение иерархии при наличии данных. При реструктуризации платформа попытается преобразовать данные, но несовместимые изменения приведут к потере значений. Перед такими правками обязательна копия информационной базы и проверка на копии.
Типичные ошибки при работе со справочниками
Большинство проблем со справочниками возникает не из-за платформы, а из-за привычек работы. Ниже — ошибки, которые встречаются чаще всего как у пользователей, так и у начинающих разработчиков.
Отдельно стоит упомянуть предопределённые элементы. Это элементы, созданные в конфигураторе и используемые кодом по имени (например, валюта по умолчанию). Удалять или переименовывать их в пользовательском режиме нельзя — типовой код обращается к ним напрямую, и после удаления появятся ошибки «Предопределенный элемент отсутствует в данных».
Перед массовой загрузкой элементов в справочник сделайте пробную загрузку на 5–10 строках и проверьте, как заполняются реквизиты, группа и владелец. Исправить десять элементов вручную быстрее, чем чистить тысячу ошибочно созданных.
Как проверить, что всё работает правильно
После доработки справочника или массового изменения данных полезно пройти короткую проверку. Она занимает несколько минут и позволяет поймать проблему до того, как её заметят пользователи в отчётах.
Как проверить результат
Список открывается без ошибок, элемент показывает все реквизиты
Ошибки «Поле объекта не обнаружено» или пустые значения там, где были данные
Элемент доступен для выбора и подставляется в реквизиты
Элемент не находится, хотя в списке виден — вероятна пометка удаления или отбор
Группировки по новому реквизиту работают, суммы сходятся
Пустые группировки, разрывы итогов, дубли строк
Элементы выгружаются и сопоставляются в другой базе
В приёмнике создаются дубли или появляются «Объект не найден»
Если проверка выявила дубли, не удаляйте лишние элементы вручную. Используйте штатный механизм поиска и удаления дублей: он заменит ссылки в документах и регистрах на выбранный «правильный» элемент, и только потом пометит дубли на удаление.
Что важно запомнить
СПР в 1С — это справочник: объект для хранения списков однотипных данных, а «Спр» — принятый префикс в коде. Работайте со справочником через ссылки и запросы, не создавайте дублей, а любые изменения структуры проверяйте на копии базы с обязательной резервной копией перед реструктуризацией.
Частые вопросы
Чем справочник отличается от документа в 1С?
Справочник хранит условно-постоянные данные без привязки ко времени и не формирует движений по регистрам. Документ фиксирует событие в конкретный момент, имеет дату, номер и при проведении создаёт записи в регистрах. Элементы справочника служат значениями, на которые документы ссылаются.
Что делать, если в документе вместо элемента справочника отображается «Объект не найден»?
Это битая ссылка: элемент был удалён физически или потерян при обмене. Варианты действий — восстановить элемент из архивной копии, создать новый и заменить ссылки обработкой, либо, если данные не нужны, очистить ссылки в документах. Профилактика — использовать только пометку удаления и штатное удаление помеченных объектов с контролем ссылочной целостности.
Можно ли добавить свой реквизит в справочник типовой конфигурации без программиста?
Да, если в конфигурации включён механизм дополнительных реквизитов и сведений: он доступен в настройках справочника в пользовательском режиме. Такой реквизит появится на форме и в отчётах, поддержка конфигурации не нарушится. Если нужен полноценный реквизит для запросов и сложной логики — потребуется доработка в конфигураторе.
Почему поиск по наименованию считается плохой практикой в коде?
Наименование не уникально: платформа допускает любое число элементов с одинаковым названием, и метод НайтиПоНаименованию вернёт лишь один из них без гарантии, что нужный. Для надёжного поиска используют код (если контролируется уникальность), уникальные реквизиты вроде ИНН или артикула либо запрос с несколькими условиями.
Что такое предопределённые элементы справочника и почему их нельзя удалять?
Это элементы, созданные разработчиком в конфигураторе; типовой код обращается к ним по имени, например для валюты регламентированного учёта. При удалении такого элемента обращения из кода начинают выдавать ошибки, и часть функциональности перестаёт работать. Переименовывать их в пользовательском режиме тоже не следует.
Как безопасно удалить ненужные элементы справочника?
Сначала пометьте элементы на удаление, затем запустите штатную операцию «Удаление помеченных объектов» — она проверит, нет ли ссылок на элементы в документах и регистрах. Если ссылки есть, платформа покажет список мест использования, и элемент не будет удалён, пока ссылки не заменены. Перед операцией сделайте резервную копию базы.