Почему в 1С:Бухгалтерия 8.3 базовая при проведении документов возникает ошибка «Для организации не заполнена учетная политика» и как ее исправить?

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

При переносе данных между различными конфигурациями 1С специалисты часто сталкиваются со скрытыми особенностями поведения систем. Одной из классических проблем является перенос документов (например, документов поступления или реализации) из сторонних баз, таких как «1С:Управление торговлей 10.2» (УТ), в базовую версию «1С:Бухгалтерия 8.3» (БП). При попытке провести загруженные документы программа выдает критические ошибки:

«Для организации на [Период] не заполнена учетная политика»

«Для организации на [Период] не задана система налогообложения»

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

Выясняем причину: особенности базовой версии «1С:Бухгалтерия»

Для того чтобы понять природу этой ошибки, проанализируем архитектуру базовой версии конфигурации «1С:Бухгалтерия 8.3». Ключевое ограничение базовой версии заключается в том, что в одной информационной базе разрешено вести учет только по одной-единственной организации. Разработчики фирмы 1С оптимизировали интерфейс под это ограничение:

  1. Если в справочнике Организации присутствует только один элемент, система автоматически скрывает поле Организация на формах всех документов и отчетов.
  2. Это поле невозможно вывести на экран стандартными средствами настройки интерфейса через меню «Изменить форму», так как видимость управляется программно на уровне платформы и кода конфигурации.
  3. При создании документа пользователем вручную (интерактивно), система автоматически заполняет скрытый реквизит Организация ссылкой на ту самую единственную организацию, которая создана в справочнике. Происходит это при создании нового объекта на сервере.
  4. При программной загрузке документов (например, через внешнюю обработку, COM-соединение или XML-файл обмена с помощью «Конвертации данных 2.1»), интерактивные механизмы заполнения форм не срабатывают. Объект записывается непосредственно в базу данных. Если в правилах конвертации не было настроено жесткое сопоставление или заполнение организации, этот реквизит в перенесенном документе остается пустым (содержит значение Битые ссылки или ПустаяСсылка).

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

Анализ кода конфигурации и работы функциональных опций

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


Функция Существует(Организация, Период, ВыводитьСообщениеОбОтсутствииУчетнойПолитики = Ложь, ДокументСсылка = Неопределено) Экспорт
    
    СпособОценкиТоваровВРознице = ПолучитьФункциональнуюОпцию("СпособОценкиТоваровВРознице", 
        Новый Структура("Организация, Период", Организация, НачалоМесяца(Период)));
        
    УчетнаяПолитикаСуществует = НЕ (СпособОценкиТоваровВРознице = Ложь);
    
    Если НЕ УчетнаяПолитикаСуществует И ВыводитьСообщениеОбОтсутствииУчетнойПолитики = Истина Тогда
        ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
            НСтр("ru='Для организации %1 на %2 не заполнена учетная политика.'"),
            Организация,
            Формат(НачалоМесяца(Период), "ДФ='MMMM yyyy'"));
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ДокументСсылка, , "Объект");
    КонецЕсли;
    
    СистемаНалогообложения = ПолучитьФункциональнуюОпцию("СистемаНалогообложения", 
        Новый Структура("Организация, Период", Организация, НачалоМесяца(Период)));
    
    НалоговыеНастройкиСуществуют = НЕ (СистемаНалогообложения = Ложь);
    
    Если НЕ НалоговыеНастройкиСуществуют И ВыводитьСообщениеОбОтсутствииУчетнойПолитики = Истина Тогда
        ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
            НСтр("ru='Для организации %1 на %2 не задана система налогообложения.'"),
            Организация,
            Формат(НачалоМесяца(Период), "ДФ='MMMM yyyy'"));
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ДокументСсылка, , "Объект");
    КонецЕсли;
    
    Возврат УчетнаяПолитикаСуществует И НалоговыеНастройкиСуществуют;
КонецФункции

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

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

Способ 1. Быстрое исправление загруженных документов в текущей базе

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

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

Способ 2. Корректировка правил обмена в «Конвертации данных 2.1»

Чтобы избежать повторения этой ситуации при последующих загрузках данных, необходимо внести изменения в правила обмена данными (XML-правила), созданные в специализированной конфигурации «Конвертация данных 2.1». Разберем два варианта настройки.

Вариант А. Настройка правильного сопоставления организации

Часто проблема кроется в том, что в правилах конвертации объектов (ПКО) для справочника Организации настроен поиск только по внутреннему идентификатору (GUID). Поскольку в базе-источнике (УТ 10.2) и базе-приемнике (БП 8.3) организации создавались независимо, их уникальные идентификаторы не совпадают. Система при загрузке документа пытается найти организацию по старому GUID, не находит её, в результате чего реквизит документа очищается или заполняется «битой» ссылкой.

Для исправления этого поведения выполните следующие настройки в «Конвертации данных 2.1»:

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

Вариант Б. Принудительное заполнение организации кодом при загрузке

Если вы хотите гарантировать стопроцентное заполнение организации в документах-приемниках (независимо от того, как сопоставляются справочники организаций), лучшим решением будет написание небольшого программного алгоритма в обработчиках событий «Конвертации данных».

Мы можем использовать событие ПриЗагрузке или ПередЗагрузкой на уровне ПКО соответствующих документов. Проанализируем пример кода, который выполняет поиск единственной организации в базе-приемнике и жестко подставляет её в документ, если поле осталось незаполненным:


Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
    // Инициализируем выборку справочника Организации
    ВыборкаОрганизаций = Справочники.Организации.Выбрать();
    
    // Получаем первый (и единственный в базовой версии) элемент
    Если ВыборкаОрганизаций.Следующий() Тогда
        Объект.Организация = ВыборкаОрганизаций.Ссылка;
    КонецЕсли;
КонецЕсли;

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

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

← На главную