К статье
Практический материал

Разработка и Конфигурация · 10 мин

Что значит код в 1С: справочники, нумерация и программный код

Разбираем, что значит код в 1С: коды элементов справочников, префиксы, нумерация и программный код на встроенном языке. Примеры, ошибки и советы.

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

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

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

Код как идентификатор элемента справочника

Каждый элемент справочника в 1С (контрагент, номенклатура, сотрудник, склад) получает уникальный код. Он заполняется автоматически при создании записи: программа берет максимальный существующий код и увеличивает его на единицу. Пользователь может изменить код вручную, но обычно этого делать не стоит.

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

Важно понимать: код — это не то же самое, что внутренний идентификатор (GUID). Код виден пользователю и может повторяться в разных базах, а GUID — скрытый уникальный идентификатор, по которому платформа связывает объекты между собой. При обмене данными между базами сопоставление идет именно по GUID, а код служит ориентиром для человека.

Числовые и строковые коды: в чем разница

Тип кода задается в конфигураторе при проектировании справочника. Числовой код состоит только из цифр и автоматически дополняется ведущими нулями до заданной длины — например, «000000456». Строковый код может содержать буквы, дефисы и префиксы: «МО-00012», «УТ-003456».

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

ПараметрЧисловой кодСтроковый код
ФорматТолько цифры, ведущие нулиЦифры, буквы, дефисы
ПрефиксНе поддерживаетсяПоддерживается
СортировкаСтрого по возрастаниюПо алфавиту, может отличаться от числовой
Типичное применениеОдна база, простой учетОбмены, филиалы, интеграции

Префиксы кодов и зачем они нужны

Префикс — это буквенное или цифровое обозначение, добавляемое перед номером: «БП-000045», «ЦБ-12». Он показывает, в какой базе или организации создан объект. Без префиксов при обмене данными между двумя базами обе создали бы элементы с одинаковыми кодами, и возник бы конфликт нумерации.

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

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

Почему нумерация кодов «сбивается»

Частая жалоба пользователей: коды идут не по порядку, появляются пропуски или странные значения вроде «00000АБВ». Причин несколько, и большинство из них — нормальное поведение программы, а не сбой.

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

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

Типичные ошибки
01
Ручное изменение кодов ради красивой нумерации — ломает автонумерацию и сбивает поиск
02
Удаление «неправильных» элементов вместо пометки на удаление — коды теряются, а ссылки в документах превращаются в битые
03
Перенумерация справочника обработкой без проверки — коды в уже распечатанных документах перестают совпадать с базой
04
Игнорирование префиксов при настройке обмена — конфликты номеров и дубли элементов в обеих базах

Программный код: что значит «в коде» для разработчика

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

Встроенный язык 1С использует русские ключевые слова: Если ... Тогда ... КонецЕсли;, Для Каждого ... Из ... Цикл, Процедура, Функция. Пример простого фрагмента:

Функция ПолучитьСкидку(СуммаПокупки)

Если СуммаПокупки > 100000 Тогда

Возврат 10;

Иначе

Возврат 0;

КонецЕсли;

КонецФункции

Читается это буквально: функция принимает сумму покупки, и если она больше 100 000, возвращает скидку 10, иначе — 0. Даже без опыта программирования большинство конструкций встроенного языка понятны по смыслу — это сделано намеренно, чтобы код могли читать аналитики и продвинутые пользователи.

bsl
Процедура ПриЗаписи(Отказ)
	Если Не ЗначениеЗаполнено(Контрагент) Тогда
		Сообщить("Не заполнен контрагент");
		Отказ = Истина;
	КонецЕсли;
КонецПроцедуры

Где искать код, который вызвал ошибку

Когда 1С показывает ошибку вроде «Ошибка при вызове метода контекста», в сообщении обычно указано место: имя модуля и строка. Например: {ОбщийМодуль.РасчетЦен.Модуль(45)}: Ошибка при вызове метода контекста (Записать). Это значит: общий модуль «РасчетЦен», строка 45.

Чтобы посмотреть это место, откройте конфигуратор, найдите указанный модуль через дерево конфигурации и перейдите к строке (Ctrl+G или Ctrl+L). Если конфигурация на поддержке без возможности изменения, код все равно доступен для просмотра — читать можно, менять нельзя.

Порядок действий при ошибке в коде
  1. 1
    Скопируйте полный текст ошибки, включая имя модуля и номер строки
  2. 2
    Откройте конфигуратор и найдите указанный модуль в дереве конфигурации
  3. 3
    Перейдите к строке ошибки через Ctrl+G
  4. 4
    Прочитайте фрагмент кода выше и ниже строки — обычно причина в данных, которые обрабатывает этот код
  5. 5
    Если конфигурация типовая и не менялась — проверьте вводимые данные; если дорабатывалась — передайте текст ошибки разработчику

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

Как отличить проблему в коде от проблемы в данных

Большинство ошибок, которые пользователи принимают за «глюк программы», на деле связаны с данными: незаполненный реквизит, удаленный элемент, на который ссылается документ, дубли в справочнике. Код при этом работает правильно — он просто не рассчитан на такую ситуацию.

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

Маршрут решения

Как выбрать действие

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

Что важно запомнить

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

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

Можно ли вручную изменить код элемента справочника?

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

Почему у двух разных контрагентов одинаковый код?

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

Что означает запись вида «Модуль(45)» в тексте ошибки?

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

Нужно ли знать программирование, чтобы работать в 1С?

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

Куда пропадают номера при пропусках в нумерации?

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

Чем код отличается от артикула номенклатуры?

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