В практической работе с программами на платформе «1С:Предприятие 8» (особенно в конфигурациях со старым типом интерфейса на обычных формах, таких как «Управление торговлей 10.3», «Комплексная автоматизация 1.1» или «Управление производственным предприятием 1.3») пользователи часто сталкиваются с необъяснимым поведением системы при просмотре остатков товаров. Рассмотрим классическую ситуацию: в форме списка справочника «Номенклатура» программа показывает остаток 0,870. После очистки локального кэша это значение внезапно меняется на 30, хотя реальный физический остаток на складе (подтвержденный инвентаризацией) составляет ровно 10.
В рамках этой статьи мы подробно разберем, как устроен механизм динамического отображения остатков в справочнике номенклатуры, выясним причины влияния кэша на эти показатели, поймем происхождение дробных остатков и выработаем пошаговый алгоритм для исправления любых расхождений в учете.
Прежде всего проанализируем распространенное заблуждение: «В самом справочнике Номенклатура хранятся остатки». Физически в таблицах справочника Справочник.Номенклатура никаких остатков нет и быть не может. Справочник предназначен исключительно для хранения условно-постоянной информации о товаре (наименование, артикул, базовая единица измерения, ставки НДС и т.д.).
Остатки товаров в системах 1С хранятся в специализированных регистрах накопления. В конфигурации «Управление торговлей 10.3» за это отвечают следующие регистры:
ТоварыНаСкладах — хранит информацию о физическом наличии товаров на оптовых складах предприятия;ТоварыВРознице — отображает остатки товаров в розничных торговых точках (на складах с типом «Розница» или «НТТ»);ТоварыВРезервеНаСкладах — фиксирует количество товара, зарезервированного под конкретные заказы покупателей;ЗаказыПоставщикам — используется для расчета ожидаемых поступлений товаров.Для удобства пользователей разработчики 1С предусмотрели возможность быстрого просмотра остатков прямо в форме списка справочника без необходимости формирования тяжелых отчетов. Для этого используется специальная нижняя панель формы списка, которая называется «Остатки товаров на складах».
Выясним, как активировать данный функционал. Если у вас в справочнике не отображается нижнее поле с остатками, выполните следующие действия:
После этого внизу формы появится динамическая панель. При активизации любой строки в списке номенклатуры (когда мы кликаем мышкой по товару) платформа генерирует фоновое событие ПриАктивизацииСтроки. В этот момент встроенный в форму алгоритм выполняет быстрый запрос к виртуальным таблицам остатков вышеуказанных регистров накопления и выводит агрегированные данные в нижнюю панель.
Примерный упрощенный вид запроса, который отрабатывает в системе при смене текущей строки номенклатуры:
ВЫБРАТЬ
ТоварыОстатки.Склад КАК Склад,
ТоварыОстатки.Номенклатура КАК Номенклатура,
ТоварыОстатки.КоличествоОстаток КАК ФизическийОстаток,
ЕСТЬNULL(РезервыОстатки.КоличествоОстаток, 0) КАК ВРезерве,
ТоварыОстатки.КоличествоОстаток - ЕСТЬNULL(РезервыОстатки.КоличествоОстаток, 0) КАК СвободныйОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Номенклатура = &ТекущийТовар) КАК ТоварыОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Период, Номенклатура = &ТекущийТовар) КАК РезервыОстатки
ПО ТоварыОстатки.Склад = РезервыОстатки.Склад
И ТоварыОстатки.Номенклатура = РезервыОстатки.Номенклатура
Рассмотрим, каким образом очистка локального кэша пользователя на компьютере могла так радикально изменить цифры в панели остатков (с дробного значения 0,870 на целое число 30). Здесь действуют два основных фактора:
Сброс персональных фильтров и настроек формы. Локальный кэш пользователя хранит настройки интерфейса, включая состояние отборов и фильтров в динамических панелях. В нижней панели остатков пользователь может вручную устанавливать отборы (например, по конкретному складу, по определенной характеристике товара, по качеству «Новый» или «Брак»).
До очистки кэша у пользователя в системе мог быть установлен (и забыт) скрытый фильтр. Например, программа показывала остаток по конкретному складу списания или по категории некондиционного товара (где действительно числилось дробное количество 0,870). После удаления файлов кэша настройки формы сбросились к стандартным значениям по умолчанию. Фильтры отключились, и система вывела общий консолидированный остаток по всем складам и характеристикам — 30 единиц.
Механизм динамического обновления конфигурации (Dynamic Update). Если администраторы или программисты 1С вносили изменения в логику работы запросов или структуру регистров накопления «на лету» (без монопольного выгона пользователей из базы), у части сотрудников могли закэшироваться старые схемы запросов или некорректные метаданные. Очистка кэша заставила платформу обновить конфигурацию до актуального релиза и пересчитать виртуальные таблицы остатков по обновленным, корректным алгоритмам.
Дробные остатки для товаров, которые по своей природе должны учитываться только в целых единицах (штуки, коробки, комплекты), — головная боль многих бухгалтеров и операторов склада. Проанализируем основные причины возникновения подобных аномалий:
шт с коэффициентом 1) и «Единица хранения остатков» или «Единица для отчетов» (например, упак). Если для упаковки, содержащей 12 штук, ошибочно установить некорректный коэффициент (например, дробное число вместо целого или наоборот) либо изменить его уже после того, как по товару пошли движения в базе, система начнет некорректно пересчитывать количество при проведении документов и формировании отчетов.0,001 или 0,870).Теперь разберем ключевой вопрос: почему после сброса кэша программа показывает остаток 30, хотя реальный остаток должен быть равен 10? Рассмотрим наиболее вероятные технические и методологические причины:
Путаница между «физическим» и «свободным» остатком. Пользователи часто путают данные в колонках панели остатков. Если на складе физически лежит 30 штук товара, но 20 из них зарезервированы под заказы покупателей (информация пишется в регистр ТоварыВРезервеНаСкладах), то свободный для продажи остаток составит ровно 10 штук. На панели справочника выводятся обе эти цифры, и важно обращать внимание на правильную колонку — «Свободный остаток».
Проблема документов будущих дат (сбой оперативных итогов). Быстрый просмотр остатков в справочнике всегда работает в режиме реального времени на так называемую «оперативную отметку времени» (то есть на самый конец шкалы времени в системе, фактически на 31.12.3999). Если кто-то из сотрудников при вводе приходной накладной случайно ошибся в годе и провел документ, например, 2029 годом, то:
10.30.Рассинхронизация партионного и складского учета. В конфигурациях семейства 1С:УТ 10.3 складские остатки учитываются в регистре ТоварыНаСкладах (оперативный учет), а стоимостная оценка и партии — в регистре ПартииТоваровНаСкладах (партионный учет). Если в настройках параметров учета разрешено проведение документов при отсутствии остатков (списание «в минус»), то складской учет может уйти вперед, показав остаток 30, в то время как по партиям зависнет старый остаток 10. В результате возникают серьезные расхождения между данными управленческого и бухгалтерского учета.
Повреждение таблиц итогов базы данных. Платформа 1С для ускорения работы не пересчитывает все документы с начала времен при каждом запросе. Она хранит рассчитанные остатки в специальных физических таблицах итогов (обычно на начало каждого месяца). В результате сетевых сбоев, аварийного завершения работы сервера СУБД или некорректного проведения документов «задним числом» эти таблицы итогов могут рассинхронизироваться с реальными детальными записями (движениями) документов. Система начинает выдавать неверные данные при обращении к виртуальным таблицам остатков.
Проанализируем ситуацию и выполним ряд последовательных действий для локализации и полного устранения проблемы расхождения остатков.
Шаг 1. Проверяем детальные движения товара с помощью отчета. Нам необходимо построить отчет, который покажет абсолютно все движения товара без ограничения по конечной дате. Это поможет исключить влияние будущих дат.
Шаг 2. Выполняем тестирование и исправление базы данных (пересчет итогов). Если детальный отчет показывает правильный остаток 10, а панель в справочнике все равно выдает 30, дело в повреждении таблиц итогов. Для исправления этой ситуации выполним пересчет итогов в Конфигураторе:
После завершения операции платформа полностью пересчитает агрегированные таблицы остатков на основе реальных документов-регистраторов, и расхождения в справочнике исчезнут.
Шаг 3. Анализируем и выравниваем партионную последовательность. Чтобы устранить расхождения между партионным и складским учетом, запустите обработку проведения документов:
Шаг 4. Проверяем единицы измерения и коэффициенты. Если в отчете вы видите странные дробные числа, откройте карточку номенклатуры и проверьте вкладку «Единицы». Убедитесь, что коэффициенты пересчета между всеми единицами измерения (базовая, хранения остатков, мест) заданы верно. Если вы обнаружили ошибку в коэффициенте у элемента, по которому уже были движения, вам придется временно отменить проведение документов по этой номенклатуре, исправить коэффициент и заново последовательно провести все документы.
Применяя данные методы диагностики и профилактики, мы сможем гарантировать абсолютную точность складских остатков как в оперативных панелях справочника, так и во всех аналитических отчетах компании.