Имя: Пароль:
1C
 
подписка на события. Как изменить движения.
0 Lama12
 
26.11.09
17:58
Ситуация.
В документе делаются движения по регистрам, но не через свойства документа "Движения", а через набор записей регистра.
Как этидвижения изменить при перехвате в подписке на событие? Объект идет без движений.
1 Живой Ископаемый
 
26.11.09
17:59
а почему не рассказываешь о каком событии идет речь?
2 Irbis
 
26.11.09
17:59
набор записей соответствующего реистра, при записи. И событий не надо даже.
3 Живой Ископаемый
 
26.11.09
18:00
Перехватить в подписке на событие ПриЗаписиНабораЗаписейРегистра - создать набор записей с отбором по этому регистратору
4 Lama12
 
26.11.09
18:01
(3)Хм... спасибо за идею... Попробую.
5 Живой Ископаемый
 
26.11.09
18:09
2(4) и можно как в (2), не принципиально... Почему нужно создавать набор записей и читать с отбором по регистратору - потому что раз у тебя такой хитрый документ, то он вообще может записывать не сразу все проводки и чатями - создал несколько - записал, создал еще несколько - опять записал.. Если бы он гарантировано записывал только в одном месте, то можно было бы и не создавать набор записей, а просто юзать Источник...
я уже просто обжегся на этом
6 Lama12
 
26.11.09
18:12
Вообще докумет "Распределение НДС косвенных расходов" в УПП.
Там такое написано... черт ногу сломит. В стандартный функционал не хочется лезть.
7 ivanoa
 
30.11.09
11:17
(6)Подскажите, получилось ли что-нибудь по этому вопросу. У меня такая же ситуация. Создала набор записей, изменяю в нем данные в обработке проведения, но после проведения в регистре старые данные. Движения по этому регистру в обработке проведения пустые.
8 Живой Ископаемый
 
30.11.09
11:40
2(7) изменяешь, а записываешь?
9 ivanoa
 
30.11.09
11:56
Да, не записывала. В обработке проведения получилось. Хочу перенести в подписку на событие, там Записать() не пишу, но регистры отсаются не измененные. Как быть?
10 Живой Ископаемый
 
30.11.09
12:02
2(9) ну это же очевидно!!! Написать .Записать()!
11 ivanoa
 
30.11.09
12:03
Подписка ПриЗаписиРегистра, получается цикл
12 Живой Ископаемый
 
30.11.09
12:05
как меняете движения?
13 ivanoa
 
30.11.09
12:08
Процедура ПриЗаписиРегистроНакопленияНДССменаОрганизации(Источник, Отказ, Замещение) Экспорт
           
   ТипИсточника = ТипЗнч(Источник);
   
   Если Источник <> Неопределено И Источник.Количество() > 0 Тогда
           
   Для каждого ТекСтрока из Источник Цикл
      ТекСтрока.Организация = ТекСтрока.ДоговорКонтрагента.Организация;
   КонецЦикла;
               
   //    Источник.Записать();
               
   КонецЕсли;
   
КонецПроцедуры
14 Живой Ископаемый
 
30.11.09
12:29
5 минут, нужно поэкспериментировать
15 ivanoa
 
30.11.09
13:05
ну как?
16 Lama12
 
30.11.09
13:24
(7)Да, все получилось, работает.
17 Живой Ископаемый
 
30.11.09
13:28
2(15) плохо.. я просто в своей практике на основании записей одного регистрадобавлял записи в другой, а в том же как бы не пробовал менять записи в событии призаписи...
делал такое:
   тзФ = Источник.Выгрузить();
   тзФ.ЗаполнитьЗначения(Неопределено,"Организация");
   Источник.Загрузить(тзФ);
   //Источник.Записать();
   Для Каждого Строка Из Источник Цикл
       Сообщить(""+Строка.Организация);
       Строка.Организация = Неопределено;
   КонецЦикла;

Для разных регистров - все равно организация не очищается.. Делал и для других измерений... Если раскоментировать строчку с Записать - тогда 1С вываливается по причине бесконечной рекурсии..
Что можно посоветовать - все-таки менять движения уже в припроведении...
18 Lama12
 
30.11.09
13:28
В моем случае код следующий. Доп. оптимизацией не занимался.

Если НЕ Справочники.РТС_Константы.НДСРаспределение_Использование.Знач
       ИЛИ НЕ Справочники.РТС_Константы.НДСРаспределение_Версия.Знач = Метаданные.Версия Тогда
   
       Возврат;
   
   КонецЕсли;
   
   Док = Источник.Отбор.Регистратор.Значение;
   Если ТипЗнч(Док) = Тип("ДокументСсылка.РаспределениеНДСКосвенныхРасходов") Тогда
       
       Если НЕ Док.ДляСписанияНДСиспользоватьСчетИАналитикуУчетаЗатрат Тогда
           
           Возврат;
           
       КонецЕсли;
       
       
       
       ВидРег = ?(ТипЗнч(Источник) = Тип("РегистрБухгалтерииНаборЗаписей.Хозрасчетный"),"Хозрасчетный",
       ?(ТипЗнч(Источник) = Тип("РегистрБухгалтерииНаборЗаписей.Налоговый"),"Налоговый",
       ?(ТипЗнч(Источник) = Тип("РегистрНакопленияНаборЗаписей.ЗатратыНалоговыйУчет"),"*Налоговый",
       ?(ТипЗнч(Источник) = Тип("РегистрНакопленияНаборЗаписей.ЗатратыБухгалтерскийУчет"),"*Хозрасчетный",""))));
       
       
       Если НЕ ЗначениеЗаполнено(Справочники.РТС_Константы.Аналитика26Счета.Знач) Тогда
           ЗаписьЖурналаРегистрации("Не заполнено значние в константе 26 счет.");
           Возврат;
       КонецЕсли;
       
       Если Не ЗначениеЗаполнено(Справочники.РТС_Константы.Аналитика44Счета.Знач) Тогда
           ЗаписьЖурналаРегистрации("Не заполнено значние в константе 44 счет.");
           Возврат;
       КонецЕсли;
       
       СтЗ44 = Справочники.РТС_Константы.Аналитика44Счета.Знач;
       СтЗ26 = Справочники.РТС_Константы.Аналитика26Счета.Знач;                
       
       Если  ВидРег = "Хозрасчетный" ИЛИ ВидРег = "Налоговый" Тогда
           
           ТЗ_Бух = Источник.Выгрузить();                                                            
           Для каждого Стр Из ТЗ_Бух Цикл
               
               Если Стр.СчетДт.ПринадлежитЭлементу(ПланыСчетов[ВидРег].РасходыНаПродажу) Тогда
                   
                   Стр.СубконтоДт1 = СтЗ44;
                   
               ИначеЕсли Стр.СчетКт.ПринадлежитЭлементу(ПланыСчетов[ВидРег].РасходыНаПродажу) Тогда
                   
                   Стр.СубконтоКт1 = СтЗ44;
                   
               КонецЕсли;
               Если Стр.СчетДт.ПринадлежитЭлементу(ПланыСчетов[ВидРег].ОбщехозяйственныеРасходы) Тогда
                   
                   Стр.СубконтоДт2 = СтЗ26;
                   
               ИначеЕсли Стр.СчетКт.ПринадлежитЭлементу(ПланыСчетов[ВидРег].ОбщехозяйственныеРасходы) Тогда
                   
                   Стр.СубконтоКт2 = СтЗ26;
                   
               КонецЕсли;
               
           КонецЦикла;                                                          
           Источник.Загрузить(ТЗ_Бух);
           
       ИначеЕсли ВидРег = "*Хозрасчетный" ИЛИ ВидРег = "*Налоговый" Тогда
           
           ВидРег = СтрЗаменить(ВидРег,"*","");
           
           ТЗ_Набор = Источник.Выгрузить();
           
           Для каждого Стр Из ТЗ_Набор Цикл
               
               Если Стр.СчетУчета.ПринадлежитЭлементу(ПланыСчетов[ВидРег].РасходыНаПродажу) Тогда
                   
                   Стр.СтатьяЗатрат = СтЗ44;
                   
               ИначеЕсли Стр.СчетУчета.ПринадлежитЭлементу(ПланыСчетов[ВидРег].ОбщехозяйственныеРасходы) Тогда
                   
                   Стр.СтатьяЗатрат = СтЗ26;
                   
               КонецЕсли;
               
           КонецЦикла;
           
           Источник.Загрузить(ТЗ_Набор);
       КонецЕсли;
   КонецЕсли;
19 Lama12
 
30.11.09
13:32
(18)+
Стояла задача поменять аналитику.
20 Живой Ископаемый
 
30.11.09
13:34
2(19) ну РБ я вроде тоже менял, а вот РН в случае (13,17) - почему-то не получается...
21 Lama12
 
30.11.09
13:39
(20)Хм... а может пустую ссылку заместо "неопределено" вставить?
22 Lama12
 
30.11.09
13:41
(20)Вот после этого -

ИначеЕсли ВидРег = "*Хозрасчетный" ИЛИ ВидРег = "*Налоговый" Тогда

Меняются два регистр накопления.
23 Живой Ископаемый
 
30.11.09
13:56
сейчас уже не успею, нужно уйти...
24 Lama12
 
30.11.09
13:56
(13)Вообще-то должно работать. Может подписка не на то событие?
В отладчике посмотреть не получается?
25 Живой Ископаемый
 
30.11.09
14:01
2(24) подписка та, я специально вставил даже сообщить.. Кроме того и тзФ и Источник в отладчике содержат пустое измерение "Организации" но потом в вдижения документа - оно заполнено...
26 ivanoa
 
30.11.09
15:09
Ну ладно, спасибо. Сделаю в обработке проведения пока. Тоже вариант.