Здравствуйте!
К сожалению, в типовой конфигурации 1С:Управление торговлей 11.4 не предусмотрен штатный механизм (через настройки или функциональные опции) для автоматического заполнения закупочной цены последним известным значением в момент создания нового документа "Установка цен номенклатуры" без доработки конфигуратора.
Документ "Установка цен номенклатуры" в УТ 11.4 предназначен в первую очередь для регистрации цен продажи, а закупочные цены (управленческая себестоимость или цены поступления) обычно хранятся и управляются отдельно в регистрах партионного учета или документах поступления.
Вариант 1: Использование штатного функционала "Расчет по данным ИБ" (Без кода)
Самый близкий к вашему запросу штатный механизм — это использование команды "Заполнить и рассчитать" в самом документе "Установка цен номенклатуры".
В новом документе "Установка цен номенклатуры" добавьте нужные позиции номенклатуры.
Нажмите кнопку "Заполнить и рассчитать" (или просто "Заполнить" -> "Заполнить товары").
Выберите действие "Рассчитать вычисляемые цены".
В открывшейся форме расчета вы можете настроить правило расчета, например, установить "Базовый вид цены" — это может быть ваш существующий вид цены закупки.
Проблема: Этот механизм рассчитывает цены продажи на основе цены закупки, но он не заполняет колонку "ЦенаУчПокупателя" (которая является входным полем для документа) из предыдущего значения. Он лишь показывает вам цену закупки для справки, если она прописана в настройках вида цены продажи.
Вариант 2: Доработка конфигуратора (Требует небольшого изменения кода)
Если вам нужно, чтобы поле ЦенаУчПокупателя заполнялось автоматически сразу при добавлении новой строки в табличную часть документа, без ручных действий пользователя, потребуется небольшая доработка через Конфигуратор 1С.
ВАЖНО: Любые изменения в типовой конфигурации влекут за собой необходимость обновления конфигурации с сохранением доработок (снятие с поддержки с сохранением возможности обновления). Рекомендуется делать это под руководством специалиста 1С или иметь резервную копию базы.
Инструкция по доработке:
Необходимо добавить код, который при добавлении новой строки в табличную часть документа "Установка цен номенклатуры" будет искать последнюю зарегистрированную цену закупки для данной номенклатуры.
Откройте Конфигуратор 1С.
В дереве объектов конфигурации найдите Документы -> УстановкаЦенНоменклатуры.
Разверните документ и найдите Формы -> ФормаДокумента. Откройте ее двойным щелчком.
В модуле формы (вкладка "Модуль") найдите процедуру, отвечающую за работу табличной части. Часто это процедуры, связанные с обработкой строк при добавлении.
Наиболее подходящее место для вставки кода — это обработчик события табличной части "ПриНачалеРедактирования" или "ПриИзменении".
Примерный код, который нужно реализовать:
Нам нужно получить последнюю цену из регистра сведений "ЦеныНоменклатуры".
Вам нужно будет создать новую процедуру на клиенте, которая вызывает серверную процедуру для получения цены.
(Так как код может быть довольно объемным и зависит от точного макета вашей формы 11.4, я дам вам концепцию и примерный запрос на сервер):
Модуль формы документа "УстановкаЦенНоменклатуры" (клиент):
Нам нужно вставить вызов серверной функции при начале редактирования строки:
bsl
&НаКлиенте
Процедура ТоварыПриНачалеРедактирования(Элемент, _Отмена)
// Эта процедура должна вызывать серверную функцию, если поле ЦенаУчПокупателя пустое
Если Элементы.Товары.ТекущиеДанные.ЦенаУчПокупателя = 0 Тогда
ПоследняяЦена = ПолучитьПоследнююЗакупочнуюЦенуНаСервере(Элементы.Товары.ТекущиеДанные.Номенклатура);
Если ПоследняяЦена <> 0 Тогда
Элементы.Товары.ТекущиеДанные.ЦенаУчПокупателя = ПоследняяЦена;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Используйте код с осторожностью.
Модуль формы документа "УстановкаЦенНоменклатуры" (сервер):
И реализовать функцию на сервере:
bsl
&НаСервере
Функция ПолучитьПоследнююЗакупочнуюЦенуНаСервере(Номенклатура)
Если Номенклатура = Неопределено Тогда
Возврат 0;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ЦеныНоменклатуры.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|ГДЕ
| ЦеныНоменклатуры.Номенклатура = &Номенклатура
| И ЦеныНоменклатуры.ВидЦены В (&ВидыЦенЗакупки)
Используйте код с осторожностью.
|
|УПОРЯДОЧИТЬ ПО
| ЦеныНоменклатуры.Период УБЫВ";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
// Вам нужно указать здесь ваши конкретные Виды Цен, которые вы считаете "закупочными"
// Например, "Цена поставщика (вх)" или "Себестоимость"
Запрос.УстановитьПараметр("ВидыЦенЗакупки", Справочники.ВидыЦен.НайтиПоНаименованию("Цена поставщика (вх)"));
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
### Резюме
* **Без кода:** Используйте штатную кнопку "Заполнить и рассчитать" -> "Рассчитать вычисляемые цены", чтобы увидеть базовую цену (закупочную) и вручную скопировать ее в поле "ЦенаУчПокупателя".
* **С кодом:** Это потребует внесения изменений в модуль формы документа "УстановкаЦенНоменклатуры", что не рекомендуется для начинающих пользователей без опыта работы с Конфигуратором 1С.