Подписка на событие приЗаписи в регистр Затраты-2

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. sweety-twetty 05.03.13 13:39 Сейчас в теме
Прошу прощения,предыдущая тема закрылась.У источника тип Регистр накопления набор записей: Затраты
Насчет вакханалии, согласна -пожалуйста, помогите исправить
Вознаграждение за ответ
Показать полностью
Найденные решения
31. killitch 30 05.03.13 16:44 Сейчас в теме
(28) sweety-twetty, у меня по бух проводкам заполнение субконто собственного сделано так:
Процедура ПередЗаписьюРегистраБухгалтерииХозрасчетный(Источник, Отказ, РежимЗаписи) Экспорт
	
	Если Источник.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Если Источник.Отбор.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Регистратор = Источник.Отбор.Регистратор.Значение;
	
	Если ЗначениеЗаполнено(Регистратор)
		И (ТипЗнч(Регистратор) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер")
		ИЛИ ТипЗнч(Регистратор) = Тип("ДокументСсылка.РасходныйКассовыйОрдер")
		ИЛИ ТипЗнч(Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах")) Тогда
		
		Если Регистратор.Дата < Дата(2013, 01, 01) Тогда
			Возврат;
		КонецЕсли;
		
		ДтКт = ?(ТипЗнч(Регистратор) = Тип("ДокументСсылка.РасходныйКассовыйОрдер"), "Кт", "Дт");
		
		Касса = Справочники.Кассы.ПустаяСсылка();
		Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда
			Касса = _ОбщиеФункции.ПолучитьСоответствиеКасс(Регистратор.КассаККМ).Получить("КассаОрганизации"); 
		Иначе
			Касса = Регистратор.Касса;
		КонецЕсли;
		
		Для Каждого Запись Из Источник Цикл
			
			Если Запись["Счет" + ДтКт] = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01") ИЛИ Запись["Счет" + ДтКт] = ПланыСчетов.Хозрасчетный.НайтиПоКоду("57.3")  Тогда
			
				_ДополнительныеДвиженияДокументов.ЗаполнитьСубконтоКассыДляСчета5001(Запись, Касса, ДтКт);
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры
Показать


Думаю с РН будет аналогично, возможно отсеивать по имени РН, чтобы лишнее не смотреть, ну и на наличие "Проекта" в РН.
user811769; el-gamberro; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. AlexO 135 05.03.13 14:04 Сейчас в теме
(1) sweety-twetty,
у вас много непонятного:
- зачем получаете объект Регистратор, когда нужна ссылка?
Или если Регистратор = ДокументОбъект, пользуйте
Движение.Отбор.Регистратор.Установить(Регистратор.Ссылка);

Источник.Отбор.Регистратор.Значение.ПолучитьОбъект();

- что за Запись, откуда она, что записывается в набор записей?
 ЗаполнитьЗначенияСвойств(ЗаписьРегистра,Запись);

- где запись в РН?
Нужно:
- установить отбор по регистратору
- обработать набор
- записать набор:
Движение = РегистрыНакопления.Затраты.СоздатьНаборЗаписей();
Движение.Отбор.Регистратор.Установить(РегистраторСсылка);
// обработка набора записей...
Движение.Записать;

здесь Движение - это НаборЗаписей, а не объект Движение документа-регистратора.
Хотя если код внутри документа - переменную с таким названием использовать нельзя, только для внешних модулей.
2. sweety-twetty 05.03.13 13:41 Сейчас в теме
Процедура ПриЗаписиРегистраНакопленияЗатратыПриЗаписи(Источник, Отказ, Замещение) Экспорт
	Регистратор = Источник.Отбор.Регистратор.Значение.ПолучитьОбъект();
	Если ТипЗнч(Регистратор.ССылка) = Тип("ДокументСсылка.СписаниеТоваров") Тогда
		Если Регистратор.УчетЗатратПоНоменклатуре=Истина Тогда
			Источник.Записывать=Истина;	
    		Движение = РегистрыНакопления.Затраты.СоздатьНаборЗаписей();
         	Движение.Отбор.Регистратор.Установить(Регистратор);
		    Для каждого запись из Источник Цикл
         		ЗаписьРегистра = Движение.ДобавитьПриход();
 		        ЗаписьРегистра.Активность = Истина;
        		ЗаполнитьЗначенияСвойств(ЗаписьРегистра,Запись);
				ЗаписьРегистра.Проект = Регистратор.Товары[Запись.НомерСтроки-1].Проект;
				Сообщить(Тип(Источник));
				Сообщить("Проект "+ЗаписьРегистра.Проект);
			КонецЦикла;
		КонецЕсли;	
	КонецЕсли;	
КонецПроцедуры
Показать
4. VBod 39 05.03.13 13:58 Сейчас в теме
(2) sweety-twetty, вы хотя бы напишите в чем у вас вообще задача. Если вам нужно внести какие-то изменения в записи регистра, то не надо создавать новый набор записей, просто перебирайте и правьте в цикле существующий набор, а потом его же и записывайте.
A.Sytchev; ErshKUS; deniseek77; Leoon; +4 1 Ответить
6. deniseek77 86 05.03.13 14:05 Сейчас в теме
(4) LordTime, Да, набор уже существует, у него есть ключевые значения- например регистратор, вот по нему делаем отбор и все перезаполняем новыми данными, тут некоторое подобие, как в конструкторе движений...
10. sweety-twetty 05.03.13 14:12 Сейчас в теме
(6),(8) подскажите как правильно сделать?
11. AlexO 135 05.03.13 14:13 Сейчас в теме
(10) sweety-twetty,
в ( 5) все написано :)
А хотите через объект Движения (если движения документа им создавались, например) - так делайте через него.
13. sweety-twetty 05.03.13 14:19 Сейчас в теме
(11)через движения не получится.почему-то не видит движений по этому регистру(хотя они есть). А как заполнить записи значениями, которыми заполнено движение типовое?
15. AlexO 135 05.03.13 14:25 Сейчас в теме
(13) sweety-twetty,
почему-то не видит движений по этому регистру

как не видит - запросом, объект "Движения"?
Используется ли вообще у документа объект Движения?
Вы просто совместили два понятия (или даже три):
- запись регистра
- движение документа
- объект Движения документа
В общем порядке - не каждая запись в регистрах есть движение (хотя для РН, которые жестко привязаны к Регистратору - без Регистратора невозможна запись; поэтому даже если пишут в РН "чисто просто так информацию" - привязывают к какому-нибудь номинальному регистратору-заглушке.
18. sweety-twetty 05.03.13 14:29 Сейчас в теме
(15) я говорю о ЭтотОбъект.Движения.Затраты .В Источнике - РегистрНакопления.НаборЗаписей
22. AlexO 135 05.03.13 14:49 Сейчас в теме
(18) sweety-twetty,
я говорю о ЭтотОбъект.Движения.Затраты

а спрашивали - как записать в регистр накопления запись :)
А сама с Движениями делаете.
В Источнике - РегистрНакопления.НаборЗаписей

так одного регистра или коллекция наборов (Движения документа)?
Если набор конкретного регистра - то как в ( 14), если коллекция наборов - то еще цикл по наборам сделать.
12. AlexO 135 05.03.13 14:15 Сейчас в теме
(6) deniseek77,
не "у него есть ключевые значения - например регистратор", а оно единственное доступное для отбора у НаборЗаписей РН :)
19. VBod 39 05.03.13 14:42 Сейчас в теме
(6) deniseek77, отбор у него уже на тот момент установлен, поэтому не надо его ставить еще раз.
8. AlexO 135 05.03.13 14:10 Сейчас в теме
(4) LordTime,
Если вам нужно внести какие-то изменения в записи регистра, то не надо создавать новый набор записей,

это если пользоваться объектом Движения документа.
Что-то не вижу здесь создания/получения такого объекта.
А записи в регистре РН - правятся через НаборЗаписей.
23. VBod 39 05.03.13 14:49 Сейчас в теме
(8) AlexO, совершенно верно запись в регистре появляется через набор, который уже имеется в переменной "Источник", остается только перебрать этот набор, изменить в нем что надо и снова записать с замещением, поэтому Движения документа здесь не причем. Остается только учесть, что запись этого набора снова вызовет данную подписку на событие, поэтом если это никак не учесть уйдем в бесконечную рекурсию.
24. AlexO 135 05.03.13 14:51 Сейчас в теме
(23) LordTime,
Остается только учесть, что запись этого набора снова вызовет данную подписку на событие

ну это не я ей советовал такую обструкцию, это отсюда :)
9. AlexO 135 05.03.13 14:11 Сейчас в теме
(4) LordTime,
вы хотя бы напишите в чем у вас вообще задача.

за это плюс.
За все остальное - минус.
3. sweety-twetty 05.03.13 13:54 Сейчас в теме
7. sweety-twetty 05.03.13 14:07 Сейчас в теме
Добавляю в ТЧ документа проект. идет запись в регистр Затраты. в подписке хочу перебрать все записи по данному регистру и каждой установить значение проект в зависимости от значения этого поля в тч
25. VBod 39 05.03.13 14:59 Сейчас в теме
(7) sweety-twetty, а почему бы это тогда не делать непосредственно при проведении документа, зачем подписка на событие?
26. sweety-twetty 05.03.13 15:57 Сейчас в теме
(25) просто не могу разобраться как поправить в проведении.Если вы подскажете, буду очень благодарна
27. AlexO 135 05.03.13 15:59 Сейчас в теме
(26) sweety-twetty,
по аналогии с типовым кодом, только добавить Проект, если нужно.
А лучше свой регистр - и не зависеть ни от кого, и делать что хочу.
28. sweety-twetty 05.03.13 16:03 Сейчас в теме
(27) пробовала подобавлять везде проект. не получается. Пожалуйста, у кого есть типовая УПП подскажите
31. killitch 30 05.03.13 16:44 Сейчас в теме
(28) sweety-twetty, у меня по бух проводкам заполнение субконто собственного сделано так:
Процедура ПередЗаписьюРегистраБухгалтерииХозрасчетный(Источник, Отказ, РежимЗаписи) Экспорт
	
	Если Источник.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Если Источник.Отбор.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Регистратор = Источник.Отбор.Регистратор.Значение;
	
	Если ЗначениеЗаполнено(Регистратор)
		И (ТипЗнч(Регистратор) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер")
		ИЛИ ТипЗнч(Регистратор) = Тип("ДокументСсылка.РасходныйКассовыйОрдер")
		ИЛИ ТипЗнч(Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах")) Тогда
		
		Если Регистратор.Дата < Дата(2013, 01, 01) Тогда
			Возврат;
		КонецЕсли;
		
		ДтКт = ?(ТипЗнч(Регистратор) = Тип("ДокументСсылка.РасходныйКассовыйОрдер"), "Кт", "Дт");
		
		Касса = Справочники.Кассы.ПустаяСсылка();
		Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда
			Касса = _ОбщиеФункции.ПолучитьСоответствиеКасс(Регистратор.КассаККМ).Получить("КассаОрганизации"); 
		Иначе
			Касса = Регистратор.Касса;
		КонецЕсли;
		
		Для Каждого Запись Из Источник Цикл
			
			Если Запись["Счет" + ДтКт] = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01") ИЛИ Запись["Счет" + ДтКт] = ПланыСчетов.Хозрасчетный.НайтиПоКоду("57.3")  Тогда
			
				_ДополнительныеДвиженияДокументов.ЗаполнитьСубконтоКассыДляСчета5001(Запись, Касса, ДтКт);
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры
Показать


Думаю с РН будет аналогично, возможно отсеивать по имени РН, чтобы лишнее не смотреть, ну и на наличие "Проекта" в РН.
user811769; el-gamberro; +2 Ответить
32. sweety-twetty 05.03.13 16:53 Сейчас в теме
(31)А как вы записываете запись? Написала так
	Если Источник.Количество() = 0 Тогда
        Возврат;

    КонецЕсли;
    
    Если Источник.Отбор.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Регистратор = Источник.Отбор.Регистратор.Значение;
    
    Если ЗначениеЗаполнено(Регистратор) И ТипЗнч(Регистратор) = Тип("ДокументСсылка.СписаниеТоваров") Тогда
        
         Для Каждого Запись Из Источник Цикл
			 
			 Запись.Проект   = Регистратор.Товары[Запись.НомерСтроки-1].Проект; 
            
        КонецЦикла;
        
	КонецЕсли;
Показать
в регистр все равно не записывается
35. mymyka 05.03.13 17:01 Сейчас в теме
(32)Документ СписаниеТоваров в типовой УПП не является регистратором РН Затраты, и, соответственно, никаких движений по нему создавать не может. При партионном учете он двигает РН ПартииТоваровНаСкладах/БУ, при РАУЗе - УчетЗатрат/БУ, которые аналитики Проект не содержат. Если движения по регистру Затраты у вас выполняются искуственным способом, то и вносить изменения необходимо в этот код.
Прикрепленные файлы:
sweety-twetty; killitch; VBod; +3 Ответить
36. killitch 30 05.03.13 17:08 Сейчас в теме
(32) sweety-twetty, давайте с начала. В УПП 34.1 в типовой, в документе "Списание товаров" в движениях не участвует РН "Затраты". Рассказывайте и показывайте подробней. Код выложенный мной рабочий, значит сложность где-то на вашей стороне. Во-первых, нужен скрин из конфы документа "Списание товаров" закладка "Движения", чтобы видно было весь список регистров для движений документа. Во-вторых, необходимо проверить нет ли подписок перезаполняющих движения.
29. VBod 39 05.03.13 16:17 Сейчас в теме
(26) sweety-twetty, честно говоря я вообще не вижу в типовой УПП, что бы документ "Списание товаров" делал движение по регистру "Затраты", да и реквизита "Проект" в самом документе я также не вижу как вы здесь написали.
30. sweety-twetty 05.03.13 16:26 Сейчас в теме
(29) в типовой от поставщика есть реквизит проект в док.Списание товаров(он не в ТЧ, а просто реквизит объекта)
34. VBod 39 05.03.13 17:00 Сейчас в теме
(30) sweety-twetty, я понимаю, что реквизит объекта, но его там нет. Прикладываю скрин типовой УПП 1.3.36.1, я не вижу там реквизита "Проект" и не вижу, что этот документ выполняет движения по регистру "Затраты".
Прикрепленные файлы:
sweety-twetty; +1 Ответить
14. Leoon 3 05.03.13 14:20 Сейчас в теме
Процедура ПриЗаписиРегистраНакопленияЗатратыПриЗаписи(Источник, Отказ, Замещение) Экспорт
    Регистратор = Источник.Отбор.Регистратор.Значение;
    Если ТипЗнч(Регистратор.ССылка) = Тип("ДокументСсылка.СписаниеТоваров") Тогда
        Если Регистратор.УчетЗатратПоНоменклатуре=Истина Тогда

             
            Для каждого запись из Источник Цикл
                запись.Проект = Регистратор.Товары[Запись.НомерСтроки-1].Проект;
                Сообщить("Проект "+запись.Проект);
            КонецЦикла;
            Источник.Записать();
        КонецЕсли;    
    КонецЕсли;    
КонецПроцедуры
Показать


В принципе должно взлететь. Но я бы не парился и поправил обработку проведения(ленивый очень).
16. AlexO 135 05.03.13 14:27 Сейчас в теме
(14) Leoon,
В принципе должно взлететь

это если в Источник передается объект Движения документа. Что там?
17. Leoon 3 05.03.13 14:29 Сейчас в теме
21. AlexO 135 05.03.13 14:45 Сейчас в теме
(17) Leoon, тогда тоже неплохо :)
Но сдается мне, что передается все-таки коллекция Движений документа, которая является коллекцией наборов записей регистров проведения, т.е. надо еще найти нужный регистр :)
20. sweety-twetty 05.03.13 14:42 Сейчас в теме
33. killitch 30 05.03.13 16:58 Сейчас в теме
Подписка Перед записью, перебирая набор записей, изменяю нужные, а дальше работает платформа, записывая, если нет последующих действий. Так что тут записывать ничего не надо. Получили запись РН, проверили ее на необходимость внесения данных, установили данные. Все!
37. sweety-twetty 05.03.13 17:15 Сейчас в теме
Написала так :
	Если Источник.Количество() = 0 Тогда
        Возврат;

    КонецЕсли;
    
    Если Источник.Отбор.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Регистратор = Источник.Отбор.Регистратор.Значение;
    
    Если ЗначениеЗаполнено(Регистратор) И ТипЗнч(Регистратор) = Тип("ДокументСсылка.СписаниеТоваров") Тогда
      Если Регистратор.УчетЗатратПоНоменклатуре=Истина Тогда 

		  Для Каждого Запись Из Источник Цикл
			 Запись.Проект   = Регистратор.ПолучитьОбъект().Товары[Запись.НомерСтроки-1].Проект;

        КонецЦикла;
		КонецЕсли;
	КонецЕсли;
Показать
Все работает -спасибо всем огромное
38. sweety-twetty 05.03.13 17:18 Сейчас в теме
Возможно у нас разные версии? Извините меня, не кидайтесь сильно-УПП для Украины
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот