Подписка на событие приЗаписи в регистр Затраты-2
Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
Найденные решения
(28) sweety-twetty, у меня по бух проводкам заполнение субконто собственного сделано так:
Думаю с РН будет аналогично, возможно отсеивать по имени РН, чтобы лишнее не смотреть, ну и на наличие "Проекта" в РН.
Процедура ПередЗаписьюРегистраБухгалтерииХозрасчетный(Источник, Отказ, РежимЗаписи) Экспорт
Если Источник.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если Источник.Отбор.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Регистратор = Источник.Отбор.Регистратор.Значение;
Если ЗначениеЗаполнено(Регистратор)
И (ТипЗнч(Регистратор) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер")
ИЛИ ТипЗнч(Регистратор) = Тип("ДокументСсылка.РасходныйКассовыйОрдер")
ИЛИ ТипЗнч(Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах")) Тогда
Если Регистратор.Дата < Дата(2013, 01, 01) Тогда
Возврат;
КонецЕсли;
ДтКт = ?(ТипЗнч(Регистратор) = Тип("ДокументСсылка.РасходныйКассовыйОрдер"), "Кт", "Дт");
Касса = Справочники.Кассы.ПустаяСсылка();
Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда
Касса = _ОбщиеФункции.ПолучитьСоответствиеКасс(Регистратор.КассаККМ).Получить("КассаОрганизации");
Иначе
Касса = Регистратор.Касса;
КонецЕсли;
Для Каждого Запись Из Источник Цикл
Если Запись["Счет" + ДтКт] = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01") ИЛИ Запись["Счет" + ДтКт] = ПланыСчетов.Хозрасчетный.НайтиПоКоду("57.3") Тогда
_ДополнительныеДвиженияДокументов.ЗаполнитьСубконтоКассыДляСчета5001(Запись, Касса, ДтКт);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
ПоказатьДумаю с РН будет аналогично, возможно отсеивать по имени РН, чтобы лишнее не смотреть, ну и на наличие "Проекта" в РН.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) sweety-twetty,
у вас много непонятного:
- зачем получаете объект Регистратор, когда нужна ссылка?
Или если Регистратор = ДокументОбъект, пользуйте
- что за Запись, откуда она, что записывается в набор записей?
- где запись в РН?
Нужно:
- установить отбор по регистратору
- обработать набор
- записать набор:
здесь Движение - это НаборЗаписей, а не объект Движение документа-регистратора.
Хотя если код внутри документа - переменную с таким названием использовать нельзя, только для внешних модулей.
у вас много непонятного:
- зачем получаете объект Регистратор, когда нужна ссылка?
Или если Регистратор = ДокументОбъект, пользуйте
Движение.Отбор.Регистратор.Установить(Регистратор.Ссылка);
Источник.Отбор.Регистратор.Значение.ПолучитьОбъект();
- что за Запись, откуда она, что записывается в набор записей?
ЗаполнитьЗначенияСвойств(ЗаписьРегистра,Запись);
- где запись в РН?
Нужно:
- установить отбор по регистратору
- обработать набор
- записать набор:
Движение = РегистрыНакопления.Затраты.СоздатьНаборЗаписей();
Движение.Отбор.Регистратор.Установить(РегистраторСсылка);
// обработка набора записей...
Движение.Записать;
здесь Движение - это НаборЗаписей, а не объект Движение документа-регистратора.
Хотя если код внутри документа - переменную с таким названием использовать нельзя, только для внешних модулей.
Процедура ПриЗаписиРегистраНакопленияЗатратыПриЗаписи(Источник, Отказ, Замещение) Экспорт
Регистратор = Источник.Отбор.Регистратор.Значение.ПолучитьОбъект();
Если ТипЗнч(Регистратор.ССылка) = Тип("ДокументСсылка.СписаниеТоваров") Тогда
Если Регистратор.УчетЗатратПоНоменклатуре=Истина Тогда
Источник.Записывать=Истина;
Движение = РегистрыНакопления.Затраты.СоздатьНаборЗаписей();
Движение.Отбор.Регистратор.Установить(Регистратор);
Для каждого запись из Источник Цикл
ЗаписьРегистра = Движение.ДобавитьПриход();
ЗаписьРегистра.Активность = Истина;
ЗаполнитьЗначенияСвойств(ЗаписьРегистра,Запись);
ЗаписьРегистра.Проект = Регистратор.Товары[Запись.НомерСтроки-1].Проект;
Сообщить(Тип(Источник));
Сообщить("Проект "+ЗаписьРегистра.Проект);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
(2) sweety-twetty, вы хотя бы напишите в чем у вас вообще задача. Если вам нужно внести какие-то изменения в записи регистра, то не надо создавать новый набор записей, просто перебирайте и правьте в цикле существующий набор, а потом его же и записывайте.
(13) sweety-twetty,
как не видит - запросом, объект "Движения"?
Используется ли вообще у документа объект Движения?
Вы просто совместили два понятия (или даже три):
- запись регистра
- движение документа
- объект Движения документа
В общем порядке - не каждая запись в регистрах есть движение (хотя для РН, которые жестко привязаны к Регистратору - без Регистратора невозможна запись; поэтому даже если пишут в РН "чисто просто так информацию" - привязывают к какому-нибудь номинальному регистратору-заглушке.
почему-то не видит движений по этому регистру
как не видит - запросом, объект "Движения"?
Используется ли вообще у документа объект Движения?
Вы просто совместили два понятия (или даже три):
- запись регистра
- движение документа
- объект Движения документа
В общем порядке - не каждая запись в регистрах есть движение (хотя для РН, которые жестко привязаны к Регистратору - без Регистратора невозможна запись; поэтому даже если пишут в РН "чисто просто так информацию" - привязывают к какому-нибудь номинальному регистратору-заглушке.
(18) sweety-twetty,
а спрашивали - как записать в регистр накопления запись :)
А сама с Движениями делаете.
так одного регистра или коллекция наборов (Движения документа)?
Если набор конкретного регистра - то как в ( 14), если коллекция наборов - то еще цикл по наборам сделать.
я говорю о ЭтотОбъект.Движения.Затраты
а спрашивали - как записать в регистр накопления запись :)
А сама с Движениями делаете.
В Источнике - РегистрНакопления.НаборЗаписей
так одного регистра или коллекция наборов (Движения документа)?
Если набор конкретного регистра - то как в ( 14), если коллекция наборов - то еще цикл по наборам сделать.
(4) LordTime,
это если пользоваться объектом Движения документа.
Что-то не вижу здесь создания/получения такого объекта.
А записи в регистре РН - правятся через НаборЗаписей.
Если вам нужно внести какие-то изменения в записи регистра, то не надо создавать новый набор записей,
это если пользоваться объектом Движения документа.
Что-то не вижу здесь создания/получения такого объекта.
А записи в регистре РН - правятся через НаборЗаписей.
(8) AlexO, совершенно верно запись в регистре появляется через набор, который уже имеется в переменной "Источник", остается только перебрать этот набор, изменить в нем что надо и снова записать с замещением, поэтому Движения документа здесь не причем. Остается только учесть, что запись этого набора снова вызовет данную подписку на событие, поэтом если это никак не учесть уйдем в бесконечную рекурсию.
(28) sweety-twetty, у меня по бух проводкам заполнение субконто собственного сделано так:
Думаю с РН будет аналогично, возможно отсеивать по имени РН, чтобы лишнее не смотреть, ну и на наличие "Проекта" в РН.
Процедура ПередЗаписьюРегистраБухгалтерииХозрасчетный(Источник, Отказ, РежимЗаписи) Экспорт
Если Источник.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если Источник.Отбор.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Регистратор = Источник.Отбор.Регистратор.Значение;
Если ЗначениеЗаполнено(Регистратор)
И (ТипЗнч(Регистратор) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер")
ИЛИ ТипЗнч(Регистратор) = Тип("ДокументСсылка.РасходныйКассовыйОрдер")
ИЛИ ТипЗнч(Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах")) Тогда
Если Регистратор.Дата < Дата(2013, 01, 01) Тогда
Возврат;
КонецЕсли;
ДтКт = ?(ТипЗнч(Регистратор) = Тип("ДокументСсылка.РасходныйКассовыйОрдер"), "Кт", "Дт");
Касса = Справочники.Кассы.ПустаяСсылка();
Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда
Касса = _ОбщиеФункции.ПолучитьСоответствиеКасс(Регистратор.КассаККМ).Получить("КассаОрганизации");
Иначе
Касса = Регистратор.Касса;
КонецЕсли;
Для Каждого Запись Из Источник Цикл
Если Запись["Счет" + ДтКт] = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01") ИЛИ Запись["Счет" + ДтКт] = ПланыСчетов.Хозрасчетный.НайтиПоКоду("57.3") Тогда
_ДополнительныеДвиженияДокументов.ЗаполнитьСубконтоКассыДляСчета5001(Запись, Касса, ДтКт);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
ПоказатьДумаю с РН будет аналогично, возможно отсеивать по имени РН, чтобы лишнее не смотреть, ну и на наличие "Проекта" в РН.
(31)А как вы записываете запись? Написала так
в регистр все равно не записывается
Если Источник.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если Источник.Отбор.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Регистратор = Источник.Отбор.Регистратор.Значение;
Если ЗначениеЗаполнено(Регистратор) И ТипЗнч(Регистратор) = Тип("ДокументСсылка.СписаниеТоваров") Тогда
Для Каждого Запись Из Источник Цикл
Запись.Проект = Регистратор.Товары[Запись.НомерСтроки-1].Проект;
КонецЦикла;
КонецЕсли;
Показать
(32)Документ СписаниеТоваров в типовой УПП не является регистратором РН Затраты, и, соответственно, никаких движений по нему создавать не может. При партионном учете он двигает РН ПартииТоваровНаСкладах/БУ, при РАУЗе - УчетЗатрат/БУ, которые аналитики Проект не содержат. Если движения по регистру Затраты у вас выполняются искуственным способом, то и вносить изменения необходимо в этот код.
Прикрепленные файлы:
(32) sweety-twetty, давайте с начала. В УПП 34.1 в типовой, в документе "Списание товаров" в движениях не участвует РН "Затраты". Рассказывайте и показывайте подробней. Код выложенный мной рабочий, значит сложность где-то на вашей стороне. Во-первых, нужен скрин из конфы документа "Списание товаров" закладка "Движения", чтобы видно было весь список регистров для движений документа. Во-вторых, необходимо проверить нет ли подписок перезаполняющих движения.
Процедура ПриЗаписиРегистраНакопленияЗатратыПриЗаписи(Источник, Отказ, Замещение) Экспорт
Регистратор = Источник.Отбор.Регистратор.Значение;
Если ТипЗнч(Регистратор.ССылка) = Тип("ДокументСсылка.СписаниеТоваров") Тогда
Если Регистратор.УчетЗатратПоНоменклатуре=Истина Тогда
Для каждого запись из Источник Цикл
запись.Проект = Регистратор.Товары[Запись.НомерСтроки-1].Проект;
Сообщить("Проект "+запись.Проект);
КонецЦикла;
Источник.Записать();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ПоказатьВ принципе должно взлететь. Но я бы не парился и поправил обработку проведения(ленивый очень).
Подписка Перед записью, перебирая набор записей, изменяю нужные, а дальше работает платформа, записывая, если нет последующих действий. Так что тут записывать ничего не надо. Получили запись РН, проверили ее на необходимость внесения данных, установили данные. Все!
Написала так : Все работает -спасибо всем огромное
Если Источник.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если Источник.Отбор.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Регистратор = Источник.Отбор.Регистратор.Значение;
Если ЗначениеЗаполнено(Регистратор) И ТипЗнч(Регистратор) = Тип("ДокументСсылка.СписаниеТоваров") Тогда
Если Регистратор.УчетЗатратПоНоменклатуре=Истина Тогда
Для Каждого Запись Из Источник Цикл
Запись.Проект = Регистратор.ПолучитьОбъект().Товары[Запись.НомерСтроки-1].Проект;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот