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