Обновление программных продуктов на платформе «1С:Предприятие 8.3» часто приносит не только новые полезные функции, но и существенные изменения в привычных механизмах учета. Типичная ситуация, с которой сталкиваются пользователи конфигураций «Управление торговлей» (начиная с редакции 11.4.7 и выше), «Комплексная автоматизация 2» и «ERP Управление предприятием» — внезапное «исчезновение» партий в отчете «Ведомость по партиям товаров». Документы реализации проводятся, но приходные документы перестают мгновенно выступать партиями-источниками.
В этой статье мы подробно разберем, как устроен современный партионный учет версии 2.2, почему партии больше не распределяются в режиме реального времени, как автоматизировать этот процесс в течение дня и как бороться с сопутствующими ошибками себестоимости при возвратах и «кривыми» ключами аналитики.
Для начала проанализируем причину, по которой поведение программы изменилось после обновления релиза. В старых версиях систем (например, в легендарной «Управление торговлей 10.3» или в ранних редакциях УТ 11 с партионным учетом версии 2.1) распределение партий происходило непосредственно в момент проведения документа списания (реализации, требования-накладной и т.д.). Программа «на лету» искала свободные остатки партий по методу FIFO и сразу делала движения по регистрам себестоимости.
Однако у такого подхода был огромный минус — низкая производительность системы при многопользовательской работе. Если несколько операторов одновременно проводили документы реализации, база данных блокировала таблицы партий, возникали ошибки ожидания блокировок, и работа предприятия останавливалась.
В партионном учете версии 2.2 разработчики полностью изменили этот механизм, применив концепцию отложенного расчета партий. Теперь при проведении документов система делает движения исключительно по количественному учету. Сами партии (документы поступления) в этот момент не подбираются, а стоимостная оценка не рассчитывается. Полный и окончательный расчет партий и себестоимости перенесен в процедуру закрытия месяца.
Именно поэтому сразу после проведения реализации в отчете «Ведомость по партиям товаров» данные отсутствуют или отображаются некорректно — программа просто еще не запускала алгоритм распределения.
Конечно, ждать окончания месяца, чтобы увидеть актуальную себестоимость или маржинальную прибыль в отчетах, крайне неудобно для бизнеса. Нам необходима оперативная информация. К счастью, разработчики 1С предусмотрели штатные механизмы, позволяющие автоматизировать распределение партий без запуска полного закрытия месяца. Рассмотрим, как это настроить.
Способ 1. Автоматический расчет при формировании отчетов
В системе есть встроенная опция, которая заставляет программу рассчитывать партии непосредственно перед выводом данных на экран. Чтобы активировать её, выполним следующие шаги:
Теперь, как только пользователь откроет отчет «Ведомость по партиям товаров» и нажмет кнопку «Сформировать», система автоматически проверит наличие нераспределенных документов. Если такие найдутся, программа в фоновом режиме запустит расчет партионного учета, и пользователь увидит актуальные стоимостные данные.
Способ 2. Настройка регламентного задания по расписанию
Если база данных достаточно большая, фоновый расчет при формировании отчетов может занимать много времени, заставляя пользователей ждать. Более профессиональным решением является настройка стандартного регламентного задания. Настроим расписание его работы:
Ниже приведен пример программного кода, аналогичный тому, который выполняет регламентное задание для проведения расчетов по партиям. Администраторы могут использовать его для принудительного вызова процедуры распределения из внешних обработок:
// Пример вызова штатного распределения партий в УТ 11
ПараметрыРасчета = РасчетСебестоимостиРегламентныеЗадания.ПолучитьПараметрыРасчета();
ПараметрыРасчета.Организация = Справочники.Организации.ПустаяСсылка(); // Расчет по всем организациям
ПараметрыРасчета.ПериодРегистрации = НачалоМесяца(ТекущаяДата());
РасчетСебестоимостиРегламентныеЗадания.ВыполнитьРаспределениеПартий(ПараметрыРасчета);
Часто пользователи жалуются, что себестоимость возвращаемого от клиента товара «встает куда хочет», игнорируя реальную партию закупки. Проанализируем причины этой проблемы.
В партионном учете 2.2 ключевое значение имеет то, как именно оформлен документ ВозвратТоваровОтКлиента:
РеализацияТоваровУслуг, система четко понимает взаимосвязь. При расчете партий программа вернет товар именно в ту партию, из которой он был списан при продаже, сохранив исходную себестоимость. Если эта связь нарушается (например, реализацию перепровели «задним числом» или изменили в ней состав номенклатуры), то механизм сопоставления ломается.Также важно помнить о программных ошибках самих релизов 1С. В версиях УТ 11.4.7 – 11.4.11 встречались зафиксированные баги, связанные со сторнированием партий при внутримесячных возвратах (когда продажа и возврат совершены в одном отчетном периоде). Если вы столкнулись с тем, что программа упорно не желает видеть документ-основание при возврате, рекомендуется обновить конфигурацию на актуальный и стабильный релиз ветки 11.4 или перейти на редакцию 11.5.
Одной из наиболее неочевидных причин сбоев в расчете партий и себестоимости являются так называемые «кривые» ключи аналитики. Выясним причину их появления.
В современных конфигурациях 1С для оптимизации быстродействия регистров накопления используется специальная архитектура. Вместо того чтобы записывать в таблицы движений напрямую тяжелые справочники (такие как Номенклатура, Склады, Характеристики, Партнеры), система генерирует служебные ключи аналитики. Они хранятся в справочниках:
КлючиАналитикиУчетаНоменклатурыКлючиАналитикиПартийКлючиАналитикиУчетаЗатратКаждая уникальная комбинация «Товар + Склад + Характеристика» имеет свой уникальный ключ аналитики. Проблема возникает тогда, когда в базе данных появляются дубли ключей аналитики.
Как это происходит? Самый частый сценарий: в справочнике «Номенклатура» случайно завели две одинаковые позиции. Бухгалтер или администратор воспользовался стандартной обработкой «Поиск и удаление дублей» и объединил их. Карточки номенклатуры «склеились», но служебные справочники ключей аналитики при этом могли остаться неразделенными или зафиксировать неверные ссылки в старых движениях документов.
При закрытии месяца алгоритм расчета партий обращается к регистрам, видит разные ключи аналитики для физически одного и того же товара, путается в остатках и выдает ошибки (например, «Обнаружены отрицательные остатки в регистре Себестоимость товаров»). Расчет прерывается.
Разберем по шагам, как исправить эту проблему:
КлючиАналитикиУчетаНоменклатуры. В открывшейся форме списка нажимаем кнопку Еще и выбираем команду «Заменить дубли ключей аналитики». Программа проведет глубокий анализ связей и объединит разорванные цепочки.
ЗаданияКРасчетуСебестоимости через те же «Функции для технического специалиста». Если там висят неактуальные или ошибочные строки за прошлые периоды, их следует очистить (удалить записи), чтобы они не блокировали текущие расчеты.
Для программистов и системных администраторов приведем полезный текст запроса, с помощью которого можно оперативно обнаружить наличие дублирующихся ключей аналитики в вашей информационной базе:
// Запрос для выявления дублей в ключах аналитики учета номенклатуры
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ключи.Номенклатура КАК Номенклатура,
| Ключи.Характеристика КАК Характеристика,
| Ключи.Склад КАК Склад,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ключи.Ссылка) КАК КоличествоКлючей
|ИЗ
| Справочник.КлючиАналитикиУчетаНоменклатуры КАК Ключи
|СГРУППИРОВАТЬ ПО
| Ключи.Номенклатура,
| Ключи.Характеристика,
| Ключи.Склад
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ключи.Ссылка) > 1";
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ЗаписьЖурналаРегистрации("АнализДублей", УровеньЖурналаРегистрации.Предупреждение, , ,
"Найден дубль ключа для товара: " + Выборка.Номенклатура + " (Кол-во ключей: " + Выборка.КоличествоКлючей + ")");
КонецЦикла;
КонецЕсли;
Регулярно отслеживая состояние ключей аналитики и используя регламентные задания для фонового расчета партий, мы сможем обеспечить стабильную работу системы и всегда иметь под рукой точные данные о себестоимости и прибыли предприятия.