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