Здравствуйте. Хочу оптимизировать код, перепробывал несколь вариантов, но все не делают лучше. Хочу спросить ваших советов/помощи.

Программа должна сделать записи в ТЧ документа ИжСертификаты и убрать данные из реквизита ЭлектронныйДокумент.

Код:
```1c
    Процедура ЗаполнениеТЧ() Экспорт
    ЗапросРТиУ = Новый Запрос;
    ЗапросРТиУ.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | РеализацияТоваровУслугТовары.Ссылка,
    | РеализацияТоваровУслугТовары.СерияНоменклатуры.ижСертификат КАК Сертификат
    |ИЗ
    | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары";
    РезРТиУ = ЗапросРТиУ.Выполнить().Выгрузить();

    ЗапросСертификаты = Новый Запрос;
    ЗапросСертификаты.Текст = "ВЫБРАТЬ
    | ижСертификат.Ссылка КАК Ссылка,
    | ижСертификат.ЭлектронныйДокумент КАК ЭД
    |ИЗ
    | Документ.ижСертификат КАК ижСертификат
    |ГДЕ
    | ижСертификат.ЭлектронныйДокумент > &ЭлектронныйДокумент";
    ЭДшка = Документы.ЭлектронныйДокументИсходящий.НайтиПоНомеру("00000000001");
    ЗапросСертификаты.УстановитьПараметр("ЭлектронныйДокумент",ЭДшка);
    РезСертификаты = ЗапросСертификаты.Выполнить().Выгрузить();

    Для каждого СтрСертификаты Из РезСертификаты Цикл
    Если ЗначениеЗаполнено(СтрСертификаты.ЭД) Тогда

    Для каждого СтрРТиУ Из РезРТиУ Цикл
    Если СтрРТиУ.Сертификат = СтрСертификаты.Ссылка Тогда
    ДокСертификат = СтрСертификаты.Ссылка.ПолучитьОбъект();
    СтрокаТЧ = ДокСертификат.ЭлектронныеДокументы.Добавить();
    СтрокаТЧ.ЭлектронныйДокументСертификата = СтрСертификаты.ЭД;
    СтрокаТЧ.РеализацияТоваровУслуг = СтрРТиУ.Ссылка;
    СтрокаТЧ.Вес = 0;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;

    Для каждого СтрСертификаты Из РезСертификаты Цикл
    Если ЗначениеЗаполнено(СтрСертификаты.ЭД) Тогда

    Для каждого СтрРТиУ Из РезРТиУ Цикл
    Если СтрРТиУ.Сертификат = СтрСертификаты.Ссылка Тогда
    ДокСертификат = СтрСертификаты.Ссылка.ПолучитьОбъект();
    ДокСертификат.ЭлектронныйДокумент = Неопределено;
    ДокСертификат.Записать();
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;

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

Я пробовал всячески засунуть "ДокСертификат.ЭлектронныйДокумент = Неопределено;" в первый цикл, но либо выдает ошибку, либо не отрабатывает как надо. Может я чего-то упустил, не исключаю, но как-то не хочется пускать код, где 10 записей обрабатываются 3,5 минуты (даже не смотря на то, что обработка одноразовая и после окончания отправиться в мусорку).
---
Попробуйте так
```1c
    Процедура ЗаполнениеТЧ()

    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | ижСертификат.Ссылка КАК Ссылка,
    | ижСертификат.ЭлектронныйДокумент КАК ЭлектронныйДокумент,
    | РеализацияТоваровУслугТовары.Ссылка КАК ДокументРТУ
    |ИЗ
    | Документ.ижСертификат КАК ижСертификат
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    | ПО ижСертификат.Ссылка = РеализацияТоваровУслугТовары.СерияНоменклатуры.ижСертификат
    |ГДЕ
    | ижСертификат.ЭлектронныйДокумент > &ЭДшка
    |
    |СГРУППИРОВАТЬ ПО
    | ижСертификат.Ссылка,
    | ижСертификат.ЭлектронныйДокумент,
    | РеализацияТоваровУслугТовары.Ссылка");

    Запрос.УстановитьПараметр("ЭДшка", Документы.ЭлектронныйДокументИсходящий.НайтиПоНомеру("00000000001"));

    ТЗ = Запрос.Выполнить().Выгрузить();
    ТЗ.Индексы.Добавить("Ссылка");

    Сертификаты = ТЗ.Скопировать(, "Ссылка");
    Сертификаты.Свернуть("Ссылка");
    Сертификаты = Сертификаты.ВыгрузитьКолонку(0);

    Для Каждого Сертификат Из Сертификаты Цикл

    ДокументОбъект = Сертификат.ПолучитьОбъект();

    МассивСтрок = ТЗ.НайтиСтроки(Новый Структура("Ссылка", Сертификат));
    ДокументОбъект.ЭлектронныеДокументы.Очистить();
    Для Каждого Стр Из МассивСтрок Цикл
    НоваяСтрока = ДокументОбъект.ЭлектронныеДокументы.Добавить();
    НоваяСтрока.ЭлектронныйДокументСертификата = Стр.ЭлектронныйДокумент;
    НоваяСтрока.РеализацияТоваровУслуг = Стр.ДокументРТУ;
    КонецЦикла;

    ДокументОбъект.ЭлектронныйДокумент = Неопределено;
    РежимЗаписи = ?(ДокументОбъект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись);
    Попытка
    ДокументОбъект.Записать(РежимЗаписи);
    Исключение
    ТекстОшибки = ОписаниеОшибки();
    Сообщить(ТекстОшибки);
    КонецПопытки;

    КонецЦикла;

    КонецПроцедуры
```
---
По сравнению с прошлым вариантом - все плохо. Нет не плохо, а ужасно.
---
Да, плохо, но отрабатывает как надо. Потому что раньше оно затирало Электронынй документ после того как находило перове совпадение, в то время как их могло быть три. И мне надо было отразить все три, а не только первое. Если знаете как это лучше организовать буду только рад послушать
---
Че, думаете я не пробовал через один вложенный цикл сделать? Пробовал, в нескольких версиях, работать оно работало, но совершенно не так как должно. Не исключаю, что версия правильная у меня была, просто тестил я так себе, но если это как-то успокоит ваши нервы, был у меня такой вариант:

```1c
    Процедура ЗаполнениеТЧ() Экспорт
    ЗапросРТиУ = Новый Запрос;
    ЗапросРТиУ.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | РеализацияТоваровУслугТовары.Ссылка,
    | РеализацияТоваровУслугТовары.СерияНоменклатуры.ижСертификат КАК Сертификат
    |ИЗ
    | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары";
    РезРТиУ = ЗапросРТиУ.Выполнить().Выгрузить();

    ЗапросСертификаты = Новый Запрос;
    ЗапросСертификаты.Текст = "ВЫБРАТЬ
    | ижСертификат.Ссылка КАК Ссылка,
    | ижСертификат.ЭлектронныйДокумент КАК ЭД
    |ИЗ
    | Документ.ижСертификат КАК ижСертификат
    |ГДЕ
    | ижСертификат.ЭлектронныйДокумент > &ЭлектронныйДокумент";
    ЭДшка = Документы.ЭлектронныйДокументИсходящий.НайтиПоНомеру("00000000001");
    ЗапросСертификаты.УстановитьПараметр("ЭлектронныйДокумент",ЭДшка);
    РезСертификаты = ЗапросСертификаты.Выполнить().Выгрузить();

    Для каждого СтрСертификаты Из РезСертификаты Цикл
    Если ЗначениеЗаполнено(СтрСертификаты.ЭД) Тогда

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

    КонецПроцедуры
```
---
Святая корова.......
---
Попробуйте так
```1c
    Процедура ЗаполнениеТЧ()

    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | ижСертификат.Ссылка КАК Ссылка,
    | ижСертификат.ЭлектронныйДокумент КАК ЭлектронныйДокумент,
    | РеализацияТоваровУслугТовары.Ссылка КАК ДокументРТУ
    |ИЗ
    | Документ.ижСертификат КАК ижСертификат
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    | ПО ижСертификат.Ссылка = РеализацияТоваровУслугТовары.СерияНоменклатуры.ижСертификат
    |ГДЕ
    | ижСертификат.ЭлектронныйДокумент > &ЭДшка
    |
    |СГРУППИРОВАТЬ ПО
    | ижСертификат.Ссылка,
    | ижСертификат.ЭлектронныйДокумент,
    | РеализацияТоваровУслугТовары.Ссылка");

    Запрос.УстановитьПараметр("ЭДшка", Документы.ЭлектронныйДокументИсходящий.НайтиПоНомеру("00000000001"));

    ТЗ = Запрос.Выполнить().Выгрузить();
    ТЗ.Индексы.Добавить("Ссылка");

    Сертификаты = ТЗ.Скопировать(, "Ссылка");
    Сертификаты.Свернуть("Ссылка");
    Сертификаты = Сертификаты.ВыгрузитьКолонку(0);

    Для Каждого Сертификат Из Сертификаты Цикл

    ДокументОбъект = Сертификат.ПолучитьОбъект();

    МассивСтрок = ТЗ.НайтиСтроки(Новый Структура("Ссылка", Сертификат));
    ДокументОбъект.ЭлектронныеДокументы.Очистить();
    Для Каждого Стр Из МассивСтрок Цикл
    НоваяСтрока = ДокументОбъект.ЭлектронныеДокументы.Добавить();
    НоваяСтрока.ЭлектронныйДокументСертификата = Стр.ЭлектронныйДокумент;
    НоваяСтрока.РеализацияТоваровУслуг = Стр.ДокументРТУ;
    КонецЦикла;

    ДокументОбъект.ЭлектронныйДокумент = Неопределено;
    РежимЗаписи = ?(ДокументОбъект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись);
    Попытка
    ДокументОбъект.Записать(РежимЗаписи);
    Исключение
    ТекстОшибки = ОписаниеОшибки();
    Сообщить(ТекстОшибки);
    КонецПопытки;

    КонецЦикла;

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