Почему пропали партии в «1С:Управление торговлей 11» после обновления и как правильно настроить партионный учет 2.2?

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

Обновление программных продуктов на платформе «1С:Предприятие 8.3» часто приносит не только новые полезные функции, но и существенные изменения в привычных механизмах учета. Типичная ситуация, с которой сталкиваются пользователи конфигураций «Управление торговлей» (начиная с редакции 11.4.7 и выше), «Комплексная автоматизация 2» и «ERP Управление предприятием» — внезапное «исчезновение» партий в отчете «Ведомость по партиям товаров». Документы реализации проводятся, но приходные документы перестают мгновенно выступать партиями-источниками.

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

Разбираемся в архитектуре: суть изменений в партионном учете 2.2

Для начала проанализируем причину, по которой поведение программы изменилось после обновления релиза. В старых версиях систем (например, в легендарной «Управление торговлей 10.3» или в ранних редакциях УТ 11 с партионным учетом версии 2.1) распределение партий происходило непосредственно в момент проведения документа списания (реализации, требования-накладной и т.д.). Программа «на лету» искала свободные остатки партий по методу FIFO и сразу делала движения по регистрам себестоимости.

Однако у такого подхода был огромный минус — низкая производительность системы при многопользовательской работе. Если несколько операторов одновременно проводили документы реализации, база данных блокировала таблицы партий, возникали ошибки ожидания блокировок, и работа предприятия останавливалась.

В партионном учете версии 2.2 разработчики полностью изменили этот механизм, применив концепцию отложенного расчета партий. Теперь при проведении документов система делает движения исключительно по количественному учету. Сами партии (документы поступления) в этот момент не подбираются, а стоимостная оценка не рассчитывается. Полный и окончательный расчет партий и себестоимости перенесен в процедуру закрытия месяца.

Именно поэтому сразу после проведения реализации в отчете «Ведомость по партиям товаров» данные отсутствуют или отображаются некорректно — программа просто еще не запускала алгоритм распределения.

Как настроить автоматическое распределение партий в течение дня?

Конечно, ждать окончания месяца, чтобы увидеть актуальную себестоимость или маржинальную прибыль в отчетах, крайне неудобно для бизнеса. Нам необходима оперативная информация. К счастью, разработчики 1С предусмотрели штатные механизмы, позволяющие автоматизировать распределение партий без запуска полного закрытия месяца. Рассмотрим, как это настроить.

Способ 1. Автоматический расчет при формировании отчетов

В системе есть встроенная опция, которая заставляет программу рассчитывать партии непосредственно перед выводом данных на экран. Чтобы активировать её, выполним следующие шаги:

  1. Перейдем в раздел НСИ и администрирование — Настройка НСИ и разделов — Финансовый результат и контроллинг.
  2. В группе настроек Учет товаров найдем и установим флаг напротив опции «Автоматически запускать фоновое задание распределения партий товаров при формировании отчетов».

Теперь, как только пользователь откроет отчет «Ведомость по партиям товаров» и нажмет кнопку «Сформировать», система автоматически проверит наличие нераспределенных документов. Если такие найдутся, программа в фоновом режиме запустит расчет партионного учета, и пользователь увидит актуальные стоимостные данные.

Способ 2. Настройка регламентного задания по расписанию

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

  1. Перейдем в раздел Администрирование — Обслуживание — Регламентные операции — Регламентные и фоновые задания.
  2. Найдем в списке регламентное задание с наименованием «Распределение партий» (в некоторых релизах оно может называться «Формирование движений по партиям товаров»).
  3. Установим флаг «Включено».
  4. Перейдем по ссылке «Настроить расписание». Здесь мы можем задать индивидуальный график. Например, запускать расчет каждые 30 минут в течение рабочего дня или настроить ежедневный запуск в нерабочее время (например, в 21:00).

Ниже приведен пример программного кода, аналогичный тому, который выполняет регламентное задание для проведения расчетов по партиям. Администраторы могут использовать его для принудительного вызова процедуры распределения из внешних обработок:


// Пример вызова штатного распределения партий в УТ 11
ПараметрыРасчета = РасчетСебестоимостиРегламентныеЗадания.ПолучитьПараметрыРасчета();
ПараметрыРасчета.Организация = Справочники.Организации.ПустаяСсылка(); // Расчет по всем организациям
ПараметрыРасчета.ПериодРегистрации = НачалоМесяца(ТекущаяДата());
РасчетСебестоимостиРегламентныеЗадания.ВыполнитьРаспределениеПартий(ПараметрыРасчета);

Проблемы с себестоимостью при возвратах от покупателей

Часто пользователи жалуются, что себестоимость возвращаемого от клиента товара «встает куда хочет», игнорируя реальную партию закупки. Проанализируем причины этой проблемы.

В партионном учете 2.2 ключевое значение имеет то, как именно оформлен документ ВозвратТоваровОтКлиента:

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

Также важно помнить о программных ошибках самих релизов 1С. В версиях УТ 11.4.7 – 11.4.11 встречались зафиксированные баги, связанные со сторнированием партий при внутримесячных возвратах (когда продажа и возврат совершены в одном отчетном периоде). Если вы столкнулись с тем, что программа упорно не желает видеть документ-основание при возврате, рекомендуется обновить конфигурацию на актуальный и стабильный релиз ветки 11.4 или перейти на редакцию 11.5.

Что такое «кривые» ключи аналитики партий и как их исправить?

Одной из наиболее неочевидных причин сбоев в расчете партий и себестоимости являются так называемые «кривые» ключи аналитики. Выясним причину их появления.

В современных конфигурациях 1С для оптимизации быстродействия регистров накопления используется специальная архитектура. Вместо того чтобы записывать в таблицы движений напрямую тяжелые справочники (такие как Номенклатура, Склады, Характеристики, Партнеры), система генерирует служебные ключи аналитики. Они хранятся в справочниках:

Каждая уникальная комбинация «Товар + Склад + Характеристика» имеет свой уникальный ключ аналитики. Проблема возникает тогда, когда в базе данных появляются дубли ключей аналитики.

Как это происходит? Самый частый сценарий: в справочнике «Номенклатура» случайно завели две одинаковые позиции. Бухгалтер или администратор воспользовался стандартной обработкой «Поиск и удаление дублей» и объединил их. Карточки номенклатуры «склеились», но служебные справочники ключей аналитики при этом могли остаться неразделенными или зафиксировать неверные ссылки в старых движениях документов.

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

Разберем по шагам, как исправить эту проблему:

  1. Запуск процедуры поиска и замены дублей ключей: В конфигурации присутствует штатный механизм для исправления подобных коллизий. Чтобы его запустить, необходимо войти в базу под пользователем с полными правами. В главном меню откроем «Функции для технического специалиста» (в старых релизах — «Все функции»). Нам нужно найти справочник КлючиАналитикиУчетаНоменклатуры. В открывшейся форме списка нажимаем кнопку Еще и выбираем команду «Заменить дубли ключей аналитики». Программа проведет глубокий анализ связей и объединит разорванные цепочки.
  2. Очистка зависших заданий: Иногда после удаления дублей в регистрах сведений остаются старые записи о необходимости расчета. Перейдем в регистр сведений ЗаданияКРасчетуСебестоимости через те же «Функции для технического специалиста». Если там висят неактуальные или ошибочные строки за прошлые периоды, их следует очистить (удалить записи), чтобы они не блокировали текущие расчеты.
  3. Перепроведение документов и повторный расчет: После выполнения технических процедур по слиянию ключей аналитики обязательно нужно запустить групповое перепроведение документов за проблемный месяц, чтобы восстановить верную последовательность движений в регистрах. Затем можно смело запускать операцию «Закрытие месяца» — расчет партий пройдет успешно и без ошибок.

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


// Запрос для выявления дублей в ключах аналитики учета номенклатуры
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Ключи.Номенклатура КАК Номенклатура,
    |	Ключи.Характеристика КАК Характеристика,
    |	Ключи.Склад КАК Склад,
    |	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ключи.Ссылка) КАК КоличествоКлючей
    |ИЗ
    |	Справочник.КлючиАналитикиУчетаНоменклатуры КАК Ключи
    |СГРУППИРОВАТЬ ПО
    |	Ключи.Номенклатура,
    |	Ключи.Характеристика,
    |	Ключи.Склад
    |ИМЕЮЩИЕ
    |	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ключи.Ссылка) > 1";

РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        ЗаписьЖурналаРегистрации("АнализДублей", УровеньЖурналаРегистрации.Предупреждение, , , 
            "Найден дубль ключа для товара: " + Выборка.Номенклатура + " (Кол-во ключей: " + Выборка.КоличествоКлючей + ")");
    КонецЦикла;
КонецЕсли;

Регулярно отслеживая состояние ключей аналитики и используя регламентные задания для фонового расчета партий, мы сможем обеспечить стабильную работу системы и всегда иметь под рукой точные данные о себестоимости и прибыли предприятия.

← На главную