Частичное оформление возврата по эквайрингу. УТ 11.5

Частичный возврат в УТ 11.5 можно сделать штатно, как именно написано на инфостарте:

Возврат товаров — Возврат товаров от розничного покупателя.
Создаем, заполняем, оформляем, на основании этого документа создаем эквайринговую операцию или расходный кассовый ордер или списание безналичных ДС, в зависимости как проходила оплата.

Можно даже хорошо прикрутить это в права доступа, как написано на инфостарте:

1) Создал новый профиль группы доступа (ну и затем, соответственно, саму группу доступа) и назвал «Частичный возврат по карте».

2) Добавил роли (все эти роли находятся во вкладке «Объекты УТ11, КА2, УП2»):
— «Добавление изменение возвратов товаров от клиента»
— «Добавление изменение документов по кассе»
— «Добавление изменение операций по платежным картам»

3) Добавил кассиров в данную группу доступа.
Работает.

Но клиент хочет чтобы было просто и доступно кассирам. Т.е. при нажатии кнопки «Возврат по чеку» нужно отменить штатное поведение, когда при выборе одной позиции чека она выделает все позиции чека. Потому что клиенты совершают дорогие покупки на 50-70 тысяч и если сделать возврат всего чека, сумма не сразу вернется на карту и нельзя будет выкупить остальные товары.

Расширяем в документе ЧекККМ форму «ОформлениеВозвратаДеньВДень«:

&НаКлиенте
&ИзменениеИКонтроль("ТаблицаТоваровВыбранПриИзменении")
//Осипов - чтобы возврат можно было делать частично
Процедура чвпэ_ТаблицаТоваровВыбранПриИзменении(Элемент)

	ПодобраноПозиций = 0;
	Всего            = 0;

	ТекущиеДанные = Элементы.ТаблицаТоваров.ТекущиеДанные;

	НоменклатураНабора   = ТекущиеДанные.НоменклатураНабора;
	ХарактеристикаНабора = ТекущиеДанные.ХарактеристикаНабора;

	ЧекККМ        = ТекущиеДанные.ЧекККМ;
	ОплаченКартой = ТекущиеДанные.ОплаченКартой;
	ЦенаЗадаетсяЗаНабор = ТекущиеДанные.ВариантРасчетаЦеныНабора = ПредопределенноеЗначение("Перечисление.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоДолям")
	ИЛИ ТекущиеДанные.ВариантРасчетаЦеныНабора = ПредопределенноеЗначение("Перечисление.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоЦенам");

	Для Каждого СтрокаТЧ Из ТаблицаТоваров Цикл
#Удаление     
		Если СтрокаТЧ.ЧекККМ = ЧекККМ
			И (ОплаченКартой
			ИЛИ (СтрокаТЧ.НоменклатураНабора = НоменклатураНабора
			И СтрокаТЧ.ХарактеристикаНабора = ХарактеристикаНабора)) Тогда
			СтрокаТЧ.Выбран = ТекущиеДанные.Выбран;
		КонецЕсли;
#КонецУдаления
	Если НЕ СтрокаТЧ.ЧекККМ = ЧекККМ Тогда
			СтрокаТЧ.Выбран = Ложь;
		КонецЕсли;
		Если СтрокаТЧ.Выбран Тогда
			ПодобраноПозиций = ПодобраноПозиций + 1;
			Всего = Всего + СтрокаТЧ.Сумма;
		КонецЕсли;			
	КонецЦикла;

	ОтложенныйЧекККМВозврат = ТекущиеДанные.ОтложенныйЧекККМВозврат;
	Если ЗначениеЗаполнено(ОтложенныйЧекККМВозврат) Тогда
		Элементы.ФормаОформитьВозврат.Заголовок = ПредставленияЗаголовкаКнопкиОформитьВозврат.ОткрытьОтложенныйВозврат;
	Иначе
		Элементы.ФормаОформитьВозврат.Заголовок = ПредставленияЗаголовкаКнопкиОформитьВозврат.ОформитьВозврат;
	КонецЕсли;
КонецПроцедуры

Увы, приходится использовать изменения и контроль… Но зато работает, как мне показалось.

UPD: Увы, при нажатии кнопки «Оформить возврат» выбранные галочки игнорируются, возврат осуществляется целиком по чеку:

А там удалить строки нельзя. Но, оказывается, можно дать права пользователю на корректировку строк:

Я думал, достаточно дать право на редактирование в справочнике НастройкиПродажДляПользователей:

Но в справочнике «Настройки продаж» у пользователя корректировки разрешены:

Отладчик был не доступен, посмотрел как работает возврат у другого клиента в УТ 11.4.13.46

Расширяю документ ЧекККМВозврат, форму ФормаДокументаРМК:

&НаКлиенте
Процедура чвРМК_ПриОткрытииПосле(Отказ)
	КэшированныеЗначения = ?(КэшированныеЗначения = Неопределено, ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения(), КэшированныеЗначения);
	Элементы.Товары.ТолькоПросмотр = ложь;
КонецПроцедуры

Кэшированные значения прописываю, потому что в таком режиме они не устанавливаются и выдает ошибку после удаления каждой строки.

К сожалению, расширение из УТ 11.4 не удалось подключить к УТ 11.5, пришлось ждать возможности попасть в конфигуратор.

Когда получилось с конфигуратором, удаление строки на возврат не помогло, чек не пробивается, ошибка:

Нельзя удалить эту строку. Сумма оплаты платежными картами станет больше суммы товарных позиций. Операция не поддерживается.

При этом в поле «Картами» выводится вся сумма чека:

Приходится долго играть с кодом (без возможности отладки), в конце концов структура вырисовывается:

&Вместо("ТоварыПередУдалением")
Процедура чвпэ_ТоварыПередУдалением(Элемент, Отказ)
	
	//Чтобы дало пробить
	Если ИспользоватьОплатуПлатежнымиКартами 
		И Объект.ОплатаПлатежнымиКартами.Количество() = 1 
		И ОбщаяСуммаОплатыПлатежнымиКартами > СуммаДокумента - Элементы.Товары.ТекущиеДанные.Сумма Тогда
		
		Объект.ОплатаПлатежнымиКартами[0].Сумма = СуммаДокумента - Элементы.Товары.ТекущиеДанные.Сумма;
		
	КонецЕсли;
	
	Возврат; //Осипов - отключаем контроль
	
	ПродолжитьВызов(Элемент, Отказ);
КонецПроцедуры

Как видно, нужно было менять сумму в табличную части оплат чека, остально 1С сделает сама.

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

Среда: УТ 11.5.11.70 Объем: 2.5 час.

fixin

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

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

комментариев 5

  1. Константин:

    Благодарю Вас, о великий человек, за подробную инструкцию исправления штатного безобразного функционала, всю голову поломал над решением этой задачи:)

  2. Михаил:

    Благодарю, сэкономил время.

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

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