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