Как найти и исправить документы с отрицательными остатками и отсутствующими суммовыми списаниями в 1С:УПП и КА 1.1?

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

При регулярном переносе документов из внешних учетных систем (например, Альфа-Авто) в конфигурации 1С:Управление производственным предприятием (УПП) или 1С:Комплексная автоматизация 1.1 (КА 1.1) бухгалтеры нередко сталкиваются с ситуацией, когда по результатам закрытия месяца и расчета себестоимости в расходных документах отсутствуют проводки по списанию стоимости товаров. Разберем подробно, почему это происходит, как штатно выявить такие документы и как правильно организовать контроль остатков при автоматическом обмене данными.

Почему не формируются суммовые проводки при списании

Выясним причину отсутствия суммовых списаний в зависимости от применяемого в учетной политике режима учета затрат:

  1. Партионный учет: если опция «Списывать партии при проведении документов» отключена или документ проводится задним числом с отрицательным остатком, партия списания не находится. При выполнении регламентной обработки «Проведение по партиям» строки с нехваткой либо пропускаются (формируя количественное движение без суммы), либо останавливают весь процесс проведения.
  2. Расширенная аналитика учета затрат (РАУЗ): документы списания в течение месяца делают только количественные движения по регистрам затрат. Расчет стоимости выполняется в конце месяца документом Расчет себестоимости выпуска. Если на момент списания или на конец месяца по позиции образовался отрицательный остаток (или нарушилась аналитика: склад, номенклатурная группа, статус партии), СЛАУ (система линейных алгебраических уравнений) не может вычислить средневзвешенную стоимость, и сумма списания остается нулевой.

Особенности контроля остатков при обмене и неоперативном проведении

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

  1. Режим загрузки данных: при типовом обмене выставляется свойство объекта ОбменДанными.Загрузка = Истина. В этом режиме платформа отключает исполнение большинства проверок в модулях объектов, а также блокирует интерактивный вывод сообщений пользователю.
  2. Неоперативное проведение: проведение документов «задним числом» (не в текущую точку актуальности) в типовых решениях УПП и КА 1.1 по умолчанию не выполняет жесткий контроль остатков на текущий момент, так как наличие остатка на прошлую дату не гарантирует корректности остатков в будущем.
  3. Очередность документов: если при загрузке реализация загрузилась и провелась раньше приходной накладной за тот же день, возникает временный отрицательный остаток, который исчезает после полной загрузки всех документов.

Штатные способы выявления недостающих списаний и отрицательных остатков

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

Для партионного учета:

  1. Открываем отчет Ведомость по партиям товаров на складах.
  2. В настройках отчета устанавливаем группировку по колонкам: Номенклатура, Склад, Документ движения (регистратор).
  3. В разделе отборов задаем условие: Количество (Расход) > 0 И Стоимость (Расход) = 0 — это позволит вывести все документы, где товар списан количественно, но сумма себестоимости не рассчитана.
  4. Для контроля образовавшихся минусов формируем этот же отчет с отбором Количество (Конечный остаток) < 0.

Для режима РАУЗ:

  1. Формируем отчет Ведомость по учету затрат по регистру накопления «Учет затрат (бухгалтерский и налоговый учет)».
  2. Устанавливаем группировки: Аналитика вида учета, Номенклатура, Документ движения.
  3. Устанавливаем отбор по условию отсутствия суммового расхода при наличии количественного: Количество (Расход) > 0 И Стоимость (Расход) = 0 после проведенного расчета себестоимости.
  4. Также проверяем конечные остатки на наличие отрицательных значений: Количество (Конечный остаток) < 0.

Оптимальный алгоритм контроля остатков при программном обмене

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

Разберем по шагам правильную организацию процесса:

  1. Загружаем весь пакет документов с флагом ОбменДанными.Загрузка = Истина, фиксируя ссылки на проведенные документы и список затронутой номенклатуры в отдельный массив.
  2. Упорядочиваем время документов: устанавливаем время приходных документов на начало дня (например, 00:00:01), а расходных — на вторую половину дня.
  3. После завершения полной загрузки выполняем единую пакетную проверку остатков по измененным позициям с помощью запроса к виртуальной таблице остатков регистра накопления.

Посмотрим на пример кода постобменной проверки остатков:


// Формируем список измененной номенклатуры и проверяем остатки на момент документов
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ТаблицаДокументов.Ссылка КАК Документ,
    |	ТаблицаДокументов.Дата КАК Период,
    |	ТаблицаТоваров.Номенклатура КАК Номенклатура,
    |	ТаблицаТоваров.Склад КАК Склад,
    |	ТаблицаТоваров.Количество КАК Количество
    |ПОМЕСТИТЬ ВТ_ТоварыКПроверке
    |ИЗ
    |	Документ.РеализацияТоваровУслуг.Товары КАК ТаблицаТоваров
    |ГДЕ
    |	ТаблицаТоваров.Ссылка В(&МассивЗагруженныхДокументов)
    |;
    |
    |ВЫБРАТЬ
    |	ВТ.Документ,
    |	ВТ.Номенклатура,
    |	ВТ.Склад,
    |	ВТ.Количество КАК КоличествоВДокументе,
    |	ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК ОстатокНаСкладе
    |ИЗ
    |	ВТ_ТоварыКПроверке КАК ВТ
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ГраницаПроверки, 
    |		Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ ВТ_ТоварыКПроверке)) КАК ТоварыНаСкладахОстатки
    |	ПО ВТ.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    |	И ВТ.Склад = ТоварыНаСкладахОстатки.Склад
    |ГДЕ
    |	ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) < 0";

Запрос.УстановитьПараметр("МассивЗагруженныхДокументов", МассивЗагруженныхДокументов);
Запрос.УстановитьПараметр("ГраницаПроверки", Новый Граница(КонецДня(ТекущаяДата()), ВидГраницы.Включая));

РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить("Отрицательный остаток по номенклатуре: " + Выборка.Номенклатура + 
                 " на складе: " + Выборка.Склад + 
                 " в документе: " + Выборка.Документ);
    КонецЦикла;
КонецЕсли;

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

← На главную