При формировании оборотно-сальдовой ведомости по счету 10.11 («Специальная оснастка и специальная одежда в эксплуатации») разработчики и бухгалтеры нередко сталкиваются с ситуацией, когда по конкретной номенклатуре (например, спецодежде) числится количество при полностью нулевой сумме. Попытки программно найти и удалить проводки с нулевой суммой с помощью объекта Операция заканчиваются неудачей — код сообщает, что таких проводок попросту нет. Разберем по шагам, почему возникает эта учетная ситуация, какие ошибки допускаются в программном коде и как правильно закрыть зависшие количественные остатки.
Прежде чем пытаться корректировать учет программными методами, проанализируем методологию учета спецодежды и спецоснастки. Появление ситуации, при которой сумма равна нулю, а количество больше нуля, не является программным сбоем:
Таким образом, остаток образовался в результате разницы оборотов по разным проводкам, а проводок с нулевой суммой в базе может не быть вовсе.
Посмотрим на типичный ошибочный код, с помощью которого часто пытаются найти такие остатки:
Процедура Выполнить()
Опер = СоздатьОбъект("Операция");
Опер.ВыбратьОперацииСПроводками(НачДата1, КонДата1, "10.11",, ПланыСчетов.Основной);
Пока Опер.ПолучитьПроводку() = 1 Цикл
Если (Опер.Сумма = 0) Тогда
Сообщить(Опер.СуммаОперации);
Сообщить(Опер.Содержание);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
В этом фрагменте допущено сразу несколько фундаментальных ошибок платформы 1С:Предприятие 7.7:
ВыбратьОперацииСПроводками перебирает документы-операции. Для перемещения по выборке необходимо сначала вызывать метод ПолучитьОперацию(), и только затем внутри перебирать проводки, если они требуются.Сумма у проводки ничего не дает: проводка списания стоимости имела конкретную ненулевую сумму, а ввод в эксплуатацию содержал и сумму, и количество. Нулевым является конечное сальдо на счете, а не сумма отдельной хозяйственной операции.Операция нарушает ссылочную целостность базы: документ останется с пометкой проведения, но потеряет движения, а при первой же групповой перепроводке документов все движения восстановятся заново.Методически правильный способ избавиться от зависшего количественного остатка — зафиксировать физическое выбытие спецодежды типовыми средствами конфигурации. Если срок носки истек или вещь пришла в негодность, необходимо:
Если позиций много и необходимо выявить все объекты, у которых зависло количество без суммы, используем объект БухгалтерскиеИтоги. В отличие от перебора проводок, бухгалтерский запрос сразу возвращает агрегированные остатки на заданную дату с учетом всех субконто.
Рассмотрим пример кода для выборки зависших позиций:
Процедура НайтиОстаткиБезСуммы()
БИ = СоздатьОбъект("БухгалтерскиеИтоги");
// Включаем использование аналитики (субконто) по счету 10.11
БИ.ИспользоватьСубконто(ВидыСубконто.Материалы);
// Рассчитываем итоги на указанную дату
Если БИ.ВыполнитьЗапрос(НачДата, КонДата, "10.11") = 0 Тогда
Сообщить("Ошибка выполнения запроса по бухгалтерским итогам!");
Возврат;
КонецЕсли;
// Обходим субконто первого уровня (Материалы)
БИ.ВыбратьСубконто(1);
Пока БИ.ПолучитьСубконто(1) = 1 Цикл
// СКД("С") - суммовое дебетовое конечное сальдо
// СКД("К") - количественное дебетовое конечное сальдо
Если (БИ.СКД("С") = 0) И (БИ.СКД("К") > 0) Тогда
Сообщить("Материал: " + БИ.Субконто(1) + " | Остаток кол-во: " + БИ.СКД("К") + " шт. (Сумма = 0)");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Этот алгоритм позволяет точно выявить номенклатуру, требующую списания, независимо от того, какими именно документами производилось начисление износа в прошлом.
Если требуется закрыть остатки программно с помощью создания движений, правильным решением будет не удаление старых проводок, а создание компенсирующей записи. На основе выборки из бухгалтерских итогов создается документ ручного ввода или операция, формирующая кредитовое движение по счету 10.11:
Новая() объекта Операция."10.11" с заполнением всех необходимых субконто (номенклатура, материально ответственное лицо).Опер.Количество = НужноеКоличество), а поле суммы оставляем равным 0. Дебет проводки можно оставить пустым либо использовать забалансовый счет в зависимости от учетной политики организации.Записать().Такой подход полностью устраняет нулевое сальдо по счету 10.11, сохраняя при этом корректную историю движений и хронологию бухгалтерского учета.