Установка цен в карточке товара при проведении заказа поставщику
Клиент попросил, чтобы при проведении заказа поставщику устанавливались цены в карточке товара.
Сначала я хотел делать просто поля для редактирования цен в форме заказа, но потом подумал, что эти цены лучше сохранять с документом.
Скопировал поля в заказ из карточки товара:
Немножко потупил, поля не добавлялись, потом дошло, что нужно разрешить в поддержке изменение заказа.
Проверил, внес цены на тестовый товар (в продакшне после обновления, риск минимален):
До проведения цены были не заполнены:
После проведения цены установились из документа:
Важно! Чтобы клиент не установил цены при проведении документов заказа задним числом я делаю установку цен только при проведении документов сегодняшнего дня.
Процедура ОбработкаПроведения(Отказ, РежимПроведения) //+++Осипов 2022-01-21 установка цен в карточке Если НачалоДня(Дата) = НачалоДня(ТекущаяДата()) Тогда Для Каждого Строка ИЗ Товары Цикл О = Строка.Номенклатура.ПолучитьОбъект(); _Доп.ПрисвоитьБезопасноЕслиНеНоль(О._ЦенаБезнал, Строка._ЦенаБезнал); _Доп.ПрисвоитьБезопасноЕслиНеНоль(О._ЦенаРозница, Строка._ЦенаРозница); _Доп.ПрисвоитьБезопасноЕслиНеНоль(О._ЦенаОпт, Строка._ЦенаОпт); _Доп.ПрисвоитьБезопасноЕслиНеНоль(О._ЦенаСББезНДС, Строка._ЦенаСББезНДС); Если О.Модифицированность() Тогда О.Записать(); Сообщить("Изменены цены из заказа у товара: " + О); КонецЕсли; КонецЦикла; КонецЕсли; //---Осипов 2022-01-21 установка цен в карточке ... КонецПроцедуры
После сдачи работы у клиента возникло заблуждение, что если цены не поставить, то они очистятся, я проверил — такое опасение не подтвердилось, пустые цены не записывали ноль. Но для успокоения паранойи клиента я сделал ему кнопочку, которую он попросил — которая заполняет цены из карточки.
Вот код для этого:
&НаКлиенте Процедура дор_ЗаполнитьЦены(Команда) Экспорт дор_ЗаполнитьЦеныНаСервере(); ПоказатьПредупреждение(, "Цены из карточки обновлены"); КонецПроцедуры &НаСервере Процедура дор_ЗаполнитьЦеныНаСервере() Экспорт Для Каждого Строка ИЗ Объект.Товары Цикл Если НЕ ЗначениеЗаполнено(Строка.Номенклатура) Тогда Продолжить; КонецЕсли; _Доп.ПрисвоитьБезопасно(Строка._ЦенаБезнал, Строка.Номенклатура._ЦенаБезнал); _Доп.ПрисвоитьБезопасно(Строка._ЦенаРозница, Строка.Номенклатура._ЦенаРозница); _Доп.ПрисвоитьБезопасно(Строка._ЦенаОпт, Строка.Номенклатура._ЦенаОпт); _Доп.ПрисвоитьБезопасно(Строка._ЦенаСББезНДС, Строка.Номенклатура._ЦенаСББезНДС); КонецЦикла; КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //Осипов 2022-01-21 +++ ИмяКоманды = "дор_ЗаполнитьЦены"; КомандаФормы = ЭтаФорма.Команды.Добавить(ИмяКоманды); КомандаФормы.Действие = ИмяКоманды; КомандаФормы.Заголовок = "Заполнить цены карточки"; КомандаФормы.ИзменяетСохраняемыеДанные = истина; КомандаФормы.Отображение = ОтображениеКнопки.КартинкаИТекст; НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Элементы.ТоварыЦены); НовыйЭлемент.Вид = ВидКнопкиФормы.Гиперссылка; НовыйЭлемент.ИмяКоманды = ИмяКоманды; //Осипов 2022-01-21 ---
Я в принципе, хотел вынести код в расширение, но у клиента РИБ, а расширения с поддержкой РИБ стали работать только после 8.3.12, как мне подсказали на Мисте. Поэтому решил, что уже вынесу код при обновлении, если оно когда-нибудь будет.
Среда: Розница для Беларуси, редакция 2.2. Локализация для Республики Беларусь: СООО «1С-Минск». (2.2.11.2)
Объем: 1 час.
Свежие комментарии