При работе в современных конфигурациях на базе платформы 1С:Предприятие 8.3, таких как 1С:ERP Управление предприятием, 1С:Управление торговлей 11 или 1С:Комплексная автоматизация 2, пользователи часто сталкиваются с системным сообщением: «Остатки на складе не совпадают с подобранным количеством. Списание номенклатуры не создано». Эта ситуация вводит в ступор начинающих специалистов, так как стандартные отчеты могут показывать наличие товара на складе, но документ при этом отказывается проводиться.
В этой статье мы подробно разберем, почему программа блокирует списание, рассмотрим внутренние механизмы контроля остатков и научимся находить «невидимые» причины блокировки товара. Разберем ситуацию по шагам, используя опыт практикующих разработчиков и методологию типовых решений 1С.
Первое, что мы должны понять: в современных системах 1С физический остаток товара и его доступность для продажи — это разные сущности, которые учитываются в разных регистрах. Рассмотрим ситуацию подробнее. Вы можете видеть в отчете, что на складе лежит 10 единиц товара. Однако при попытке продать даже 1 единицу система выдает ошибку. Это происходит потому, что товар находится в резерве.
Проанализируем основные виды резервов, которые могут «блокировать» товар:
К выполнению и вариантом обеспечения Резервировать на складе, этот товар больше не считается свободным.Часто причина ошибки кроется не в отсутствии товара как такового, а в нарушении хронологии. Выясним причину, проверив время документов. 1С учитывает движения с точностью до секунды. Проанализируем типичный сценарий:
Бухгалтер вводит документ Приобретение товаров и услуг и устанавливает время 12:00:00. Затем менеджер пытается провести Реализацию товаров и услуг за то же число, но время документа в системе по какой-то причине установилось на 11:59:59. Для системы в 11:59:59 товара еще нет, он появится только через секунду. В результате мы получаем ошибку о несовпадении остатков.
Решение: Всегда проверяйте время проведения документов. Приход всегда должен быть раньше расхода, даже в пределах одной секунды.
Если на вашем предприятии используется «Ордерная схема» документооборота, то учет разделяется на финансовый (документы купли-продажи) и складской (движение физических коробок). Разберем, как это влияет на ошибку.
В ордерном складе товар считается списанным не тогда, когда проведена Реализация товаров и услуг, а когда складской работник оформил Расходный ордер на товары. Если ордер уже создан и находится в статусе К отбору или Проверен, система блокирует этот товар. Попытка подобрать этот же товар в другой финансовый документ вызовет конфликт остатков, так как программа видит, что складская служба уже начала работу по отгрузке этого количества.
Проанализируем ситуацию, когда общие остатки верны, но списание не проходит из-за детализации учета. В 1С:ERP и УТ 11 учет ведется в разрезе характеристик и серий. Если на остатках числится «Кабель» в количестве 100 метров, но 50 метров числится на Серии №1, а другие 50 на Серии №2, то попытка списать 60 метров без указания конкретной серии (или по одной серии) приведет к ошибке.
Программа скажет, что остатки не совпадают, потому что по конкретному разрезу (Серии) товара недостаточно. Рассмотрим, как это проверить: необходимо сформировать отчет с максимальной детализацией по всем измерениям регистра Товары на складах.
Рассмотрим алгоритм действий программиста или опытного пользователя для локализации ошибки:
Доступно. Если в колонке В наличии число положительное, а в Доступно — ноль или минус, значит, товар в резерве.Запасы и потребности.Посмотрим на пример того, как программно можно проверить остатки в коде, если вы пишете собственную обработку списания. Важно использовать правильные таблицы для получения остатков:
// Пример получения доступного остатка с учетом резервов
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РаспределениеЗапасовОстатки.Номенклатура,
| РаспределениеЗапасовОстатки.ДоступноОстаток КАК Доступно
|ИЗ
| РегистрНакопления.РаспределениеЗапасов.Остатки(&МоментВремени, Номенклатура = &Номенклатура) КАК РаспределениеЗапасовОстатки";
Запрос.УстановитьПараметр("МоментВремени", Новый Граница(Объект.Дата, ВидГраницы.Включая));
Запрос.УстановитьПараметр("Номенклатура", ВыбранныйТовар);
Результат = Запрос.Выполнить().Выгрузить();
В некоторых случаях ошибка может возникать из-за включенной опции «Контролировать остатки с учетом графика». Выясним причину: программа анализирует не только то, что есть сейчас, но и планируемые поступления и отгрузки в будущем. Если завтра планируется крупная отгрузка по заказу с высоким приоритетом, система может запретить вам списание сегодня, резервируя товар под завтрашнюю операцию.
Также не стоит забывать о технических блокировках. Если в момент проведения документа другой пользователь держит открытой форму подбора по этой же позиции, система может наложить временную блокировку на записи регистра, что иногда интерпретируется интерфейсом как ошибка остатков.
Подводя итог нашему анализу, можно выделить три главные причины ошибки «Остатки на складе не совпадают с подобранным количеством»:
Для быстрого решения всегда начинайте с анализа отчета Остатки и доступность товаров. В большинстве случаев именно он укажет на документ-регистратор, который «удерживает» ваш товар.