Перенос остатков по дисконтным картам (картам лояльности) в УТ 11




Как перенести данные о накоплениях по дисконтным картам из других программ в УТ 11.

В данной статье хочу поделиться опытом переноса данных о накплениях по дисконтным картам из 1С 7.7 ТиС (Excel) в УТ 11.

Прежде всего, в 1С 7.7 ТиС нет стандартного функционала работы с накопительными картами, поэтому каждый дописывает конфигурацию как хочет. В итоге перенос данных проводился с помощью Excel, что делает данный метод более универсальным.

Столкнувшись с такой проблемой впервые, я полез в интернет в поисках ответа. Результат оказался не очень информативным:

Накопление производится не по карте а по партнеру.
Соответственно, нужно просто ввести данные о продажах за предыдущий период.
Продажи хранятся в регистре ВыручкаИСебестоимостьПродаж

Это можно сделать корректировкой регистров.

С уважением,
отдел тех. поддержки "1С"

1С:Предприятие 8.2 (8.2.17.153) "Управление торговлей ", редакция 11.0 (11.0.9.15)
Ситуация: был переход с «Управление Торговлей» редакция, 10.3 на «Управление Торговлей» редакция,11.0. Необходимо внести в «Управление Торговлей» редакция,11.0 накопленные суммы скидок по накопительным картам. Подскажите, как внести эти данные

Весь процесс можно разделить на несколько этапов:

  1. Создаение контрагентов (партнеров). На этом шаге я подробно останавливаться не буду т.к. контрагенты создаются либо при типовом переносе данных из одной базы в другую, либо универсальной обработкой. Важно, что у всех партнеров должна стоять галочка "Клиент", иначе не будет доступа к картам лояльности
  2. Создание карт лояльности. На данном шаге так же можно воспользоваться универсальной обработкой по загрузке данных в справочник
  3. Создание ключей аналитик. По номенклатуре создаем предварительно руками. По партнерам ключи создаются автоматически обработкой
  4. Создание и заполнение документа Корректировка регистров

 Основная сложность всего этого процесса заключается в том, что мы не можем воспользоваться универсальной обработкой по загрузке в табличную часть документа т.к. табличной частью документа Корректировка регистров является состав регистров, а дальше формируется динамическая таблица.
Поэтому мне пришлось написать небольшую обработку, которой я и выполняю 3 и 4 пункт инструкции.

&НаСервере
Процедура ВыполнитьЗагрузкуНаСервере()

Док = Документы.КорректировкаРегистров.СоздатьДокумент();
Док.Дата = ТекущаяДата();
ДвиженияКорр = Док.Движения;

СтрокаРег = док.ТаблицаРегистров.Добавить();
СтрокаРег.Имя = Метаданные.РегистрыНакопления.ВыручкаИСебестоимостьПродаж.Имя;

док.Записать();

перемОрганизация = Справочники.Организации.НайтиПоНаименованию("Наше ИП");

ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ТабДок = ОбработкаОбъект.ПолучитьМакет("Макет");
Для текСтрока = 1 По ТабДок.ВысотаТаблицы Цикл
текКлиент = ТабДок.Область(текСтрока,1).Текст;
текСумма = ТабДок.Область(текСтрока,3).Текст;


СтрокаЗапись = док.Движения.ВыручкаИСебестоимостьПродаж.Добавить();
СтрокаЗапись.Период = Дата("2024", "01", "01");
СтрокаЗапись.Активность = Истина;
СтрокаЗапись.Регистратор = Док.Ссылка;
СтрокаЗапись.АналитикаУчетаНоменклатуры = Справочники.КлючиАналитикиУчетаНоменклатуры.НайтиПоНаименованию("для регистра",Истина);

//сначала поищем в регистре сведений
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| АналитикаУчетаПоПартнерам.КлючАналитики КАК КлючАналитики
|ИЗ
| РегистрСведений.АналитикаУчетаПоПартнерам КАК АналитикаУчетаПоПартнерам
|ГДЕ
| АналитикаУчетаПоПартнерам.Партнер = &Партнер
| И АналитикаУчетаПоПартнерам.Организация = &Организация
| И АналитикаУчетаПоПартнерам.Контрагент = &Контрагент";

Запрос.УстановитьПараметр("Контрагент", Справочники.Контрагенты.НайтиПоНаименованию(текКлиент));
Запрос.УстановитьПараметр("Организация", Справочники.Организации.НайтиПоНаименованию("Наше ИП"));
Запрос.УстановитьПараметр("Партнер", Справочники.Партнеры.НайтиПоНаименованию(текКлиент));

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

перемНашли = Ложь;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
перемКлюч = ВыборкаДетальныеЗаписи.КлючАналитики;
перемНашли = Истина;
КонецЦикла;

Если перемНашли Тогда

Иначе
//надо поискать в справочнике ключей
перемКлюч = Справочники.КлючиАналитикиУчетаПоПартнерам.НайтиПоНаименованию(текКлиент+"; "+перемОрганизация.Наименование+"; "+текКлиент);
Если перемКлюч <> Справочники.КлючиАналитикиУчетаПоПартнерам.ПустаяСсылка() Тогда
//у нас есть ключ в справочнике но нет в регистре
//дальше нам надо эту запись закинуть и в регистр сведений
НоваяЗапись = РегистрыСведений.АналитикаУчетаПоПартнерам.СоздатьМенеджерЗаписи();
НоваяЗапись.Партнер = Справочники.Партнеры.НайтиПоНаименованию(текКлиент);
НоваяЗапись.Организация = перемОрганизация;
НоваяЗапись.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(текКлиент);
НоваяЗапись.КлючАналитики = перемКлюч;
НоваяЗапись.Записать(Истина);
Иначе
//создаем ключ аналитики
НовыйСпр = Справочники.КлючиАналитикиУчетаПоПартнерам.СоздатьЭлемент();
НовыйСпр.Организация = Справочники.Организации.НайтиПоНаименованию("Наше ИП");
НовыйСпр.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(текКлиент);
НовыйСпр.Партнер = Справочники.Партнеры.НайтиПоНаименованию(текКлиент);
НовыйСпр.Наименование = текКлиент+"; "+НовыйСпр.Организация.Наименование+"; "+текКлиент;
НовыйСпр.Записать();
перемКлюч = НовыйСпр.Ссылка;

//дальше нам надо эту запись закинуть и в регистр сведений
НоваяЗапись = РегистрыСведений.АналитикаУчетаПоПартнерам.СоздатьМенеджерЗаписи();
НоваяЗапись.Партнер = Справочники.Партнеры.НайтиПоНаименованию(текКлиент);
НоваяЗапись.Организация = перемОрганизация;
НоваяЗапись.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(текКлиент);
НоваяЗапись.КлючАналитики = перемКлюч;
НоваяЗапись.Записать(Истина);
КонецЕсли;
КонецЕсли;

СтрокаЗапись.АналитикаУчетаПоПартнерам = перемКлюч;
СтрокаЗапись.ТипЗапасов = Перечисления.ТипыЗапасов.Товар;
СтрокаЗапись.ВидЗапасов = Справочники.ВидыЗапасов.НайтиПоНаименованию("Собственный товар; Организация: Наше ИП");
СтрокаЗапись.РазделУчета = Перечисления.РазделыУчетаСебестоимостиТоваров.ТоварыНаСкладах;
СтрокаЗапись.СуммаВыручки = текСумма;
СтрокаЗапись.СуммаВыручкиБезНДС = текСумма;
СтрокаЗапись.ВалютаВзаиморасчетов = Справочники.Валюты.НайтиПоНаименованию("RUB");
СтрокаЗапись.ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("RUB");
СтрокаЗапись.СуммаВВалютеВзаиморасчетов = текСумма;
СтрокаЗапись.СуммаВВалютеДокумента = текСумма;
СтрокаЗапись.СуммаВыручкиРегл = текСумма;
СтрокаЗапись.СуммаВыручкиСНДСРегл = текСумма;
СтрокаЗапись.ВидДеятельностиНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС;
СтрокаЗапись.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияКлиенту;
СтрокаЗапись.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС;

КонецЦикла;

док.Записать();

КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузку(Команда)
ВыполнитьЗагрузкуНаСервере();
КонецПроцедуры

Ключ учета номенклатуры я предварительно создал в справочнике (Ключи аналитики учета номенклатуры)


Элементы в справочнике Ключи анатилики учета по партнерам и Регистре сведений Аналитика учета по партнерам у меня предварительно ищутся по скольку клиент уже работал в данной базе на момент загрузки данных.
Данные о накоплениях по картам лояльности скопированы в макет обработки

В заключении хочу сказать, что в процессе работы обращался к нескольким статьям в интернете по заполнению документа Корректировка регистров, но не все они содержали достоверную информацию.

Кроме этого, очень много времени было потрачено из-за того, что я создавал элемент справочника Ключи аналитики учета по партнерам, но не делал соответствующую запись в регистр сведений Аналитика учета по партнерам. Об этом тоже мало где говориться на просторах всемирной паутины. 

И не забудьте подставлять корректные суммы в ресурсы, если ваша тоговля проходит с НДС

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

1 Comment

  1. VCPro

    (0) В общем смысле перенос данных о накоплениях по дисконтным картам происходит из электронный таблицы. Поэтому нужно только придумать каким образом достать данные из вашей изначальной базы (например написать отчет)

    Reply

Leave a Comment

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