При работе в конфигурации «1С:Бухгалтерия предприятия» (редакция 3.0) пользователи и разработчики часто сталкиваются с ситуацией, когда система блокирует сохранение элемента справочника Контрагенты из-за незаполненного поля КПП. Рассмотрим подробнее, почему возникает эта проверка, на каких уровнях программы она выполняется и какими способами можно сохранить элемент без указания КПП.
Прежде чем изменять код программы или прибегать к техническим ухищрениям, проанализируем хозяйственную суть контрагента. В российском законодательстве и в типовой конфигурации 1С предусмотрены случаи, когда код причины постановки на учет (КПП) физически отсутствует:
Разберем по шагам, на каких уровнях архитектуры 1С выполняет валидацию реквизитов:
ОбработкаПроверкиЗаполненияНаСервере, а также при вызове специализированных процедур проверки дублей, таких как ПроверитьИННКППДубли. Также проверка может быть включена в свойствах самого реквизита формы (свойство «АвтоОтметкаНезаполненного»).Записать() платформа выполняет системную процедуру ОбработкаПроверкиЗаполнения. В ней формируется массив ПроверяемыеРеквизиты, куда по умолчанию добавляются обязательные для заполнения поля.Разберем несколько способов сохранения контрагента без КПП — от программных методов до настройки конфигурации.
1. Программная запись объекта
Если требуется записать контрагента из внешнего источника или обработкой, можно выполнить запись объекта программно. В этом случае проверка формы не срабатывает. При необходимости перед вызовом метода Записать() можно отключить системную проверку заполнения:
ОбъектКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
ОбъектКонтрагент.Наименование = "ООО Ромашка";
ОбъектКонтрагент.ИНН = "7701234567";
ОбъектКонтрагент.КПП = "";
// Запись без проверки заполнения обязательных реквизитов
ОбъектКонтрагент.Записать(РежимЗаписиДокумента.Запись, РежимПроведенияДокумента.НеПроводить);
2. Использование временного значения при создании
Один из обходных вариантов, применяемый разработчиками, заключается в установке условного значения КПП в момент редактирования формы и очистке реквизита непосредственно перед записью в модуле объекта:
Процедура ПередЗаписью(Отказ, РежимЗаписи)
// Если выполняются особые условия, очищаем КПП перед сохранением в БД
Если ЭтоОсобыйКонтрагент Тогда
ЭтотОбъект.КПП = "";
КонецЕсли;
КонецПроцедуры
3. Отмена проверки через расширение конфигурации
Наиболее корректный способ изменения логики для российских юридических лиц без снятия конфигурации с поддержки — использование расширения. Посмотрим, как исключить реквизит из списка проверяемых в процедуре ОбработкаПроверкиЗаполнения:
&Вместо("ОбработкаПроверкиЗаполнения")
Процедура Расш_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
ПродолжитьВызов(Отказ, ПроверяемыеРеквизиты);
ИндексКПП = ПроверяемыеРеквизиты.Найти("КПП");
Если ИндексКПП <> Неопределено Тогда
ПроверяемыеРеквизиты.Удалить(ИндексКПП);
КонецЕсли;
КонецПроцедуры
4. Отключение сервиса автоматической проверки контрагентов
Если блокировка происходит из-за проверки по базе ФНС, её можно отключить в пользовательском режиме. Для этого перейдите в раздел Администрирование > Интернет-поддержка и сервисы > Проверка контрагентов и снимите флаг Автоматически проверять контрагентов по ЕГРН.
Обратите внимание на риски, возникающие при сохранении юридического лица без КПП: