Имя: Пароль:
1C
1С v8
Вопрос по регистру накопления
0 Zombi
 
23.12.11
09:32
Конфигурация УТ 10.3. Хочу сделать обработку, устанавливающую определенную сумму продаж на дисконтную карту, для этого надо двигать РН "ПродажиПоДисконтнымКартам", написал вот такой код:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   Если НЕ ЗначениеЗаполнено(Карта) Тогда
       Предупреждение("Выберите карту!");
   ИначеЕсли Скидка10 = Истина Тогда
       Запрос = Новый Запрос;
       Запрос.Текст = "
       |ВЫБРАТЬ
       |    ОтчетОРозничныхПродажах.Ссылка
       |ИЗ
       |    Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах";
       
       Выборка = Запрос.Выполнить().Выбрать();
       Выборка.Следующий();
       Документ = Выборка.Ссылка;
       Док = Документ.ПолучитьОбъект();
       НаборЗап=РегистрыНакопления.ПродажиПоДисконтнымКартам.СоздатьНаборЗаписей();
       НаборЗап.Отбор.Регистратор.Установить(Документ);
       
       Движение = НаборЗап.Добавить();
       
       Движение.Период = ТекущаяДата();
       Движение.ДисконтнаяКарта = Карта;
       Движение.ВладелецДисконтнойКарты = Карта.Владелец;
       Движение.завДисконтнаяГруппа = Справочники.ДисконтныеГруппы.НайтиПоКоду("000000002");      
       Движение.Сумма = 70000;
       
       Движение = НаборЗап.Добавить();
       
       Движение.Период = ТекущаяДата();
       Движение.ДисконтнаяКарта = Карта;
       Движение.ВладелецДисконтнойКарты = Карта.Владелец;
       Движение.завДисконтнаяГруппа = Справочники.ДисконтныеГруппы.НайтиПоКоду("000000003");      
       Движение.Сумма = 20000;
       
       НаборЗап.Записать();
   Иначе
       Предупреждение("Не выбрана скидка!");
   КонецЕсли;
       
КонецПроцедуры


Выбираю одну карту, движение записывается, выбираю другую карту, прошлое движение затирается и выполняется по новой карте. Это из за одинакового регистратора? Разве он должен быть уникальным?
1 ZanderZ
 
23.12.11
09:35
у тебя каждый раз идет запись в регистр с замещением по регистратору (отбор по нему установлен)
2 Zombi
 
23.12.11
09:36
(1) А как лучше сделать?
3 PVV65
 
23.12.11
09:37
(0) Не понять смысл приведенного кода (для случайного регистратора делать записи и т.д.), а по сути забыл "НаборЗап.прочитать()".
4 PVV65
 
23.12.11
09:37
(2) Задача не понятна.
5 Zombi
 
23.12.11
09:39
(3) Надо сделать чтобы по дисконтной карте числилась определенная сумма продаж, регистратор - чисто формальность, может быть любой.
А Прочитать() зачем?
6 GenAcid
 
23.12.11
09:43
Все измерения одинаковые, почему должна быть другая запись?
7 GenAcid
 
23.12.11
09:44
(6) Опс, невнимательно прочитал
8 Мыш
 
23.12.11
09:46
(2) Отбор тебе нужно делать по всем измерениям, а не только по регистратору.
9 Zombi
 
23.12.11
09:49
(8) Щас попробую еще по самой карте отбор установить
10 PVV65
 
23.12.11
09:49
(5) Если не читать, то новые записи добавляешь к пустому набору с отбором по регистратору, а затем записываешь, затирая аналогичный существующий набор.
11 Мыш
 
23.12.11
09:51
(10) Читать не обязательно.
12 PVV65
 
23.12.11
09:54
(11) Не обязательно, если существующие записи (согласно отбора) не нужны.
13 Zombi
 
23.12.11
09:57
Добавил

НаборЗап.Отбор.ДисконтнаяКарта.Установить(Карта);

выдает ошибку: "Поле объекта не обнаружено (ДисконтнаяКарта)" Хотя измерение такое есть.
Щас попробую прочитать.
14 Zombi
 
23.12.11
10:03
НаборЗап.Прочитать() помогло, все заработало.
 PVV65, спасибо!