Как опт нашёл 8 млн ₽ зависших остатков в 1С:УТ за 10 проверок

Коротко: Оптовая компания с оборотом 1,2 млрд ₽/год и складом 4500 SKU за 3 недели провела 10 типовых проверок остатков в 1С:Управление торговлей 11.5. Результат — обнаружено 8,2 млн ₽ зависших товаров: 3,1 млн ₽ неликвидов старше 18 месяцев, 1,8 млн ₽ пересортицы между характеристиками, 940 тыс. ₽ отрицательных остатков из-за нарушенной последовательности проведения и 2,4 млн ₽ ошибок в партионном учёте. Все запросы и алгоритмы — ниже.
Что за компания и почему «зависло» 8 миллионов?
Заказчик — региональный оптовик электротехники: 4 склада, 4500 номенклатурных позиций, ассортимент с характеристиками (цвет, сечение, длина бухты). Учёт — в 1С:Управление торговлей 11.5 КОРП, средний оборот склада 80–90 млн ₽/месяц. Поводом для аудита стало расхождение в инвентаризации: бухгалтерия видела одни цифры, кладовщики — другие, а отдел закупок жаловался, что система предлагает заказывать товар, который физически лежит на полках.
Первое подозрение пало на пользователей: «нарушают порядок ввода документов». Реальность оказалась сложнее — проблема накапливалась 3 года и включала ошибки методологии, неправильные настройки и человеческий фактор. Часть кейса касалась интеграции с 1С:Бухгалтерия на Кодерион, куда выгружались сводные остатки.
Цели аудита склада
- Найти все товары без движения более 12 месяцев
- Выявить отрицательные остатки и причины их появления
- Сверить количественный и суммовой учёт по партиям
- Обнаружить пересортицу по характеристикам
- Проверить корректность резервов и заказов
Проверка 1. Как найти товары без движения свыше 12 месяцев?
Это самый очевидный, но и самый болезненный отчёт. Запрос строится по регистру накопления «ТоварыНаСкладах» с фильтром по дате последнего движения. Важно: брать не дату последней записи, а дату последнего расхода — приходы могут быть свежими, но если товар не уходит, это неликвид.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.Характеристика КАК Характеристика,
| Остатки.Склад КАК Склад,
| Остатки.КоличествоОстаток КАК Количество,
| ЕСТЬNULL(ПоследнийРасход.ДатаРасхода, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаПоследнегоРасхода
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатков, ) КАК Остатки
| ЛЕВОЕ СОЕДИНЕНИЕ (
| ВЫБРАТЬ
| Движения.Номенклатура КАК Номенклатура,
| Движения.Характеристика КАК Характеристика,
| Движения.Склад КАК Склад,
| МАКСИМУМ(Движения.Период) КАК ДатаРасхода
| ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК Движения
| ГДЕ
| Движения.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| СГРУППИРОВАТЬ ПО
| Движения.Номенклатура, Движения.Характеристика, Движения.Склад
| ) КАК ПоследнийРасход
| ПО Остатки.Номенклатура = ПоследнийРасход.Номенклатура
| И Остатки.Характеристика = ПоследнийРасход.Характеристика
| И Остатки.Склад = ПоследнийРасход.Склад
|ГДЕ
| Остатки.КоличествоОстаток > 0
| И ЕСТЬNULL(ПоследнийРасход.ДатаРасхода, ДАТАВРЕМЯ(1, 1, 1)) < &ГраничнаяДата";
Запрос.УстановитьПараметр("ДатаОстатков", КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр("ГраничнаяДата", ДобавитьМесяц(ТекущаяДата(), -12));
Результат = Запрос.Выполнить().Выгрузить();На реальной базе запрос вернул 312 позиций общей стоимостью 3,1 млн ₽. Часть оказалась снятой с производства (списать), часть — сезонкой (передать в магазин с уценкой), часть — ошибкой закупа.
Проверка 2. Откуда берутся отрицательные остатки?
Отрицательные остатки — классика «непрослеженного» учёта. В УТ 11 есть штатный отчёт «Контроль отрицательных остатков», но он показывает текущее состояние. Нам нужны были все случаи за период с привязкой к документу.
ВЫБРАТЬ
ОстаткиИОбороты.Период КАК Период,
ОстаткиИОбороты.Регистратор КАК Документ,
ОстаткиИОбороты.Номенклатура КАК Номенклатура,
ОстаткиИОбороты.Склад КАК Склад,
ОстаткиИОбороты.КоличествоКонечныйОстаток КАК ОстатокПослеДокумента
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Регистратор, , ) КАК ОстаткиИОбороты
ГДЕ
ОстаткиИОбороты.КоличествоКонечныйОстаток < 0
УПОРЯДОЧИТЬ ПО
ПериодНашлось 47 случаев на 940 тыс. ₽. Причина в 90% — кладовщик проводил «Реализацию» раньше, чем «Поступление товаров». В УТ 11.5 настроили запрет проведения при отрицательных остатках на уровне профиля доступа и обучили операторов.
Сколько денег теряется на пересортице характеристик?
Самая хитрая проблема. Кабель ВВГнг 3×2,5 чёрный и серый — одна номенклатура с двумя характеристиками. Кладовщик при отгрузке часто не вглядывался, а в системе оказалось: серого в минусе 380 метров, чёрного в плюсе 420 метров. По бумаге — товар есть, по факту — нужного цвета нет.
ВЫБРАТЬ
Остатки.Номенклатура КАК Номенклатура,
СУММА(ВЫБОР КОГДА Остатки.КоличествоОстаток < 0 ТОГДА Остатки.КоличествоОстаток ИНАЧЕ 0 КОНЕЦ) КАК Минус,
СУММА(ВЫБОР КОГДА Остатки.КоличествоОстаток > 0 ТОГДА Остатки.КоличествоОстаток ИНАЧЕ 0 КОНЕЦ) КАК Плюс
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
СГРУППИРОВАТЬ ПО
Остатки.Номенклатура
ИМЕЮЩИЕ
СУММА(ВЫБОР КОГДА Остатки.КоличествоОстаток < 0 ТОГДА Остатки.КоличествоОстаток ИНАЧЕ 0 КОНЕЦ) < 0
И СУММА(ВЫБОР КОГДА Остатки.КоличествоОстаток > 0 ТОГДА Остатки.КоличествоОстаток ИНАЧЕ 0 КОНЕЦ) > 0Запрос показал 89 номенклатурных позиций с пересортицей характеристик. После физической инвентаризации провели документы «Пересортица товаров» — высвободилось 1,8 млн ₽ «фантомных» остатков.
Проверка 4. Как сверить количественный и суммовой учёт?
В УТ 11.5 партионный учёт ведётся в регистре «СебестоимостьТоваров». Разрыв между «ТоварыНаСкладах» (количество) и «СебестоимостьТоваров» (количество + сумма) — диагноз нарушенной последовательности.
ВЫБРАТЬ
ЕСТЬNULL(Склад.Номенклатура, Себестоимость.Номенклатура) КАК Номенклатура,
ЕСТЬNULL(Склад.КоличествоОстаток, 0) КАК КолВоНаСкладе,
ЕСТЬNULL(Себестоимость.КоличествоОстаток, 0) КАК КолВоВСебестоимости,
ЕСТЬNULL(Склад.КоличествоОстаток, 0) - ЕСТЬNULL(Себестоимость.КоличествоОстаток, 0) КАК Разница,
ЕСТЬNULL(Себестоимость.СтоимостьОстаток, 0) КАК Сумма
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК Склад
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.СебестоимостьТоваров.Остатки КАК Себестоимость
ПО Склад.Номенклатура = Себестоимость.Номенклатура
И Склад.Характеристика = Себестоимость.Характеристика
ГДЕ
ЕСТЬNULL(Склад.КоличествоОстаток, 0) <> ЕСТЬNULL(Себестоимость.КоличествоОстаток, 0)Расхождение нашлось по 156 позициям на 2,4 млн ₽. Восстановили последовательность партионного учёта через регламентное задание «Расчёт себестоимости» с пересчётом за 18 месяцев.
Проверка 5. Какие резервы «забыты» под старыми заказами?
Резервы под неактивные заказы клиентов — типичная история. Менеджер создал заказ, клиент пропал, отгрузки не было, но товар «висит» в резерве.
ВЫБРАТЬ
Резервы.ЗаказКлиента КАК Заказ,
Резервы.ЗаказКлиента.Дата КАК ДатаЗаказа,
Резервы.ЗаказКлиента.Партнер КАК Клиент,
Резервы.Номенклатура КАК Номенклатура,
Резервы.КоличествоОстаток КАК ВРезерве
ИЗ
РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК Резервы
ГДЕ
Резервы.ЗаказКлиента.Дата < &ГраничнаяДата
И Резервы.ЗаказКлиента.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовКлиентов.Закрыт)
УПОРЯДОЧИТЬ ПО
ДатаЗаказаПараметр «ГраничнаяДата» — 60 дней назад. Обнаружено 78 «зависших» заказов с резервами на 1,2 млн ₽. Менеджерам выставили задачу: либо актуализировать, либо отменить.
Проверка 6. Корректны ли цены поступления партий?
Иногда в документ «Поступление товаров и услуг» закрадываются нули или ошибочные цены — например, при загрузке из Excel или ЭДО. Это искажает себестоимость и финансовый результат. Если вы используете электронный документооборот, важно контролировать прайс автоматически.
ВЫБРАТЬ
Товары.Ссылка КАК Документ,
Товары.Ссылка.Дата КАК Дата,
Товары.Номенклатура КАК Номенклатура,
Товары.Количество КАК Количество,
Товары.Цена КАК Цена,
Товары.Сумма КАК Сумма
ИЗ
Документ.ПриобретениеТоваровУслуг.Товары КАК Товары
ГДЕ
Товары.Ссылка.Проведен
И (Товары.Цена = 0 ИЛИ Товары.Сумма = 0)
И Товары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериодаНашли 23 строки с нулевой ценой на 410 тыс. ₽ «потерянной» себестоимости. После корректировок прибыль за квартал увеличилась на 380 тыс. ₽ (после налогов).
Проверка 7. Не задвоились ли поступления по ЭДО?
В компаниях с активным ЭДО встречается двойное проведение: один и тот же УПД попал в базу и через ЭДО, и вручную.
ВЫБРАТЬ
Док.НомерВходящегоДокумента КАК Номер,
Док.ДатаВходящегоДокумента КАК Дата,
Док.Партнер КАК Поставщик,
КОЛИЧЕСТВО(Док.Ссылка) КАК КолВоДокументов,
СУММА(Док.СуммаДокумента) КАК ОбщаяСумма
ИЗ
Документ.ПриобретениеТоваровУслуг КАК Док
ГДЕ
Док.Проведен
СГРУППИРОВАТЬ ПО
Док.НомерВходящегоДокумента, Док.ДатаВходящегоДокумента, Док.Партнер
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Док.Ссылка) > 1Выявлено 4 пары дублей на 312 тыс. ₽. Все 4 удалены, остатки скорректированы, поставщику направлены акты сверки.
Проверка 8. Соответствуют ли единицы измерения упаковкам?
Кабель учитывается в метрах, но приходит бухтами по 100/200/500 м. Кладовщик при приёмке мог указать «1 шт» вместо «200 м» — формально количество есть, физически — путаница в коэффициентах.
ВЫБРАТЬ
Товары.Ссылка КАК Документ,
Товары.Номенклатура КАК Номенклатура,
Товары.Количество КАК Количество,
Товары.УпаковкаЕдиницаИзмерения КАК Упаковка,
Товары.Номенклатура.ЕдиницаИзмерения КАК БазоваяЕдиница,
Товары.Коэффициент КАК Коэффициент
ИЗ
Документ.ПриобретениеТоваровУслуг.Товары КАК Товары
ГДЕ
Товары.Коэффициент = 1
И Товары.УпаковкаЕдиницаИзмерения <> Товары.Номенклатура.ЕдиницаИзмерения57 строк подозрительных. После проверки 31 документ перепровели с правильными коэффициентами. Высвободилось около 280 тыс. ₽ «лишних» остатков.
Проверка 9. Где «потерялись» товары в пути?
Регистр «ТоварыВПути» хранит остатки между складами при перемещении. Если документ «Перемещение товаров» провели как «Отгрузка», а «Приёмку» забыли — товар висит «в пути» месяцами.
ВЫБРАТЬ
ТоварыВПути.ДокументПеремещения КАК Документ,
ТоварыВПути.ДокументПеремещения.Дата КАК Дата,
ТоварыВПути.Номенклатура КАК Номенклатура,
ТоварыВПути.КоличествоОстаток КАК Количество
ИЗ
РегистрНакопления.ТоварыВПутиНаСклады.Остатки КАК ТоварыВПути
ГДЕ
ТоварыВПути.ДокументПеремещения.Дата < ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, -14)Обнаружено 12 «зависших» перемещений на 540 тыс. ₽ — половина уже физически на складе-получателе, но в системе не оприходована. Сделали приёмки задним числом.
Проверка 10. Какие SKU имеют аномальную оборачиваемость?
Финальный комплексный отчёт: считаем коэффициент оборачиваемости (отношение продаж за период к среднему остатку). Низкие значения — кандидаты на распродажу, нулевые — кандидаты на списание.
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
СУММА(Продажи.КоличествоОборот) КАК ПродажиЗаПериод,
СУММА(Остатки.КоличествоОстаток) КАК ТекущийОстаток,
ВЫБОР
КОГДА СУММА(Остатки.КоличествоОстаток) = 0 ТОГДА 0
ИНАЧЕ СУММА(Продажи.КоличествоОборот) / СУММА(Остатки.КоличествоОстаток)
КОНЕЦ КАК Оборачиваемость
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоГода, &КонецПериода, , ) КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&КонецПериода, ) КАК Остатки
ПО Продажи.Номенклатура = Остатки.Номенклатура
СГРУППИРОВАТЬ ПО
Продажи.Номенклатура
УПОРЯДОЧИТЬ ПО
Оборачиваемость ВОЗРПолучили ABC/XYZ-таблицу. 218 позиций с оборачиваемостью менее 0,5 за полугодие — это и есть «балласт». Подключили автоматическое формирование заданий на распродажу.
Сводная таблица результатов
| Проверка | Найдено, ₽ | Что сделали |
|---|---|---|
| Неликвиды 12+ мес | 3 100 000 | Распродажа, списание |
| Партионные расхождения | 2 400 000 | Пересчёт себестоимости |
| Пересортица характеристик | 1 800 000 | Инвентаризация, корректировка |
| Зависшие резервы | 1 200 000 | Закрытие заказов |
| Отрицательные остатки | 940 000 | Запрет минусов, обучение |
| Товары в пути | 540 000 | Приёмки задним числом |
| Дубли ЭДО | 312 000 | Удаление дублей |
| Упаковки/коэффициенты | 280 000 | Перепроведение |
| Нулевые цены прихода | 410 000 | Корректировка стоимости |
| ИТОГО | 8 200 000+ |