Почему в 1С:УТ 10.3 в поступлении товаров не проставляется закупочная цена и как это исправить?

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

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

Разбор архитектуры: различие между ценами номенклатуры и ценами контрагентов

Проанализируем структуру хранения данных в системе. В УТ 10.3 реализовано разделение цен на две независимые категории, которые хранятся в разных регистрах сведений. Если в дальнейшем вы планируете перейти на более современную торговую систему с сохранением накопленной истории, воспользуйтесь правилами переноса данных из УТ 10.3 в УТ 11.

  1. Регистр «Цены номенклатуры» — здесь хранятся собственные цены компании (Оптовая, Розничная, Закупочная и т.д.). Эти цены используются преимущественно для продажи или внутреннего анализа. Документ Установка цен номенклатуры работает именно с этим регистром.
  2. Регистр «Цены номенклатуры контрагентов» — предназначен для хранения цен поставщиков и конкурентов. Система считает, что у каждого поставщика своя цена на один и тот же товар, поэтому эти цены «привязаны» к конкретному контрагенту. Для автоматического наполнения этого регистра актуальной информацией о предложениях на рынке можно использовать решение для мониторинга цен конкурентов в интернете.

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

Способ 1: Использование флага «Регистрировать цены поставщика»

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

Разберем алгоритм его работы:

  1. При создании первого поступления вы вручную вводите цены из накладной поставщика.
  2. Устанавливаете флаг «Регистрировать цены поставщика».
  3. При проведении документа система автоматически делает запись в регистр Цены номенклатуры контрагентов.
  4. Важно убедиться, что в Договоре с контрагентом на закладке «Дополнительно» указан Тип цен контрагента. Именно к этому типу будет привязана цена.

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

Способ 2: Настройка связи между типами цен

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

Однако, стоит учитывать, что это поле носит скорее информационный характер для некоторых отчетов и обработки Формирование цен. Автоматического «подтягивания» из регистра Цены номенклатуры в документ поступления все равно не произойдет без доработки, так как документ ищет записи по другому измерению (по Контрагенту).

Способ 3: Реализация через внешнюю обработку заполнения табличной части

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

Проанализируем логику кода, которую необходимо внедрить в такую обработку. Основная задача — получить актуальные цены из регистра Цены номенклатуры на дату документа. Пример фрагмента запроса для получения цен:


Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	ЦеныНоменклатурыСрезПоследних.Цена,
|	ЦеныНоменклатурыСрезПоследних.Номенклатура,
|	ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры
|ИЗ
|	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаДокумента, ТипЦен = &ВыбранныйТипЦен) КАК ЦеныНоменклатурыСрезПоследних
|ГДЕ
|	ЦеныНоменклатурыСрезПоследних.Номенклатура В (&МассивТоваров)";

Запрос.УстановитьПараметр("ДатаДокумента", Объект.Дата);
Запрос.УстановитьПараметр("ВыбранныйТипЦен", Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Закупочная"));
Запрос.УстановитьПараметр("МассивТоваров", Объект.Товары.ВыгрузитьКолонку("Номенклатура"));

После получения данных обработка должна обойти строки табличной части документа и заполнить колонку Цена, после чего вызвать процедуру пересчета суммы (обычно это ОбработкаТабличнойЧастиТовары.ПриИзмененииНоменклатурыТоваров() или аналогичная экспортная процедура в модуле документа или общем модуле).

Почему документ «Установка цен номенклатуры» не влияет на поступление напрямую?

Разберем этот момент подробнее, чтобы избежать ошибок в будущем. Документ Установка цен номенклатуры формирует ваш собственный прайс-лист. Поступление же — это факт совершения сделки с внешним лицом. С точки зрения методологии 1С, ваши внутренние желания по цене (Закупочная цена) могут не совпадать с тем, по какой цене поставщик реально привез товар. Поэтому приоритет всегда отдается либо ручному вводу, либо истории цен именно этого контрагента.

Резюмируем рекомендации:

  1. Если вы хотите использовать типовой функционал: всегда проверяйте наличие Типа цен в договоре контрагента и используйте флаг «Регистрировать цены поставщика» в первом документе закупки.
  2. Если вам нужно видеть именно «Закупочную» цену из вашего прайса: используйте кнопку «Цены и валюта» в документе поступления, но помните, что там выбирается тип цен контрагента, а не ваш внутренний.
  3. Для полной автоматизации подстановки внутренних цен используйте механизм внешних обработок заполнения табличных частей (ЗаполнениеТЧ), который по нажатию кнопки «Заполнить» будет обращаться к регистру ЦеныНоменклатуры.

Таким образом, проблема отсутствия цен в поступлении — это не баг, а следствие четкого разделения управленческого учета собственных цен и учета цен поставщиков в системе 1С:Управление торговлей 10.3.

← На главную