gifts2017

Замена дисконтных карт в 1С:Розница 2.1

Опубликовал strelez (strelez) в раздел Программирование - Практика программирования

Небольшое улучшение Розницы 2.1

Мы используем Розницу 2.1, почти довольны. Один из её недостатков - работа с дисконтными картами.

Если клиент хочет заменить карту, 1С предлагает документ Замена дисконтной карты. В соответствующий РС делается запись. Старая карта не блокируется. При этом не переносятся накопления. Да, есть механизм поиска предыдущих карт и выведение данных с учётом замен, но почему-то он не везде внедрён..

Я решил доработать систему, и добавил в документ Замена карты движения по накоплениям.

В модуле документа в обработке проведения

	// Движения по денежным средствам.
	МаркетинговыеАкцииСервер.ОтразитьРегистрацияЗаменыКартПокупателей(ДополнительныеСвойства, Движения, Отказ);
	//
	БонусныеБаллыСервер.ОтразитьБонусныеБаллы(ДополнительныеСвойства, Движения, Отказ);
	ПродажиСервер.ОтразитьПродажиПоДисконтнымКартам(ДополнительныеСвойства, Движения, Отказ);
	//

В модуле менеджера доработал запрос

Функция ТекстЗапросаТаблицаРегистрацияЗаменыКартПокупателей()
	ТекстЗапроса = "ВЫБРАТЬ
	               |	ЗаменаДисконтныхКартКартыПокупателей.Ссылка КАК Ссылка,
	               |	ЗаменаДисконтныхКарт.Дата КАК Период,
	               |	ЗаменаДисконтныхКартКартыПокупателей.КартаИсточник КАК КартаИсточник,
	               |	ЗаменаДисконтныхКартКартыПокупателей.КартаПриемник КАК КартаПриемник
	               |ПОМЕСТИТЬ Карты
	               |ИЗ
	               |	Документ.ЗаменаДисконтныхКарт.КартыПокупателей КАК ЗаменаДисконтныхКартКартыПокупателей
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаменаДисконтныхКарт КАК ЗаменаДисконтныхКарт
	               |		ПО ЗаменаДисконтныхКартКартыПокупателей.Ссылка = ЗаменаДисконтныхКарт.Ссылка
	               |ГДЕ
	               |	ЗаменаДисконтныхКартКартыПокупателей.Ссылка = &Ссылка
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	БонусныеБаллыОстатки.ДисконтнаяКарта,
	               |	БонусныеБаллыОстатки.БонуснаяПрограммаЛояльности,
	               |	БонусныеБаллыОстатки.НачисленоОстаток * -1 КАК Начислено,
	               |	БонусныеБаллыОстатки.КСписаниюОстаток * -1 КАК КСписанию
	               |ИЗ
	               |	РегистрНакопления.БонусныеБаллы.Остатки(
	               |			,
	               |			ДисконтнаяКарта В
	               |				(ВЫБРАТЬ
	               |					Карты.КартаИсточник
	               |				ИЗ
	               |					Карты)) КАК БонусныеБаллыОстатки
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Карты КАК Карты
	               |		ПО БонусныеБаллыОстатки.ДисконтнаяКарта = Карты.КартаИсточник
	               |
	               |ОБЪЕДИНИТЬ ВСЕ
	               |
	               |ВЫБРАТЬ
	               |	Карты.КартаПриемник,
	               |	БонусныеБаллыОстатки.БонуснаяПрограммаЛояльности,
	               |	БонусныеБаллыОстатки.НачисленоОстаток,
	               |	БонусныеБаллыОстатки.КСписаниюОстаток
	               |ИЗ
	               |	РегистрНакопления.БонусныеБаллы.Остатки(
	               |			,
	               |			ДисконтнаяКарта В
	               |				(ВЫБРАТЬ
	               |					Карты.КартаИсточник
	               |				ИЗ
	               |					Карты)) КАК БонусныеБаллыОстатки
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Карты КАК Карты
	               |		ПО БонусныеБаллыОстатки.ДисконтнаяКарта = Карты.КартаИсточник
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта,
	               |	ПродажиПоДисконтнымКартамОбороты.ВладелецДисконтнойКарты,
	               |	-1 * СУММА(ПродажиПоДисконтнымКартамОбороты.СуммаОборот) КАК Сумма,
	               |	-1 * СУММА(ПродажиПоДисконтнымКартамОбороты.КоличествоОборот) КАК Количество
	               |ИЗ
	               |	РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты(
	               |			,
	               |			,
	               |			Период,
	               |			ДисконтнаяКарта В
	               |				(ВЫБРАТЬ
	               |					Карты.КартаИсточник
	               |				ИЗ
	               |					Карты)) КАК ПродажиПоДисконтнымКартамОбороты
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Карты КАК Карты
	               |		ПО ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта = Карты.КартаИсточник
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта,
	               |	ПродажиПоДисконтнымКартамОбороты.ВладелецДисконтнойКарты
	               |
	               |ОБЪЕДИНИТЬ ВСЕ
	               |
	               |ВЫБРАТЬ
	               |	Карты.КартаПриемник,
	               |	ПродажиПоДисконтнымКартамОбороты.ВладелецДисконтнойКарты,
	               |	СУММА(ПродажиПоДисконтнымКартамОбороты.СуммаОборот),
	               |	СУММА(ПродажиПоДисконтнымКартамОбороты.КоличествоОборот)
	               |ИЗ
	               |	РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты(
	               |			,
	               |			,
	               |			Период,
	               |			ДисконтнаяКарта В
	               |				(ВЫБРАТЬ
	               |					Карты.КартаИсточник
	               |				ИЗ
	               |					Карты)) КАК ПродажиПоДисконтнымКартамОбороты
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Карты КАК Карты
	               |		ПО ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта = Карты.КартаИсточник
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта,
	               |	ПродажиПоДисконтнымКартамОбороты.ВладелецДисконтнойКарты,
	               |	Карты.КартаПриемник
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ЗаменаДисконтныхКартКартыПокупателей.Ссылка КАК Ссылка,
	               |	ЗаменаДисконтныхКарт.Дата КАК Период,
	               |	ЗаменаДисконтныхКартКартыПокупателей.КартаИсточник КАК КартаИсточник,
	               |	ЗаменаДисконтныхКартКартыПокупателей.КартаПриемник КАК КартаПриемник
	               |ИЗ
	               |	Документ.ЗаменаДисконтныхКарт.КартыПокупателей КАК ЗаменаДисконтныхКартКартыПокупателей
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаменаДисконтныхКарт КАК ЗаменаДисконтныхКарт
	               |		ПО ЗаменаДисконтныхКартКартыПокупателей.Ссылка = ЗаменаДисконтныхКарт.Ссылка
	               |ГДЕ
	               |	ЗаменаДисконтныхКартКартыПокупателей.Ссылка = &Ссылка";
	
	Возврат ТекстЗапроса;
	
КонецФункции

Время выполнения запроса менее секунды.

И также в модуль менеджера в процедуру инициализации

	ТаблицыДляДвижений = СтруктураДополнительныеСвойства.ТаблицыДляДвижений;
	ТаблицыДляДвижений.Вставить("ТаблицаРегистрацияЗаменыКартПокупателей", МассивРезультатов[3].Выгрузить());
	ТаблицыДляДвижений.Вставить("ТаблицаБонусныеБаллы", МассивРезультатов[1].Выгрузить());
	ТаблицыДляДвижений.Вставить("ТаблицаПродажиПоДисконтнымКартам", МассивРезультатов[2].Выгрузить());

Теперь все остатки на одной карте, удобно смотреть отчёты и т.д.

Буду рад, если кому-то поможет.

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа