Почему 1С:Розница списывает товар в минус задним числом при наличии прихода в будущем и как это исправить?

Бизнес-аналитик 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При работе в программе 1С:Розница (а также в других современных конфигурациях, таких как 1С:Управление торговлей или 1С:Управление нашей фирмой) пользователи часто сталкиваются с непонятным поведением системы. Если попытаться продать или списать товар, которого вообще нет на складе, программа ожидаемо выдает ошибку проведения и блокирует операцию. Однако если оформить поступление товара, например, 15 марта, а затем попытаться списать этот же товар «задним числом» — скажем, 13 марта — программа проводит документ без каких-либо предупреждений, образуя временной («красный») минус в остатках.

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

Суть проблемы: хронологический парадокс контроля остатков

Давайте детально проанализируем ситуацию на конкретном примере:

  1. 15 марта на склад поступает товар в количестве 10 штук. Этот факт фиксируется документом «Поступление товаров».
  2. Позже пользователь ошибается и пытается оформить документ «Списание товаров» или «Реализация товаров и услуг» датой 13 марта на 1 штуку этого же товара.
  3. Логика подсказывает, что 13 марта товара физически еще не было на складе, и система должна заблокировать проведение документа. Однако программа успешно проводит документ. В отчетах на период с 13 по 15 марта появляется отрицательный остаток (-1 шт.), который «перекрывается» только 15 марта после проведения прихода.

Такое поведение не является техническим сбоем или программной ошибкой конкретного релиза. Это — заложенный разработчиками 1С стандартный алгоритм функционирования системы.

Новая методика контроля остатков: почему программа так себя ведет?

Для того чтобы понять логику разработчиков, выясним причину изменения подходов к проведению документов. В современных конфигурациях на платформе 1С:Предприятие 8 реализована так называемая «новая методика контроля остатков».

Ее основная идея заключается в следующем: при проведении расходного документа проверка наличия свободных остатков на складе производится не на момент времени (дату и секунду) самого проводимого документа, а на актуальную (текущую) дату в системе.

Когда вы проводите документ от 13 марта:

Зачем это было сделано? Исключительно ради оптимизации производительности базы данных. Если бы система при проведении любого документа задним числом проверяла остатки на каждую секунду по всей последующей временной шкале (чтобы убедиться, что ни в один из будущих моментов остаток не уйдет в минус), это приводило бы к колоссальным блокировкам таблиц и зависанию программы. Особенно остро эта проблема проявлялась в крупных базах со множеством одновременно работающих пользователей. Проверка остатков на текущую дату выполняется практически мгновенно.

К каким последствиям в учете это приводит?

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

Как решить проблему на практике?

Существует несколько вариантов борьбы со списанием товаров в минус задним числом. Рассмотрим их по шагам.

Способ 1. Использование даты запрета изменения данных

Самый простой и эффективный административный метод. Если пользователям запретить редактировать и вносить документы прошлыми датами, то и физической возможности провести расход раньше прихода у них не будет.

Для настройки этого механизма перейдем в меню Администрирование — Поддержка и обслуживание — Дата запрета изменения данных. Установите флаг активности и настройте автоматический сдвиг даты (например, «Конец прошлого дня» или «Конец прошлой недели»). После этого рядовые сотрудники смогут оформлять документы только текущим днем, что полностью исключит появление подобных ошибок.

Способ 2. Ограничение прав на неоперативное проведение

В платформе 1С существует понятие оперативного (текущим временем) и неоперативного (задним числом) проведения документов. Мы можем ограничить права кассиров и менеджеров таким образом, чтобы они не имели права проводить документы неоперативно.

Для этого в профилях групп доступа пользователей необходимо снять роль Интерактивное проведение неоперативное для ключевых расходных документов (таких как «Реализация товаров», «Списание товаров»). В таком случае проводить документы прошлыми датами сможет только администратор или главный бухгалтер, которые осознают последствия своих действий.

Способ 3. Внедрение доработок через расширения конфигурации

Если специфика вашего бизнеса требует регулярной работы «задним числом», но вы хотите заблокировать минусы, потребуется небольшая доработка системы. Для этого создается специальное расширение конфигурации, которое перехватывает проведение документа и принудительно рассчитывает остатки на момент времени документа, а не на текущую дату.

Рассмотрим пример программного кода, который запрашивает остатки товаров на складе именно на момент времени проводимого документа:


// Пример запроса в расширении для контроля остатков на момент проведения документа
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    |	ТоварыНаСкладахОстатки.ВНаличииОстаток КАК КоличествоОстаток
    |ИЗ
    |	РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментВремени, Номенклатура В (&СписокНоменклатуры) И Склад = &Склад) КАК ТоварыНаСкладахОстатки";

// Установка границы на момент времени проводимого документа (включая сам документ)
ГраницаКонтроля = Новый Граница(ЭтотОбъект.МоментВремени(), ГраницаТипа.Включая);
Запрос.УстановитьПараметр("МоментВремени", ГраницаКонтроля);
Запрос.УстановитьПараметр("СписокНоменклатуры", МассивТоваровИзДокумента);
Запрос.УстановитьПараметр("Склад", ЭтотОбъект.Склад);

РезультатЗапроса = Запрос.Выполнить();

Использование подобных расширений позволяет вернуть классический жесткий контроль остатков, однако помните, что это может замедлить проведение документов при высокой интенсивности продаж.

Способ 4. Регулярное восстановление последовательности документов

Если ошибки уже допущены, исправить их поможет регулярное групповое перепроведение документов. Эту процедуру рекомендуется выполнять перед закрытием каждого отчетного периода (месяца).

При последовательном перепроведении документов программа начнет проводить их строго по хронологии. В нашем примере система дойдет до документа от 13 марта, попытается его провести, но поскольку прихода от 15 марта в хронологической цепочке еще «не произошло», программа выдаст ошибку о нехватке остатков и остановит процесс. Это позволит оператору локализовать ошибку и исправить даты документов.

← На главную