Добрый день!
1С:Комплексная автоматизация 2 (2.4.3.160)
Документ - Передача сырья переработчику.
Необходимо к существующим проводкам добавить дополнительную проводку по забалансу (003.02)
Создал подписку на событие, в добавленном общем модуле написал нужны код, проводка создается и тут же затирается типовой при отражении документа в регламентированном учете.
Подскажите, куда копнуть, чтобы сделать так, чтобы остались и все типовые проводки и добавилась к ним дополнительная?
Заранее всем благодарен.
---
Источник - РегистрБухгалтерииНаборЗаписей.Хозрасчетный
Событие - ПередЗаписью
Обработчик - ДобавленныйМодульДляДокументов.ДопПроводкиПоРегиструХозрасчетныйПриЗаписи

Код обработчика:
Код:
//

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

событие должно быть ПередЗаписью, так как ПриЗаписи нет смысла потому, что уже набор уже записан в БД
---
Я для КА 1.1 делал подписку при проведении, например:

Процедура ПриПроведенииКомплектацияНоменклатурыОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
 Если НЕ Источник.ОтражатьВБухгалтерскомУчете Тогда
  возврат;
 КонецЕсли;

 Движения =Источник.Движения.Хозрасчетный;
 Движения.Прочитать();

 Проводка = Движения.Добавить();
 // здесь заполняем данные проводки

 Проводка = Движения.Добавить();
        // здесь заполняем данные проводки

 Движения.Записать();
КонецПроцедуры
---
Источник.ОтражатьВБухгалтерскомУчете
у меня такого нет
---
А какое есть событие на отражении в регл.учете?
---
создал подписку на событие ПриЗаписи

```1c
    Процедура ДопПроводкиПоРегиструХозрасчетныйПриЗаписи(Источник, Отказ, РежимЗаписи) Экспорт
    // регистр Хозрасчетный
    Если ТипЗнч(Источник.Отбор.Регистратор) = Документы.ПередачаСырьяПереработчику Тогда
    Если Источник.Давальческое = Истина Тогда
    Наборы = Источник.Движения;
    Передача = Наборы.Хозрасчетный;
    Передача.Записывать = ИСТИНА;
    Для Каждого ТекСтрокаТовары Из Источник.Товары Цикл
    Движение =Передача.Добавить();
    Движение.СчетДт = ПланыСчетов.Хозрасчетный.МатериалыПринятыеВПереработку;
    Движение.Период = Источник.Дата;
    Движение.Организация = Источник.Организация;
    Движение.ПодразделениеДт = Источник.Подразделение;
    Движение.Сумма = ТекСтрокаТовары.Сумма;
    Движение.КоличествоДт = ТекСтрокаТовары.Количество;
    Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = Источник.Контрагент;
    Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = ТекСтрокаТовары.Номенклатура;
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```

только чет коду ума не дам
---
Отладчиком в замере производительности - что происходит при отражении в регл.учете? Запись чего?
---
я добавил подписку на событие при записи регистра Хозрасчетный
---
```1c
    Процедура ДопПроводкиПоРегиструХозрасчетныйПриЗаписи(Источник, Отказ, РежимЗаписи) Экспорт
    // регистр Хозрасчетный
    Передача = Источник.Отбор.Регистратор.Значение;
    Если ТипЗнч(Передача) = Тип("ДокументСсылка.ПередачаСырьяПереработчику") Тогда
    Если Передача.Давальческое = Истина Тогда
    Наборы = Передача.Движения;
    ДвижПередача = Наборы.Хозрасчетный;
    ДвижПередача.Записывать = ИСТИНА;
    Для Каждого ТекСтрокаТовары Из Передача.Товары Цикл
    Движение = ДвижПередача.Добавить();
    Движение.СчетДт = ПланыСчетов.Хозрасчетный.МатериалыПринятыеВПереработку;
    Движение.Период = Передача.Дата;
    Движение.Организация = Передача.Организация;
    Движение.ПодразделениеДт = Источник.Подразделение;
    Движение.Сумма = ТекСтрокаТовары.Сумма;
    Движение.КоличествоДт = ТекСтрокаТовары.Количество;
    Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = Передача.Контрагент;
    Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = ТекСтрокаТовары.Номенклатура;
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```
---
но получаю ошибку :

{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1442)}: Ошибка при вызове метода контекста (Записать)
 Возврат Форма.Записать(ПараметрыЗаписи);
по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{ОбщийМодуль.ПроведениеСерверУТ.Модуль(398)}: Ошибка при вызове метода контекста (Записать)
 Объект.Движения.Записать();
по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'
---
Сделал так и все равно мои проводки удаляются и остаются только типовые

```1c
    Процедура ДопПроводкиПоРегиструХозрасчетныйПриЗаписи(Источник, Отказ, РежимЗаписи) Экспорт
    // регистр Хозрасчетный
    Передача = Источник.Отбор.Регистратор.Значение;
    Если ТипЗнч(Передача) = Тип("ДокументСсылка.ПередачаСырьяПереработчику") Тогда
    Если Передача.Давальческое = Истина Тогда
    //Наборы = Передача.Движения;
    //ДвижПередача = Наборы.Хозрасчетный;
    //ДвижПередача.Записывать = ИСТИНА;
    Источник.Записывать = ИСТИНА;
    Для Каждого ТекСтрокаТовары Из Передача.Товары Цикл
    //Движение = ДвижПередача.Добавить();
    Движение = Источник.Добавить();
    Движение.СчетДт = ПланыСчетов.Хозрасчетный.МатериалыПринятыеВПереработку;
    Движение.Период = Передача.Дата;
    Движение.Организация = Передача.Организация;
    Движение.ПодразделениеДт = Передача.Подразделение;
    Движение.Сумма = ТекСтрокаТовары.Сумма;
    Движение.КоличествоДт = ТекСтрокаТовары.Количество;
    Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = Передача.Контрагент;
    Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = ТекСтрокаТовары.Номенклатура;
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```
---
Источник.ОтражатьВБухгалтерскомУчете
у меня такого нет
---
Источник - РегистрБухгалтерииНаборЗаписей.Хозрасчетный
Событие - ПриЗаписи
Обработчик - ДобавленныйМодульДляДокументов.ДопПроводкиПоРегиструХозрасчетныйПриЗаписи

Код обработчика:

```1c
    Процедура ДопПроводкиПоРегиструХозрасчетныйПриЗаписи(Источник, Отказ, РежимЗаписи) Экспорт
    // регистр Хозрасчетный
    Передача = Источник.Отбор.Регистратор.Значение;
    Если ТипЗнч(Передача) = Тип("ДокументСсылка.ПередачаСырьяПереработчику") Тогда
    Если Передача.Давальческое = Истина Тогда
    ДокПередача = Передача.ПолучитьОбъект();
    НаборПроводок = ДокПередача.Движения.Хозрасчетный;
    НаборПроводок.Записывать = ИСТИНА;
    Для Каждого ТекСтрокаТовары Из Передача.Товары Цикл
    НоваяПроводка = Источник.Добавить();
    НоваяПроводка.СчетДт = ПланыСчетов.Хозрасчетный.МатериалыПринятыеВПереработку;
    НоваяПроводка.Период = Передача.Дата;
    НоваяПроводка.Организация = Передача.Организация;
    НоваяПроводка.ПодразделениеДт = Передача.Подразделение;
    НоваяПроводка.Сумма = ТекСтрокаТовары.Сумма;
    НоваяПроводка.КоличествоДт = ТекСтрокаТовары.Количество;
    НоваяПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = Передача.Контрагент;
    НоваяПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = ТекСтрокаТовары.Номенклатура;
    КонецЦикла;
    НаборПроводок.Записывать = ИСТИНА;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```

все происходит без ошибок, но моих проводок нет
---
Источник - РегистрБухгалтерииНаборЗаписей.Хозрасчетный
Событие - ПередЗаписью
Обработчик - ДобавленныйМодульДляДокументов.ДопПроводкиПоРегиструХозрасчетныйПриЗаписи

Код обработчика:
Код:
//

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

событие должно быть ПередЗаписью, так как ПриЗаписи нет смысла потому, что уже набор уже записан в БД
---
И вот продолжаем тему!

День бьюсь, пока безрезультатно.

насколько я понимаю у РБ ПриЗаписи вызывается два раза, вот основной вопрос. как попасть именно во второй вызов и обратиться к НаборуЗаписей?

Теперь необходимо мне удалить типовые проводки по определенному счету. Вот день уже потратил на поиски, где же могу я найти весь набор записей, а не только тот, в который я добавил свои проводки. Мне надо видеть все проводки в одном наборе, чтобы потом из выгрузить в ТЗ, перебрать с условием и обратно вернуть в набор записей. Кстати, как выгрузить в ТЗ из набора понятно, а как обратно в набор загрузить и записать?

То есть получается:
1) найти полный набор записей РБ по данному регистратору,
2) выгрузить наборзаписей РБ в ТЗ
3) перебрать ТЗ, удалить ненужные строки
4) загрузить оставшееся обратно в наборзаписей

кто что подскажет?
---
ладно, а такой вопрос, есть в документе "передачаСырьяПереработчкиу" в модуле менеджера Функция ТекстОтраженияВРеглУчете()

так вот, а можно ли как-нибудь из модуля менеджера объекта обратиться к реквизиту объекта, посмотреть, если он Истина, тогда не добавлять в массив определенные тексты отражения:

ТекстыОтражения = Новый Массив;
    ТекстыОтражения.Добавить(ПередачаКомиссионныхТоваровСписание);
    ТекстыОтражения.Добавить(ПередачаТоваров);
    ТекстыОтражения.Добавить(ПередачаТоваровСоСкладаПроизводства);
    ТекстыОтражения.Добавить(СписаниеМатериаловДавальца);
    ТекстыОтражения.Добавить(РасходыНаПроизводствоИзМатериаловДавальца);
    ТекстыОтражения.Добавить(СписаниеПродукцииДавальца);
    ТекстыОтражения.Добавить(РасходыНаПроизводствоИзПродукцииДавальца);
    ТекстыОтражения.Добавить(ЗалоговаяСтоимостьПереданнойТары);
    ТекстыОтражения.Добавить(ЗалоговаяСтоимостьПереданнойТарыСкладПроизводства);
    ТекстыОтражения.Добавить(ТекстВключениеИсключениеНДСВСтоимость);
---
такая ситуация, мне надо было добавить проводки для типового документа. чтобы они были по забалансу, я сделал подписку на событие для РБ ПереЗаписью, все хорошо, проводки добавились
но теперь другая ситуация, как мне у этого документа удалить типовую проводку по определенному счету

проводки формируются при отражении в регламентированном учете
у РБ ПередЗаписью вызывается два раза и формирование проводок происходит как раз во второй раз, я ни как не могу понять и найти. где и как поймать мне это второй раз, где в котором я смогу увидеть весь набор записей РБ
---
эх... Люди Добрые, скажите как убрать из движений типового документа типовые проводки по 10 счету
---
решил, всем спасибо
---
А как решил ?
---
Т.к. важным условием для меня было оставить конфигурацию на поддержке, то через расширение задача решается следующим образом:

В модуле менеджера регистра бухгалтерии Хозрасчетный есть процедура ВыполнитьДопОбработкуПроводок

Добавляем её в расширение &После. Пример кода:

```1c
    &После("ВыполнитьДопОбработкуПроводок")
    Процедура СЛК_ВыполнитьДопОбработкуПроводок(Проводки)

    Регистратор = Проводки.Отбор.Регистратор.Значение;
    Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.ПоступлениеБезналичныхДенежныхСредств") Тогда
    Если Регистратор.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПоступлениеОплатыПоПлатежнойКарте") Тогда
    Если Регистратор._СуммаУслуг > 0 Тогда
    НоваяПроводка = Проводки.Добавить();
    НоваяПроводка.СчетДт = ПланыСчетов.Хозрасчетный.ПрочиеРасходы;
    НоваяПроводка.Период = Регистратор.Дата;
    НоваяПроводка.Организация = Регистратор.Организация;
    НоваяПроводка.ПодразделениеДт = Регистратор.Подразделение;

    НоваяПроводка.КоличествоДт = 0;
    НоваяПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ПрочиеДоходыИРасходы] = ?(Найти(Строка(Регистратор.Подразделение), "ЕНВД") > 0, ПланыВидовХарактеристик.СтатьиРасходов.НайтиПоКоду("КА-000129"), ПланыВидовХарактеристик.СтатьиРасходов.НайтиПоКоду("КА-000008"));
    НоваяПроводка.СчетКт = ПланыСчетов.Хозрасчетный.ПродажиПоПлатежнымКартам;
    НоваяПроводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = Регистратор.Контрагент;
    НоваяПроводка.Содержание = "Комиссия по операциям эквайринга";

    НоваяПроводка.Сумма = Регистратор._СуммаУслуг;
    НоваяПроводка.СуммаНУКт = Регистратор._СуммаУслуг;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;

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