При работе в конфигурации «1С:Управление нашей фирмой» (УНФ) пользователи часто сталкиваются с ситуацией, когда при попытке сохранить изменения в карточке контрагента система выдает системную ошибку: «Обновление ИНН подчиненного контрагента завершилось с ошибкой». При этом поле с номером ИНН становится серым и недоступным для редактирования, даже если изначально никакой иерархии в справочнике не планировалось. Разберем подробно, почему это происходит и как исправить ситуацию, используя стандартные средства платформы 1С:Предприятие.
Для начала проанализируем внутреннюю логику системы. В конфигурациях на базе БСП (Библиотеки стандартных подсистем), к которым относится и УНФ, реализован механизм учета обособленных подразделений. Согласно правилам налогового учета, филиалы и подразделения имеют тот же ИНН, что и головная организация, но разные КПП.
В справочнике Контрагенты за это отвечает скрытый реквизит ГоловнойКонтрагент. Как только в этом поле появляется ссылка на другую карточку (другого контрагента), система автоматически включает следующий алгоритм:
Проблема заключается в том, что в УНФ связь «головной — подчиненный» часто устанавливается случайно, и визуально в интерфейсе ее бывает трудно обнаружить.
Рассмотрим подробнее, как контрагент может стать «подчиненным» без ведома пользователя:
ГоловнойКонтрагент может заполниться ошибочно, если в файле были дублирующиеся наименования.Прежде чем исправлять данные, нам нужно найти всех «виновников». Поскольку в стандартном интерфейсе УНФ поле головной организации часто скрыто, воспользуемся настройкой формы списка. Посмотрим, как это сделать:
Головной контрагент (или Головная организация) и поставить напротив него флажок.Если мы обнаружили, что реквизит ГоловнойКонтрагент заполнен ошибочно, мы не сможем просто очистить его в карточке, так как он может быть недоступен для редактирования в обычном режиме. Воспользуемся мощным инструментом — обработкой «Групповое изменение реквизитов».
Рассмотрим шаги по исправлению:
Контрагенты.Головной контрагент.После выполнения этих действий связь «голова — филиал» будет разорвана, поле ИНН снова станет доступным для редактирования, а ошибка при записи исчезнет.
В некоторых случаях ошибка может сохраняться даже после попытки изменения. Проанализируем ситуацию с точки зрения системного администратора:
Ограничения на уровне записей (RLS): Если в базе настроены профили групп доступа с ограничением по контрагентам, пользователь может иметь права на редактирование текущей карточки, но не иметь прав на «подчиненную» или «головную». При попытке каскадного обновления ИНН система натыкается на отказ в доступе к связанному объекту и выдает ошибку. В этом случае операцию по очистке реквизитов должен выполнять пользователь с полными правами.
Циклические ссылки: Иногда возникает логическая ошибка, когда контрагент А ссылается на контрагента Б как на головного, а Б в свою очередь ссылается на А. Такую ситуацию можно исправить только программно или через вышеупомянутую групповую обработку, очистив поле у обоих участников цикла.
Посмотрим на пример того, как программно (через консоль кода) можно проверить наличие таких связей у объекта:
// Проверка наличия подчиненных контрагентов
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ГоловнойКонтрагент = &ТекущийКонтрагент";
Запрос.УстановитьПараметр("ТекущийКонтрагент", Объект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Сообщить("Внимание! У данного контрагента есть подчиненные подразделения.");
КонецЕсли;
Чтобы избежать повторного появления ошибки «Обновление ИНН подчиненного контрагента завершилось с ошибкой», рекомендуем выполнить следующие настройки:
Контрагенты с фильтром по заполненному полю Головной контрагент, чтобы своевременно выявлять ошибочные связи до того, как они приведут к сбоям при записи документов.Таким образом, мы выяснили, что данная проблема является следствием жесткой иерархической логики справочника контрагентов. Использование штатной обработки Групповое изменение реквизитов с включенными служебными реквизитами является самым быстрым и безопасным способом восстановления работоспособности базы данных.