Имя: Пароль:
1C
1С v8
Движения по регистру накопления
0 narinem
 
21.01.13
11:20
Добрый день! Есть регистр накопления( одно измерение, один ресурс), регистратор которого одной кнопкой должен делать и расход, и приход по этому регистру: Вызываются процедуры ВыполнитьРасход(), ВыполнитьПриход() соответсвенно. Но после нажатия кнопки выполняется только приход. Расход не выполняется. Но если вызываю только процедуру расхода, все делает, то есть одновременно не выполняются расход и приход. Как это сделать?
1 vicof
 
21.01.13
11:21
:) Обработку проведения не предлагать?
2 Maxus43
 
21.01.13
11:24
По какой кнопке? Движения в (1) делать надо
3 Godofsin
 
21.01.13
11:25
а что за смысл делать одним регистратором и приход и расход?
4 Maxus43
 
21.01.13
11:25
(3) в типовых даже есть. нормально
5 Reset
 
21.01.13
11:26
(3) ПеремещениеТоваров? :)
6 Godofsin
 
21.01.13
11:26
а ну да, ну да...
7 Maxus43
 
21.01.13
11:26
или Ден средства в платёжках
8 narinem
 
21.01.13
11:32
Это для накопления бонусов на дисконтных картах.
9 narinem
 
21.01.13
11:33
(4) А где в типовой есть такое?
10 Reset
 
21.01.13
11:34
(9) Есть мнение, что ты просто запутался в вызовах своих функций по своим кнопкам.
В типовых используют (1)
11 samozvanec
 
21.01.13
11:36
(0) берешь обработку проведения, там пишешь приход, потом там же расход. профит+
12 Ligor
 
21.01.13
11:36
(0) а ты точно сохраняешь в каждой обработке данные?
13 narinem
 
21.01.13
11:37
(9) Нет, и обработке проведения пробовала, не выходит. Одновременно и приход, и расход не делает.
14 Reset
 
21.01.13
11:38
(12) +1, есть вероятность, что он два раза набор движений пишет, затирая предыдущий
15 Reset
 
21.01.13
11:38
она*
простите
16 lefthander
 
21.01.13
11:39
(8) а расход, это надо полагать списание бонусов с карты?
17 narinem
 
21.01.13
11:39
Да вот эти процедуры.
Процедура ВыполнитьРасход(СсылкаДокумента, ОплаченоБонусами)
   Движение = РегистрыНакопления.БонусыДисконтныйКарт.СоздатьНаборЗаписей();
   Движение.Отбор.Регистратор.Установить(СсылкаДокумента);
   Если ОплаченоБонусами > 0 Тогда
       ЗаписьРегистра = Движение.ДобавитьРасход();
       ЗаписьРегистра.Активность = Истина;
       ЗаписьРегистра.Период = СсылкаДокумента.Дата;
       ЗаписьРегистра.Карта = СсылкаДокумента.КартаЛояльности;
       ЗаписьРегистра.Бонус = ОплаченоБонусами;
       Движение.Записать();
   КонецЕсли;
   
КонецПроцедуры
Процедура  ВыполнитьПриход(СсылкаДокумента, СуммаБонуса)
   Движение = РегистрыНакопления.БонусыДисконтныйКарт.СоздатьНаборЗаписей();
   Движение.Отбор.Регистратор.Установить(СсылкаДокумента);
   ЗаписьРегистра = Движение.ДобавитьПриход();
   ЗаписьРегистра.Активность  = Истина;
   ЗаписьРегистра.Период = СсылкаДокумента.Дата+1;
   ЗаписьРегистра.Карта = СсылкаДокумента.КартаЛояльности;
   ЗаписьРегистра.Бонус = СуммаБонуса;
   Движение.Записать();
КонецПроцедуры
18 Жан Пердежон
 
21.01.13
11:39
(0) кода так и не будет?
19 Галахад
 
гуру
21.01.13
11:39
Может код пора показать*
20 narinem
 
21.01.13
11:40
(16) да
21 lefthander
 
21.01.13
11:40
(13) может есть смысл расницу между приходом и расходом фиксировать?
22 Жан Пердежон
 
21.01.13
11:41
(17) у тебя одно движение другое затирает
23 narinem
 
21.01.13
11:42
(21) нет, потому что при продаже можно использовать только бонусы, накапленные до этой продажи.
24 lefthander
 
21.01.13
11:42
Есть смысл добавить ресурс типа вид движения списание или начисление...
25 narinem
 
21.01.13
11:42
(22) И как быть?
26 Reset
 
21.01.13
11:42
(25) Объединить процедуры в одну (1)
27 vicof
 
21.01.13
11:43
(26) +1
И фотки чото не видать
28 samozvanec
 
21.01.13
11:44
(25) как вариант, если нужно приход и расход разделить - набор читать перед записью, думать, что оставить, что затереть
(27) +1
29 lefthander
 
21.01.13
11:46
(28) такое на пойдет, читайте (23)
30 vicof
 
21.01.13
11:46
(28) Или в записать() параметр передавать
31 lefthander
 
21.01.13
11:48
Думаю надо объединить в одну процедуру, при движении проверить оплату бонусами, если есть, списать нужное количество, а затем добавить по документу, если оплачено бонусами нет, то просто добавить.
32 narinem
 
21.01.13
11:54
(31) дело в том, что при каждой продаже объязатвльно есть и расход бонусов, и приход. Сначала делается расход бонусов по сумме документа, а после от суммы продажи по каким то процентом накапливаются бонусы.
33 vicof
 
21.01.13
11:55
(32) И чо?
34 Reset
 
21.01.13
11:58
(32) Это детали, как и (23).
При проведении нужно работать с одним набором и записмывать его 1 раз
35 narinem
 
21.01.13
11:58
То что когда в обработке проведения вызываю ВыполнитьРасход(); ВыполнитьПриход(); выполняется только приход.
36 vicof
 
21.01.13
11:59
(35) ппц. Смотрю в книгу, вижу фигу.

Если ОплаченоБонусами > 0 Тогда
   Движение = Движения.БонусыДисконтныйКарт.Добавитьрасход;
   Движение.Период = СсылкаДокумента.Дата;
   Движение.Карта = СсылкаДокумента.КартаЛояльности;
   Движение.Бонус = ОплаченоБонусами;
   Движение.Записать();
КонецЕсли;
и т.д.
37 Reset
 
21.01.13
11:59
(35) Удалить это процедуры, содержимое, кроме дважды создания и записи наборов, перенести в (1)
38 vicof
 
21.01.13
11:59
Добавитьрасход()
39 lefthander
 
21.01.13
11:59
(32) ладно попроще Есть у меня 500 бонусов, я что то купил и списал 100 бонусов, но по документу мне положено 100 бонусов. Что будет в остатке 500 - 100 + 100 = 500. Так в чем отличие писать разницу в зависимости от знака (списано и начислено)?
40 Reset
 
21.01.13
12:03
(39) Это а)детали б) по задаче может требоваться хранить отдельно.
Не сбивай автора! ;)
41 narinem
 
21.01.13
12:07
(35)Сапсибо, Reset, получилось!!!!!!
42 narinem
 
21.01.13
12:25
(37) Помогло.
Закон Брукера: Даже маленькая практика стоит большой теории.