В процессе работы с программой «1С:Управление торговлей» редакции 11 (а также в «1С:ERP» и «1С:Комплексная автоматизация») пользователи часто сталкиваются с аномальным поведением документа Установка цен номенклатуры. Ситуация выглядит следующим образом: при попытке рассчитать цены на основании себестоимости, программа подставляет значения, которые ровно в два раза (или более) превышают реальные закупочные цены, указанные в документах поступления. При этом дополнительные расходы могут отсутствовать, а перезаполнение документа только усугубляет проблему, увеличивая сумму в геометрической прогрессии.
Рассмотрим детально причины возникновения этой ошибки и разберем пошагово методы её устранения, начиная от простых регламентных операций и заканчивая глубоким анализом регистров системы.
Как показывает практика, наиболее частой причиной «фантомных» данных является нарушение ссылочной целостности или некорректные записи в таблицах итогов. Если система при расчете цены обращается к регистру накопления и видит там задвоенные или «битые» записи, результат вычислений будет неверным.
Проанализируем ситуацию: если после удаления документа и его создания заново цена продолжает расти, это явный признак того, что механизм расчета «зацепляет» данные из предыдущих итераций или некорректно обрабатывает временные таблицы. В этом случае первым шагом мы рекомендуем выполнить процедуру Тестирование и исправление (ТИИ).
Выполним следующие действия в режиме «Конфигуратор»:
Во многих случаях именно пересчет итогов и проверка логической целостности устраняют проблему удвоения, так как система очищает неактуальные записи в промежуточных таблицах.
В современных версиях конфигураций на базе ERP-платформы (УТ 11.5, КА 2.5) используется вспомогательный регистр сведений РеестрДокументов. Он предназначен для ускорения построения списков и формирования отчетов. Выясним причину, связанную с этим регистром: иногда при аварийном завершении сеанса или сбоях при проведении документа Приобретение товаров и услуг, в этом регистре могут появиться две записи на одну и ту же ссылку документа.
Поскольку механизмы подбора цен (СКД) часто используют данные этого реестра для определения последних закупок, система находит две строки и суммирует их значения. Проверим наличие дублей с помощью консоли запросов или программного кода:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеестрДокументов.Ссылка КАК Ссылка,
| КОЛИЧЕСТВО(РеестрДокументов.Ссылка) КАК КоличествоЗаписей
|ИЗ
| РегистрСведений.РеестрДокументов КАК РеестрДокументов
|СГРУППИРОВАТЬ ПО
| РеестрДокументов.Ссылка
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(РеестрДокументов.Ссылка) > 1";
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Сообщить("Обнаружены дубли в реестре документов!");
КонецЕсли;
Если дубли обнаружены, необходимо программно удалить лишние записи или выполнить полное перепроведение цепочки документов, предварительно очистив записи регистра для проблемного документа.
Разберем ситуацию, когда используется ордерный склад. Цепочка документов часто выглядит так: Заказ поставщику -> Приходный ордер на товары -> Приобретение товаров и услуг.
Важно понимать, что в УТ 11 фактическое поступление товара на склад (количественный учет) и финансовое отражение (стоимостный учет) разделены. Если Приходный ордер на товары оформлен раньше, чем Приобретение товаров и услуг, и при этом в системе есть незавершенные корректировки или неоформленные накладные по другим ордерам, механизм расчета себестоимости может интерпретировать остатки некорректно.
Проанализируем следующие моменты:
Приобретение товаров и услуг с конкретным Приходным ордером? Если связь не установлена в рабочем месте «Накладные к оформлению», система может посчитать это как две разные партии (одну по ордеру с нулевой стоимостью, вторую по накладной), что в определенных настройках компоновки данных приводит к удвоению итоговой суммы в запросе.Товары к поступлению. Если там «висят» остатки по закрытым сделкам, это может искажать базу для расчета цен.Посмотрим на настройки самого Вида цен. Когда мы выбираем способ задания цены «Заполнять по данным ИС», система использует предопределенные схемы компоновки данных. Рассмотрим подробнее, как это работает: запрос СКД обращается к виртуальным таблицам остатков и оборотов регистров СебестоимостьТоваров или ВыручкаИСебестоимостьПродаж.
Если в настройках вида цен указана выборка «Максимальная цена за период» или «Средняя цена», а за один день (или даже секунду) произошло несколько движений по одному и тому же документу (например, проведение и корректировка), СКД может некорректно сгруппировать данные.
Рекомендация: попробуйте временно изменить способ расчета в виде цен на «Прямое указание» и обратно, или проверьте, как работает расчет, если изменить дату документа Установка цен номенклатуры на следующий день после прихода. Если на следующую дату цена рассчитывается верно — проблема в том, что расчет происходит «внутри» периода движений регистра, и система видит промежуточные итоги.
Иногда проблема кроется в регистре накопления Себестоимость товаров. Это может произойти, если документ был проведен, затем отменен, но его движения по какой-то причине остались в таблицах базы данных (ошибка СУБД или платформы).
Выясним причину с помощью универсального отчета:
В такой ситуации поможет только программная очистка движений или полное перепроведение документов за период с помощью обработки «Групповое изменение реквизитов» (с включением режима «Выполнять в транзакции» и «Отрабатывать механизмы проведения»).
Для исправления проблемы удвоения себестоимости рекомендуем придерживаться следующего алгоритма:
РеестрДокументов.Приобретение товаров и услуг.Помните, что документ Установка цен номенклатуры не является первичным для расчета себестоимости, он лишь фиксирует результат запроса к данным системы на определенный момент времени. Исправление источника данных в регистрах автоматически приведет к корректному заполнению цен.