Битва за кратность в УТ11

Клиент поставил задачу — для товара, у которого установлен дополнительный реквизит «Кратность» делать при продажах подбор количества, только кратный этому реквизиту.

Ну что же, начинаем корректировать места, где эта кратность встречается.

Место 1. Обработка ПодборТоваровВДокументПродажи

Расширяем процедуру ДобавитьВКорзинуНаКлиенте. Подменяем количество на кратное, если была подмена, выводим предупреждающее окно:

Подбирает правильно:

Проверим граничные значения количества:

&НаКлиенте
&Вместо("ДобавитьВКорзинуНаКлиенте")
Функция дор_ДобавитьВКорзинуНаКлиенте(ПараметрыТовара, НовыеСтроки)
	//Осипов 2021-07-30 контролируем количество товара
	Кэш = Новый Структура();
	Для Каждого Строка ИЗ НовыеСтроки Цикл
		_Сервер.ИзмененоЛиКоличествоПодКратность(Строка.Номенклатура, Строка.КоличествоУпаковок, Кэш); 
	КонецЦикла;
	Если Кэш.Свойство("Текст") Тогда
		ПоказатьПредупреждение(, "Изменена кратность: " + Символы.ПС + Кэш.Текст);
	КонецЕсли;
	Результат = ПродолжитьВызов(ПараметрыТовара, НовыеСтроки);
	Возврат Результат;
КонецФункции

Место 2. Форма ФормаДокументаРМК чека ККМ.

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

Код отрабатывает должным образом:

&НаКлиенте
Процедура дор_ТоварыКоличествоУпаковокПриИзмененииПеред(Элемент)
	//Осипов 2021-07-30 контролируем количество товара под кратность
	Кэш = Новый Структура();
	ТекСтрока = Элементы.Товары.ТекущиеДанные;
	Если  _Сервер.ИзмененоЛиКоличествоПодКратность(ТекСтрока.Номенклатура, ТекСтрока.КоличествоУпаковок, Кэш) Тогда 
		ПоказатьПредупреждение(, "Изменена кратность: " + Символы.ПС + Кэш.Текст);
	КонецЕсли;
КонецПроцедуры

Место 3. Форма ФормаДокумента реализации товаров.

Код выглядит аналогично чеку:

&НаКлиенте
Процедура дор_ТоварыКоличествоУпаковокПриИзмененииПеред()
	//ОСипов 2021-08-02 добавляем контроль
	Кэш = Новый Структура();
	ТекСтрока = Элементы.Товары.ТекущиеДанные;
	Если  _Сервер.ИзмененоЛиКоличествоПодКратность(ТекСтрока.Номенклатура, ТекСтрока.КоличествоУпаковок, Кэш) Тогда 
		ПоказатьПредупреждение(, "Изменена кратность: " + Символы.ПС + Кэш.Текст);
	КонецЕсли;
КонецПроцедуры

Работает корректно:

Общий код

Код по проверке кратности находится в Модуль _Сервер:

Функция	ИзмененоЛиКоличествоПодКратность(Номенклатура, Количество, Кэш) Экспорт
	//истина - если изменено
	КратностьРеквизит = _Сервер.ДатьДопСвойствоВТЧ(Номенклатура.ДополнительныеРеквизиты, "КратностьПродажи");
	Если ЗначениеЗаполнено(КратностьРеквизит) Тогда
		Попытка
			КратностьСтрокой = СокрЛП(КратностьРеквизит.Наименование);
			Кратность = Число(КратностьСтрокой);
		Исключение
			Сообщить("У номенклатуры: " + Номенклатура + " кратность задана не числом: " + КратностьСтрокой);
		КонецПопытки;
		КоличествоНач = Количество;
		Количество = Число(Кратность) * (Цел(Количество/Кратность) + ?(Количество % Кратность = 0, 0, 1));
		Если НЕ Кэш.Свойство("Текст") Тогда
			Кэш.Вставить("Текст", "");
		КонецЕсли;
		Кэш.Текст = Кэш.Текст + ?(Кэш.Текст = "", "", Символы.ПС) + "Количество изменено с: " + КоличествоНач + " на: " + Количество + " (кратность " + Кратность + ")";
		Возврат истина;
	КонецЕсли;
	Возврат ложь;
КонецФункции

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

Объем план: 1.2 час Среда: УТ 11.4.13.46

fixin

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

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

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

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