Как подставить закупочную цену из установки цен в документ поступления в 1С:Управление торговлей 10.3?

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

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

Выясним причину поведения типовой конфигурации

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

  1. Регистр сведений ЦеныНоменклатуры: предназначен для хранения собственных прайс-листов компании (оптовые, розничные, плановые закупочные). Цены устанавливаются документом «Установка цен номенклатуры» и автоматически подставляются в документы реализации и заказы покупателей.
  2. Регистр сведений ЦеныНоменклатурыКонтрагентов: предназначен для хранения прайс-листов сторонних поставщиков. Цены фиксируются в разрезе каждого контрагента с помощью документа «Установка цен номенклатуры контрагентов». Именно из этого регистра документ «Поступление товаров и услуг» считывает цены при выборе номенклатуры.

Поскольку различные поставщики могут поставлять один и тот же товар по разным ценам, штатная логика 1С требует обязательной привязки закупочной цены к конкретному контрагенту. Если цена для выбранного поставщика в регистре ЦеныНоменклатурыКонтрагентов не зарегистрирована, колонка «Цена» в документе поступления останется незаполненной.

Вариант 1. Использование внешней обработки заполнения табличной части

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

Подключить такую обработку можно через меню Сервис → Внешние печати и формы → Внешние обработки заполнения табличных частей. После этого в документе «Поступление товаров и услуг» над табличной частью «Товары» появится кнопка меню «Заполнить».

Проанализируем пример кода процедуры заполнения для внешней обработки:


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

КонецПроцедуры

Вариант 2. Использование штатных механизмов цен контрагентов

Если требуется обойтись без программирования, разберем, как решить задачу стандартными инструментами конфигурации.

  1. Заполнение прайс-листа поставщика по общим ценам:

    Создадим документ «Установка цен номенклатуры контрагентов». Выберем контрагента и с помощью кнопки Заполнить → Заполнить по ценам номенклатуры перенесем цены из общего типа «Закупочная» в цены этого поставщика. Операция выполняется буквально в пару кликов.

  2. Автоматическая регистрация цен при поступлении:

    В документе «Поступление товаров и услуг» откроем форму Цены и валюта и установим флаг Регистрировать цены поставщика. При проведении документа вводимые цены будут автоматически сохранены в регистр ЦеныНоменклатурыКонтрагентов, и при следующих поступлениях от этого поставщика подставятся автоматически.

Вариант 3. Использование служебного контрагента

Рассмотрим еще один практический вариант организации учета. Создадим в справочнике «Контрагенты» служебный элемент (например, «Базовый поставщик»). Документом «Установка цен номенклатуры контрагентов» зададим для него закупочные цены.

При оформлении документа поступления от любого реального контрагента воспользуемся кнопкой Заполнить → Заполнить по ценам контрагента и укажем в качестве источника цен созданного служебного контрагента. Табличная часть документа заполнится действующими закупочными ценами без необходимости вносить их вручную.

← На главную