Установка цен в карточке товара при проведении заказа поставщику

Клиент попросил, чтобы при проведении заказа поставщику устанавливались цены в карточке товара.

Сначала я хотел делать просто поля для редактирования цен в форме заказа, но потом подумал, что эти цены лучше сохранять с документом.

Скопировал поля в заказ из карточки товара:

Немножко потупил, поля не добавлялись, потом дошло, что нужно разрешить в поддержке изменение заказа.

Проверил, внес цены на тестовый товар (в продакшне после обновления, риск минимален):

До проведения цены были не заполнены:

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

Важно! Чтобы клиент не установил цены при проведении документов заказа задним числом я делаю установку цен только при проведении документов сегодняшнего дня.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	//+++Осипов 2022-01-21 установка цен в карточке
	Если НачалоДня(Дата) = НачалоДня(ТекущаяДата()) Тогда
		Для Каждого Строка ИЗ Товары Цикл
			О = Строка.Номенклатура.ПолучитьОбъект();
			_Доп.ПрисвоитьБезопасноЕслиНеНоль(О._ЦенаБезнал, Строка._ЦенаБезнал);
			_Доп.ПрисвоитьБезопасноЕслиНеНоль(О._ЦенаРозница, Строка._ЦенаРозница);
			_Доп.ПрисвоитьБезопасноЕслиНеНоль(О._ЦенаОпт, Строка._ЦенаОпт);
			_Доп.ПрисвоитьБезопасноЕслиНеНоль(О._ЦенаСББезНДС, Строка._ЦенаСББезНДС);
			Если О.Модифицированность() Тогда 
				О.Записать();
				Сообщить("Изменены цены из заказа у товара: " + О);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	//---Осипов 2022-01-21 установка цен в карточке
	...
КонецПроцедуры

После сдачи работы у клиента возникло заблуждение, что если цены не поставить, то они очистятся, я проверил — такое опасение не подтвердилось, пустые цены не записывали ноль. Но для успокоения паранойи клиента я сделал ему кнопочку, которую он попросил — которая заполняет цены из карточки.

Вот код для этого:

&НаКлиенте
Процедура дор_ЗаполнитьЦены(Команда) Экспорт
	дор_ЗаполнитьЦеныНаСервере();
	ПоказатьПредупреждение(, "Цены из карточки обновлены");
КонецПроцедуры

&НаСервере
Процедура дор_ЗаполнитьЦеныНаСервере() Экспорт
	Для Каждого Строка ИЗ Объект.Товары Цикл
		Если НЕ ЗначениеЗаполнено(Строка.Номенклатура) Тогда
			Продолжить;
		КонецЕсли;
		_Доп.ПрисвоитьБезопасно(Строка._ЦенаБезнал, Строка.Номенклатура._ЦенаБезнал);
		_Доп.ПрисвоитьБезопасно(Строка._ЦенаРозница, Строка.Номенклатура._ЦенаРозница);
		_Доп.ПрисвоитьБезопасно(Строка._ЦенаОпт, Строка.Номенклатура._ЦенаОпт);
		_Доп.ПрисвоитьБезопасно(Строка._ЦенаСББезНДС, Строка.Номенклатура._ЦенаСББезНДС);
	КонецЦикла;
	
КонецПроцедуры


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	//Осипов 2022-01-21 +++
	ИмяКоманды = "дор_ЗаполнитьЦены";
 	КомандаФормы = ЭтаФорма.Команды.Добавить(ИмяКоманды);
 	КомандаФормы.Действие = ИмяКоманды;
 	КомандаФормы.Заголовок = "Заполнить цены карточки";
 	КомандаФормы.ИзменяетСохраняемыеДанные = истина;
 	КомандаФормы.Отображение = ОтображениеКнопки.КартинкаИТекст;

 	НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Элементы.ТоварыЦены);
 	НовыйЭлемент.Вид = ВидКнопкиФормы.Гиперссылка;
 	НовыйЭлемент.ИмяКоманды = ИмяКоманды;
	//Осипов 2022-01-21 ---

Я в принципе, хотел вынести код в расширение, но у клиента РИБ, а расширения с поддержкой РИБ стали работать только после 8.3.12, как мне подсказали на Мисте. Поэтому решил, что уже вынесу код при обновлении, если оно когда-нибудь будет.

Среда: Розница для Беларуси, редакция 2.2. Локализация для Республики Беларусь: СООО «1С-Минск». (2.2.11.2)

Объем: 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *