Доработка автоматического ввода нового номера дисконтной карты в РМК. Розница 3.0

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

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

Запрос по поиску максимального кода протестировал в консоли кода:

 ВЫБРАТЬ
	МАКСИМУМ(ДисконтныеКарты.КодКартыШтрихкод) КАК Штрихкод
ИЗ
	Справочник.ДисконтныеКарты КАК ДисконтныеКарты
ГДЕ
	НЕ ДисконтныеКарты.ПометкаУдаления

На новой платформе в конструкторе можно использовать не включенные в расширение реквизиты — очень удобно:

Интересно, а если конструируешь запрос в конфигурации, он видит поля активных расширений? Думаю вряд ли.

Добавил программно кодом кнопку для генерации номера:

Но клиент попросил, чтобы кнопка помещалась в форму, поэтому уменьшили ширину поля номера карты с типовых 22 до 18:

Код расширения формы РМК получился таким:


&НаСервере
Процедура дор_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	
	//Осипов 2023-10-27 кнопка генерации нового номера
	
	//Укорачиваем чтобы кнопка влезла
	Элементы.НоваяКартаНомер.Ширина = 18;

	
	Привязка = Элементы.ГруппаНоваяКартаНомер;
	
	ИмяКоманды = "дор_СгенерироватьНомерНовойКарты";
 	КомандаФормы = ЭтаФорма.Команды.Добавить(ИмяКоманды);
 	КомандаФормы.Действие = ИмяКоманды;
 	КомандаФормы.Заголовок = "Сгенерировать номер новой карты";
 	КомандаФормы.ИзменяетСохраняемыеДанные = Ложь;
	//КомандаФормы.Картинка = БиблиотекаКартинок.дор_Молния;
	КомандаФормы.Картинка = БиблиотекаКартинок.ВнешнийИсточникДанныхКуб;
 	КомандаФормы.Отображение = ОтображениеКнопки.Картинка;

 	НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Привязка);
 	НовыйЭлемент.Вид = ВидКнопкиФормы.Гиперссылка;
 	НовыйЭлемент.ИмяКоманды = ИмяКоманды;
	
	
КонецПроцедуры


&НаКлиенте
Процедура дор_СгенерироватьНомерНовойКарты(Команда)
	НоваяКартаНомер = дор_НовыйКодКарты();
КонецПроцедуры

Функция дор_НовыйКодКарты()
	УстановитьПривелигерованныйДоступ(Истина);
	З = Новый Запрос();
	З.Текст = 
	"ВЫБРАТЬ
	|	ЕСТЬNULL(МАКСИМУМ(ДисконтныеКарты.КодКартыШтрихкод), 0) КАК Штрихкод
	|ИЗ
	|	Справочник.ДисконтныеКарты КАК ДисконтныеКарты
	|ГДЕ
	|	НЕ ДисконтныеКарты.ПометкаУдаления";
	Выборка = З.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда     
		Попытка
			Возврат Формат(Число(Выборка.Штрихкод) + 1, "ЧЦ=6; ЧДЦ=0; ЧВН=; ЧГ=");
		Исключение
		КонецПопытки
	КонецЕсли;      
	
	Возврат "000001";

КонецФункции

Среда: Розница 3.0.5.145 Платформа: 8.3.23.1912 Объем: 1 час

fixin

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

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

комментария 4

  1. rzd:

    Как обеспечивается уникальность номера?

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

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