Почему не заполняется колонка «Счет учета» для услуг в документе «Отчет о розничных продажах» и как это исправить?

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

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

Суть проблемы: видимость и реальность

Давайте проанализируем ситуацию. Когда бухгалтер создает номенклатуру вручную в интерфейсе программы, он выбирает «Вид номенклатуры» (например, «Услуга»). В этот момент срабатывают встроенные обработчики событий формы, которые «под капотом» заполняют множество скрытых реквизитов. Однако при программном создании объекта через код (например, при загрузке из внешнего файла или через API) эти обработчики формы не запускаются.

В конфигурации 1С:Бухгалтерия 3.0 за поведение номенклатуры отвечает не только ссылка на ВидНоменклатуры, но и скрытый булев реквизит Услуга. Если этот флаг равен Ложь, система считает позицию материальным товаром. Для товаров проверка счета учета обязательна (например, счет 41.01), так как программа должна знать, с какого счета списывать остатки. Если же Услуга равна Истина, алгоритм проведения меняется, и счета учета либо подставляются по умолчанию (90-е счета), либо игнорируются в зависимости от настроек.

Причина ошибки при программной загрузке

Рассмотрим подробнее, что происходит в коде. Программист обычно пишет что-то вроде:


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

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

Решение №1: Исправление существующей номенклатуры

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

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

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

Решение №2: Правильное программное создание объектов

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

Посмотрим на пример правильного заполнения объекта:


НовыйОбъект = Справочники.Номенклатура.СоздатьЭлемент();
НовыйОбъект.Наименование = "Один час работ";
НовыйОбъект.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Услуги");

// Обязательно устанавливаем флаг Услуга!
НовыйОбъект.Услуга = Истина;

// Также рекомендуется заполнить другие связанные параметры
// через типовой метод модуля менеджера (если доступен)
// или установить их вручную:
НовыйОбъект.СтатьяЗатрат = Справочники.СтатьиЗатрат.ПустаяСсылка();
НовыйОбъект.НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Основная номенклатурная группа");

НовыйОбъект.Записать();

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

Решение №3: Заполнение счетов учета в самом документе

Иногда счета учета не заполняются даже для корректно созданных услуг. Это происходит, когда в регистре сведений «Счета учета номенклатуры» нет соответствующей записи. Программа ищет счета по цепочке приоритетов:

  1. Конкретная номенклатурная позиция.
  2. Группа номенклатуры (папка).
  3. Вид номенклатуры.
  4. Общая запись для всей номенклатуры (с пустыми полями отбора).

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


НоваяСтрока = ОбъектДокумент.Товары.Добавить();
НоваяСтрока.Номенклатура = СсылкаНаУслугу;
НоваяСтрока.Количество = 1;
НоваяСтрока.Цена = 1000;
НоваяСтрока.Сумма = 1000;

// Вызываем заполнение счетов учета по правилам регистра
ПараметрыЗаполнения = Новый Структура("Номенклатура, Склад, ТипСклада", 
    НоваяСтрока.Номенклатура, 
    ОбъектДокумент.Склад, 
    ОбъектДокумент.Склад.ТипСклада);
    
// Используем типовой механизм для заполнения счетов в строке
СчетаУчетаВДокументах.ЗаполнитьСтроку(НоваяСтрока, ПараметрыЗаполнения);

Метод СчетаУчетаВДокументах.ЗаполнитьСтроку проанализирует вид номенклатуры и настройки регистра. Если это услуга и для нее в регистре прописан счет 90.01 (Выручка), он подставится в нужную колонку. Если колонка скрыта в интерфейсе, она все равно должна быть заполнена программно для успешного проведения.

Настройка видимости для диагностики

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

Перейдите в Главное — Настройки — Параметры учета — Настройки счетов учета. Установите флаг «Показывать счета учета в документах». Теперь в «Отчете о розничных продажах» появится колонка со счетами, и вы сразу увидите пустые ячейки, которые блокируют проведение.

Резюме для разработчика

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

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

← На главную