Прошу прощения,предыдущая тема закрылась.У источника тип Регистр накопления набор записей: Затраты
Насчет вакханалии, согласна -пожалуйста, помогите исправить
---
sweety-twetty, у меня по бух проводкам заполнение субконто собственного сделано так:

```1c
    Процедура ПередЗаписьюРегистраБухгалтерииХозрасчетный(Источник, Отказ, РежимЗаписи) Экспорт

    Если Источник.Количество() = 0 Тогда
    Возврат;
    КонецЕсли;

    Если Источник.Отбор.Количество() = 0 Тогда
    Возврат;
    КонецЕсли;

    Регистратор = Источник.Отбор.Регистратор.Значение;

    Если ЗначениеЗаполнено(Регистратор)
    И (ТипЗнч(Регистратор) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер")
    ИЛИ ТипЗнч(Регистратор) = Тип("ДокументСсылка.РасходныйКассовыйОрдер")
    ИЛИ ТипЗнч(Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах")) Тогда

    Если Регистратор.Дата < Дата(2013, 01, 01) Тогда
    Возврат;
    КонецЕсли;

    ДтКт = ?(ТипЗнч(Регистратор) = Тип("ДокументСсылка.РасходныйКассовыйОрдер"), "Кт", "Дт");

    Касса = Справочники.Кассы.ПустаяСсылка();
    Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда
    Касса = _ОбщиеФункции.ПолучитьСоответствиеКасс(Регистратор.КассаККМ).Получить("КассаОрганизации");
    Иначе
    Касса = Регистратор.Касса;
    КонецЕсли;

    Для Каждого Запись Из Источник Цикл

    Если Запись["Счет" + ДтКт] = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01") ИЛИ Запись["Счет" + ДтКт] = ПланыСчетов.Хозрасчетный.НайтиПоКоду("57.3") Тогда

    _ДополнительныеДвиженияДокументов.ЗаполнитьСубконтоКассыДляСчета5001(Запись, Касса, ДтКт);

    КонецЕсли;

    КонецЦикла;

    КонецЕсли;

    КонецПроцедуры
```

Думаю с РН будет аналогично, возможно отсеивать по имени РН, чтобы лишнее не смотреть, ну и на наличие "Проекта" в РН.
---
sweety-twetty,
у вас много непонятного:
- зачем получаете объект Регистратор, когда нужна ссылка?
Или если Регистратор = ДокументОбъект, пользуйте

```1c
    Движение.Отбор.Регистратор.Установить(Регистратор.Ссылка);
```

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

- что за Запись, откуда она, что записывается в набор записей?

```1c
    ЗаполнитьЗначенияСвойств(ЗаписьРегистра,Запись);
```

- где запись в РН?
Нужно:
- установить отбор по регистратору
- обработать набор
- записать набор:

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

здесь Движение - это НаборЗаписей, а не объект Движение документа-регистратора.
Хотя если код внутри документа - переменную с таким названием использовать нельзя, только для внешних модулей.
---
```1c
    Процедура ПриЗаписиРегистраНакопленияЗатратыПриЗаписи(Источник, Отказ, Замещение) Экспорт
    Регистратор = Источник.Отбор.Регистратор.Значение.ПолучитьОбъект();
    Если ТипЗнч(Регистратор.ССылка) = Тип("ДокументСсылка.СписаниеТоваров") Тогда
    Если Регистратор.УчетЗатратПоНоменклатуре=Истина Тогда
    Источник.Записывать=Истина;
    Движение = РегистрыНакопления.Затраты.СоздатьНаборЗаписей();
    Движение.Отбор.Регистратор.Установить(Регистратор);
    Для каждого запись из Источник Цикл
    ЗаписьРегистра = Движение.ДобавитьПриход();
    ЗаписьРегистра.Активность = Истина;
    ЗаполнитьЗначенияСвойств(ЗаписьРегистра,Запись);
    ЗаписьРегистра.Проект = Регистратор.Товары[Запись.НомерСтроки-1].Проект;
    Сообщить(Тип(Источник));
    Сообщить("Проект "+ЗаписьРегистра.Проект);
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```
---
sweety-twetty, вы хотя бы напишите в чем у вас вообще задача. Если вам нужно внести какие-то изменения в записи регистра, то не надо создавать новый набор записей, просто перебирайте и правьте в цикле существующий набор, а потом его же и записывайте.
---
LordTime, Да, набор уже существует, у него есть ключевые значения- например регистратор, вот по нему делаем отбор и все перезаполняем новыми данными, тут некоторое подобие, как в конструкторе движений...
---
,(8) подскажите как правильно сделать?
---
sweety-twetty,
в ( 5) все написано :)
А хотите через объект Движения (если движения документа им создавались, например) - так делайте через него.
---
через движения не получится.почему-то не видит движений по этому регистру(хотя они есть). А как заполнить записи значениями, которыми заполнено движение типовое?
---
sweety-twetty,
почему-то не видит движений по этому регистру
как не видит - запросом, объект "Движения"?
Используется ли вообще у документа объект Движения?
Вы просто совместили два понятия (или даже три):
- запись регистра
- движение документа
- объект Движения документа
В общем порядке - не каждая запись в регистрах есть движение (хотя для РН, которые жестко привязаны к Регистратору - без Регистратора невозможна запись; поэтому даже если пишут в РН "чисто просто так информацию" - привязывают к какому-нибудь номинальному регистратору-заглушке.
---
я говорю о ЭтотОбъект.Движения.Затраты .В Источнике - РегистрНакопления.НаборЗаписей
---
sweety-twetty,
я говорю о ЭтотОбъект.Движения.Затраты
а спрашивали - как записать в регистр накопления запись :)
А сама с Движениями делаете.
В Источнике - РегистрНакопления.НаборЗаписей
так одного регистра или коллекция наборов (Движения документа)?
Если набор конкретного регистра - то как в ( 14), если коллекция наборов - то еще цикл по наборам сделать.
---
deniseek77,
не "у него есть ключевые значения - например регистратор", а оно единственное доступное для отбора у НаборЗаписей РН :)
---
deniseek77, отбор у него уже на тот момент установлен, поэтому не надо его ставить еще раз.
---
LordTime,
Если вам нужно внести какие-то изменения в записи регистра, то не надо создавать новый набор записей,
это если пользоваться объектом Движения документа.
Что-то не вижу здесь создания/получения такого объекта.
А записи в регистре РН - правятся через НаборЗаписей.
---
AlexO, совершенно верно запись в регистре появляется через набор, который уже имеется в переменной "Источник", остается только перебрать этот набор, изменить в нем что надо и снова записать с замещением, поэтому Движения документа здесь не причем. Остается только учесть, что запись этого набора снова вызовет данную подписку на событие, поэтом если это никак не учесть уйдем в бесконечную рекурсию.
---
LordTime,
Остается только учесть, что запись этого набора снова вызовет данную подписку на событие
ну это не я ей советовал такую обструкцию, это отсюда :)
---
LordTime,
вы хотя бы напишите в чем у вас вообще задача.
за это плюс.
За все остальное - минус.
---
Пытаюсь поднять
---
Добавляю в ТЧ документа проект. идет запись в регистр Затраты. в подписке хочу перебрать все записи по данному регистру и каждой установить значение проект в зависимости от значения этого поля в тч
---
sweety-twetty, а почему бы это тогда не делать непосредственно при проведении документа, зачем подписка на событие?
---
просто не могу разобраться как поправить в проведении.Если вы подскажете, буду очень благодарна
---
sweety-twetty,
по аналогии с типовым кодом, только добавить Проект, если нужно.
А лучше свой регистр - и не зависеть ни от кого, и делать что хочу.
---
пробовала подобавлять везде проект. не получается. Пожалуйста, у кого есть типовая УПП подскажите
---
sweety-twetty, у меня по бух проводкам заполнение субконто собственного сделано так:

```1c
    Процедура ПередЗаписьюРегистраБухгалтерииХозрасчетный(Источник, Отказ, РежимЗаписи) Экспорт

    Если Источник.Количество() = 0 Тогда
    Возврат;
    КонецЕсли;

    Если Источник.Отбор.Количество() = 0 Тогда
    Возврат;
    КонецЕсли;

    Регистратор = Источник.Отбор.Регистратор.Значение;

    Если ЗначениеЗаполнено(Регистратор)
    И (ТипЗнч(Регистратор) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер")
    ИЛИ ТипЗнч(Регистратор) = Тип("ДокументСсылка.РасходныйКассовыйОрдер")
    ИЛИ ТипЗнч(Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах")) Тогда

    Если Регистратор.Дата < Дата(2013, 01, 01) Тогда
    Возврат;
    КонецЕсли;

    ДтКт = ?(ТипЗнч(Регистратор) = Тип("ДокументСсылка.РасходныйКассовыйОрдер"), "Кт", "Дт");

    Касса = Справочники.Кассы.ПустаяСсылка();
    Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда
    Касса = _ОбщиеФункции.ПолучитьСоответствиеКасс(Регистратор.КассаККМ).Получить("КассаОрганизации");
    Иначе
    Касса = Регистратор.Касса;
    КонецЕсли;

    Для Каждого Запись Из Источник Цикл

    Если Запись["Счет" + ДтКт] = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01") ИЛИ Запись["Счет" + ДтКт] = ПланыСчетов.Хозрасчетный.НайтиПоКоду("57.3") Тогда

    _ДополнительныеДвиженияДокументов.ЗаполнитьСубконтоКассыДляСчета5001(Запись, Касса, ДтКт);

    КонецЕсли;

    КонецЦикла;

    КонецЕсли;

    КонецПроцедуры
```

Думаю с РН будет аналогично, возможно отсеивать по имени РН, чтобы лишнее не смотреть, ну и на наличие "Проекта" в РН.
---
А как вы записываете запись? Написала так

```1c
    Если Источник.Количество() = 0 Тогда
    Возврат;

    КонецЕсли;

    Если Источник.Отбор.Количество() = 0 Тогда
    Возврат;
    КонецЕсли;

    Регистратор = Источник.Отбор.Регистратор.Значение;

    Если ЗначениеЗаполнено(Регистратор) И ТипЗнч(Регистратор) = Тип("ДокументСсылка.СписаниеТоваров") Тогда

    Для Каждого Запись Из Источник Цикл

    Запись.Проект = Регистратор.Товары[Запись.НомерСтроки-1].Проект;

    КонецЦикла;

    КонецЕсли;
```
 в регистр все равно не записывается
---
Документ СписаниеТоваров в типовой УПП не является регистратором РН Затраты, и, соответственно, никаких движений по нему создавать не может. При партионном учете он двигает РН ПартииТоваровНаСкладах/БУ, при РАУЗе - УчетЗатрат/БУ, которые аналитики Проект не содержат. Если движения по регистру Затраты у вас выполняются искуственным способом, то и вносить изменения необходимо в этот код.
---
sweety-twetty, давайте с начала. В УПП 34.1 в типовой, в документе "Списание товаров" в движениях не участвует РН "Затраты". Рассказывайте и показывайте подробней. Код выложенный мной рабочий, значит сложность где-то на вашей стороне. Во-первых, нужен скрин из конфы документа "Списание товаров" закладка "Движения", чтобы видно было весь список регистров для движений документа. Во-вторых, необходимо проверить нет ли подписок перезаполняющих движения.
---
sweety-twetty, честно говоря я вообще не вижу в типовой УПП, что бы документ "Списание товаров" делал движение по регистру "Затраты", да и реквизита "Проект" в самом документе я также не вижу как вы здесь написали.
---
в типовой от поставщика есть реквизит проект в док.Списание товаров(он не в ТЧ, а просто реквизит объекта)
---
sweety-twetty, я понимаю, что реквизит объекта, но его там нет. Прикладываю скрин типовой УПП 1.3.36.1, я не вижу там реквизита "Проект" и не вижу, что этот документ выполняет движения по регистру "Затраты".
---
```1c
    Процедура ПриЗаписиРегистраНакопленияЗатратыПриЗаписи(Источник, Отказ, Замещение) Экспорт
    Регистратор = Источник.Отбор.Регистратор.Значение;
    Если ТипЗнч(Регистратор.ССылка) = Тип("ДокументСсылка.СписаниеТоваров") Тогда
    Если Регистратор.УчетЗатратПоНоменклатуре=Истина Тогда

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

В принципе должно взлететь. Но я бы не парился и поправил обработку проведения(ленивый очень).
---
Leoon,
В принципе должно взлететь
это если в Источник передается объект Движения документа. Что там?
---
Дык НаборЗаписей
---
Leoon, тогда тоже неплохо :)
Но сдается мне, что передается все-таки коллекция Движений документа, которая является коллекцией наборов записей регистров проведения, т.е. надо еще найти нужный регистр :)
---
не сработало
---
Подписка Перед записью, перебирая набор записей, изменяю нужные, а дальше работает платформа, записывая, если нет последующих действий. Так что тут записывать ничего не надо. Получили запись РН, проверили ее на необходимость внесения данных, установили данные. Все!
---
Написала так :
```1c
    Если Источник.Количество() = 0 Тогда
    Возврат;

    КонецЕсли;

    Если Источник.Отбор.Количество() = 0 Тогда
    Возврат;
    КонецЕсли;

    Регистратор = Источник.Отбор.Регистратор.Значение;

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

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

    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
```
 Все работает -спасибо всем огромное
---
Возможно у нас разные версии? Извините меня, не кидайтесь сильно-УПП для Украины