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