Как правильно хранить нестандартные идентификаторы и изменять реквизиты в 1С, не нарушая работу расширений?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Рассмотрим ситуацию, когда возникает потребность увеличить длину поля ИНН с привычных 10 или 12 символов до 18. Автор темы на форуме столкнулся с тем, что после такого изменения, сделанного напрямую в конфигурации, все подключенные расширения, которые использовали или заимствовали реквизит ИНН, перестали корректно функционировать. Это создает проблему постоянной переработки и адаптации расширений при каждом обновлении, что крайне неэффективно и трудозатратно.

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

Почему изменение стандартного реквизита ИНН – плохое решение?

Прежде чем углубляться в методы решения проблемы, давайте выясним, почему изменение длины стандартного реквизита ИНН является архитектурно неверным подходом и приводит к описанным сложностям. Необходимо понимать, что стандартные конфигурации 1С разработаны с учетом законодательных требований и бизнес-практик, и их структура имеет глубокие внутренние связи.

  1. Несоответствие стандартным требованиям к ИНН:

    Для начала, давайте вспомним, что такое ИНН в контексте российского законодательства:

    • Российский ИНН для физических лиц (включая ИП): Состоит из 12 цифр. Его структура строго регламентирована и включает код субъекта РФ, номер налоговой инспекции, порядковый номер записи и контрольные цифры.
    • Российский ИНН для юридических лиц: Состоит из 10 цифр. Аналогично, имеет строгую структуру с кодом субъекта, номером инспекции и контрольной цифрой.
    • ИНН иностранных организаций, состоящих на учете в РФ: Начиная с 1 января 2005 года, таким организациям присваивается российский ИНН, который всегда начинается с «9909». Он также имеет фиксированную длину 10 символов.

    Таким образом, потребность в ИНН длиной 18 символов не соответствует ни одному из стандартных российских форматов ИНН. Если такая потребность возникла, это почти всегда означает, что под видом «ИНН» пытаются хранить какой-то другой идентификационный номер, например, налоговый номер контрагента из другой страны, который может быть буквенно-цифровым и иметь значительно большую длину.

  2. Нарушение принципа открытости/закрытости (Open/Closed Principle):

    В разработке программного обеспечения существует важный принцип, известный как Принцип открытости/закрытости (Open/Closed Principle). Он гласит, что программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения, но закрыты для модификации. Применительно к 1С, это означает, что вы должны иметь возможность добавлять новый функционал (расширять систему) без изменения существующего, проверенного и поддерживаемого функционала (модификации типовой конфигурации). Прямое изменение длины стандартного реквизита — это явное нарушение этого принципа. Вы изменяете то, что должно быть закрыто, и это неизбежно порождает каскад проблем.

  3. Проблемы с обновлениями конфигурации:

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

  4. Нарушение логики типовых проверок и сервисов:

    В конфигурациях 1С существуют встроенные механизмы проверки ИНН (например, по контрольным цифрам), интеграции с внешними сервисами ФНС, а также логика формирования регламентированной отчетности. Изменение длины поля ИНН может привести к некорректной работе этих механизмов, так как они ожидают стандартный формат. В результате, пользователь может столкнуться с ошибками при заполнении документов, отправке отчетности или использовании онлайн-проверок.

  5. Проблемы с интеграциями и обменами данными:

    Если ваша система 1С интегрирована с другими информационными системами (банками, ЭДО, CRM и т.д.), то изменение формата ИНН может нарушить эти интеграции. Внешние системы ожидают определенный формат данных, и расхождение в длине или типе ИНН потребует доработки всех смежных систем, что является крайне нежелательным и дорогостоящим.

Последствия изменения ИНН для расширений

Основная проблема, с которой столкнулся автор темы, — это «слет» расширений после изменения длины реквизита ИНН. Давайте разберем, почему это происходит и как платформа 1С обрабатывает такие ситуации.

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

Когда вы изменяете длину реквизита ИНН непосредственно в основной конфигурации, расширения, которые заимствовали этот реквизит, могут столкнуться с несколькими проблемами:

  1. Несоответствие метаданных: Расширение ожидает, что заимствованный реквизит будет иметь определенный тип и длину. Если эти параметры в основной конфигурации изменились, возникает несоответствие. Платформа может обнаружить это несоответствие при подключении расширения или при попытке обращения к данным через расширение. В результате, расширение может быть отключено, перестать загружаться или выдавать ошибки в режиме 1С:Предприятие.
  2. Ошибки времени исполнения: Даже если расширение не «слетело» полностью, попытки записи или чтения данных через заимствованный реквизит с новой длиной могут привести к ошибкам. Например, если код расширения пытается записать строку определенной длины в поле, которое теперь стало короче, это вызовет исключение. Или, наоборот, если ожидается короткая строка, а приходит длинная, это может привести к некорректной обработке или усечению данных.
  3. Проблема актуальности расширений: Если расширения были разработаны до изменения длины ИНН, они не «знают» об этом изменении. Каждое такое расширение придется открывать в конфигураторе, заново заимствовать реквизит (чтобы обновились его метаданные в расширении) и пересохранять. Это именно та трудоемкая операция, от которой автор темы пытался уйти.

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

Решение 1: Используем стандартные поля для иностранных контрагентов

Если причина увеличения длины поля ИНН связана с необходимостью учета налоговых идентификаторов иностранных контрагентов, то в большинстве типовых конфигураций 1С (таких как 1С:Бухгалтерия 8 (редакция 3.0), 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP Управление предприятием, и даже 1С:Управление нашей фирмой (УНФ)) уже предусмотрены специальные поля для этой цели. Использование этих полей является наиболее правильным и наименее болезненным способом решения данной задачи.

Рассмотрим, как найти и использовать эти поля в карточке контрагента:

  1. Откроем карточку контрагента: Перейдем в раздел Справочники или НСИ и администрирование, найдем пункт Контрагенты и откроем нужную карточку контрагента.
  2. Укажем страну регистрации: Для иностранного контрагента критически важно правильно указать его Страну регистрации. Обычно это поле находится на основной вкладке карточки контрагента или в разделе с общими сведениями. При выборе страны, отличной от «Россия», система автоматически адаптирует интерфейс и ожидает ввод иностранных идентификаторов.
  3. Заполним специальные поля: После указания иностранной страны регистрации, в карточке контрагента появятся или станут доступными поля, предназначенные для иностранных идентификаторов. К таким полям относятся:
    • Налоговый номер: Это поле предназначено для хранения кода налогоплательщика, присвоенного иностранной организации в стране ее регистрации. Именно сюда следует вводить нестандартные идентификаторы длиной до 18 символов, содержащие буквы и цифры. Длина этого поля в типовых конфигурациях обычно достаточна для большинства международных стандартов.
    • Регистрационный номер: Это дополнительное поле, которое может использоваться для хранения других регистрационных номеров, присвоенных иностранной организации в ее стране (например, номер в торговом реестре).
    • ИНН (если состоит на учете в РФ): Если иностранная компания состоит на учете в российской ФНС, ей также будет присвоен российский ИНН (начинающийся с «9909» и имеющий 10 символов), который вводится в стандартное поле ИНН. Однако, это отдельный случай и не должен путаться с основным налоговым номером в стране регистрации.

Преимущества использования стандартных полей для иностранных контрагентов:

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

Решение 2: Создаем дополнительные реквизиты

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

Это идеальное решение, когда:

Рассмотрим пошагово процесс создания и использования дополнительного реквизита:

  1. Перейдем в раздел Администрирование: Запустите 1С:Предприятие в режиме пользователя. Перейдите в раздел Администрирование.
  2. Откроем Общие настройки: В разделе Администрирование найдите пункт Общие настройки и перейдите в него.
  3. Найдем Дополнительные реквизиты и сведения: В Общих настройках вы увидите подраздел Дополнительные реквизиты и сведения. Установите флажок Использовать дополнительные реквизиты и сведения, если он еще не установлен. Затем перейдите по ссылке Дополнительные реквизиты.
  4. Создадим новый дополнительный реквизит:

    В открывшемся списке дополнительных реквизитов нажмите кнопку Создать.

    Вам будет предложено выбрать, для какого объекта вы создаете реквизит. Например, если это идентификатор контрагента, выберите Справочник "Контрагенты". Если это номер для документа, выберите соответствующий документ.

    Далее откроется форма создания реквизита, где необходимо заполнить следующие поля:

    • Наименование: Придумайте понятное и однозначное наименование, например, «Налоговый номер (иностранный)» или «Дополнительный ИНН».
    • Тип значения: Выберите подходящий тип. В случае с длинным ИНН, содержащим буквы, это будет Строка.
    • Длина строки: Укажите необходимую длину, например, 18. Также можно указать Допустимая длина и Минимальная длина, если это требуется.
    • Подсказка: Добавьте краткое описание, которое будет видно пользователям.
    • Обязательное заполнение: Установите флажок, если это поле должно быть заполнено всегда.

    Сохраните новый реквизит. Он автоматически появится в карточках выбранного объекта (например, контрагента) на вкладке Дополнительные реквизиты.

  5. Перенос существующих данных (при необходимости):

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

    Для этого:

    1. Перейдите в раздел Администрирование -> Обслуживание -> Корректировка данных -> Групповое изменение реквизитов.
    2. Выберите объект, для которого вы создали дополнительный реквизит (например, Справочники -> Контрагенты).
    3. Настройте отбор, если нужно изменить реквизиты только у определенных элементов.
    4. В табличной части Изменяемые реквизиты добавьте ваш новый дополнительный реквизит и укажите, какое значение в него нужно установить (например, можно использовать формулу для переноса данных из старого поля, если это возможно, или заполнить вручную).
    5. Нажмите Изменить реквизиты.

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

Преимущества использования дополнительных реквизитов:

Заключение

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

Мы настоятельно рекомендуем использовать более правильные и гибкие решения для учета нестандартных идентификаторов:

  1. Используйте предусмотренные в типовых конфигурациях поля для иностранных контрагентов, такие как НалоговыйНомер и РегистрационныйНомер. Эти поля специально разработаны для подобных целей и гарантируют стабильность работы системы.
  2. Создавайте собственные дополнительные реквизиты для хранения специфической информации, которая не укладывается в стандартные поля. Механизм дополнительных реквизитов является мощным инструментом для расширения функционала без вмешательства в типовую конфигурацию.

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

← На главную