Я вроде бы уже писал с подбной проблемой, но методы которые мне посоветовали там не спасают.

Задача: сделать одноразовую обработку, которая пройдется по документам и заполнит недавно добавленные поля ТЧ.

Вычитал в СП про метод ЗагрузитьКолонку, показалось удобным (по крайней мере я воспринял это как оптимальный варинат), однако оно не работает. Подскажите, пожалуйста, как исправить.

```1c
    Процедура ЗаполнениеТЧ() Экспорт

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

    ТЗ = Запрос.Выполнить().Выгрузить();
    ТЗ.Индексы.Добавить("Ссылка");
    Доки = ТЗ.Скопировать(, "Ссылка");
    Доки.Свернуть("Ссылка");
    Для Каждого Док Из Доки Цикл
    ДокументОбъект = Док.Ссылка.ПолучитьОбъект();
    Опцион = ?(ДокументОбъект.Контрагент.КодПоОКПО = "77304466",5,10);
    Товары = ДокументОбъект.Товары;
    ОпционыВ = Новый Массив(Товары.Количество());
    ОпционыН = Новый Массив(Товары.Количество());
    Для Ь = 0 по (Товары.Количество()-1)Цикл
    ОпционыВ[Ь] = Опцион;
    ОпционыН[Ь] = Опцион * -1;
    КонецЦикла;
    ДокументОбъект.Товары.ЗагрузитьКолонку(ОпционыВ, "ижВерхнийОпцион");
    ДокументОбъект.Товары.ЗагрузитьКолонку(ОпционыН, "ижНижнийОпцион");
    ДокументОбъект.Записать();
    Прервать;
    КонецЦикла;

    КонецПроцедуры
```
---
Вычитал в СПГоре от ума.

```1c
    ДокументОбъект = Док.Ссылка.ПолучитьОбъект();
    Опцион = ?(ДокументОбъект.Контрагент.КодПоОКПО = "77304466",5,10);

    Для Каждого СтрокаДокумента Из ДокументОбъект.Товары Цикл
    СтрокаДокумента.ижВерхнийОпцион = Опцион;
    СтрокаДокумента.ижНижнийОпцион = - Опцион;
    КонецЦикла;

    ДокументОбъект.Записать();
```
---
Вычитал в СПГоре от ума.

```1c
    ДокументОбъект = Док.Ссылка.ПолучитьОбъект();
    Опцион = ?(ДокументОбъект.Контрагент.КодПоОКПО = "77304466",5,10);

    Для Каждого СтрокаДокумента Из ДокументОбъект.Товары Цикл
    СтрокаДокумента.ижВерхнийОпцион = Опцион;
    СтрокаДокумента.ижНижнийОпцион = - Опцион;
    КонецЦикла;

    ДокументОбъект.Записать();
```
---
```1c
    Запрос = Новый Запрос;
    запрос.Текст =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ижЗаказПокупателяТовары.Ссылка КАК Документ,
    | ВЫБОР
    | КОГДА ЕСТЬNULL(СпрКонтрагенты.КодПоОКПО, ") = "77304466"
    | ТОГДА 5
    | ИНАЧЕ 10
    | КОНЕЦ КАК ижВерхнийОпцион,
    | ВЫБОР
    | КОГДА ЕСТЬNULL(СпрКонтрагенты.КодПоОКПО, ") = "77304466"
    | ТОГДА -5
    | ИНАЧЕ -10
    | КОНЕЦ КАК ижНижнийОпцион
    |ИЗ
    | Документ.ижЗаказПокупателя.Товары КАК ижЗаказПокупателяТовары
    | ВНУТРЕНЕЕ СОЕДИНЕНИЕ Документ.ижЗаказПокупателя КАК Документы
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК СпрКонтрагенты
    | ПО Документы.Контрагент = СпрКонтрагенты.Ссылка
    | ПО ижЗаказПокупателяТовары.Ссылка = Документы.Ссылка
    | И ижЗаказПокупателяТовары.ижВерхнийОпцион = 0
    | И ижЗаказПокупателяТовары.ижНижнийОпцион = 0";
    ВыборкаДокументы = Запрос.Выполнить().Выбрать();
    Пока ВыборкаДокументы.Следующий() Цикл
    ДокОбъект = ВыборкаДокументы.Документ.ПолучитьОбъект();
    ТЗ = ДокОбъект.Товары.Выгрузить();
    ТЗ.ЗаполнитьЗначения("ижВерхнийОпцион", ВыборкаДокументы.ижВерхнийОпцион);
    ТЗ.ЗаполнитьЗначения("ижНижнийОпцион", ВыборкаДокументы.ижНижнийОпцион);
    ДокОбъект.Товары.Загрузить(ТЗ);
    ДокОбъект.Записать();
    КонецЦикла;
```
---
Еще одно горе от другого ума...

1) Контрагент в шапке, а не в табличной части
2) Достаточно выбирать Ссылка + НомерСтроки, тогда второй цикл банален.
---
Контрагент в шапке, а не в табличной части
исправил запрос и постобработку
---
Всё куда проще:

```1c
    Запрос = Новый Запрос("
    |ВЫБРАТЬ
    | ижЗаказПокупателяТовары.Ссылка КАК Ссылка,
    | ижЗаказПокупателяТовары.НомерСтроки КАК НомерСтроки,
    | ВЫБОР
    | КОГДА ижЗаказПокупателя.Ссылка.Контрагент.КодПоОКПО = "77304466"
    | ТОГДА 5
    | ИНАЧЕ 10
    | КОНЕЦ КАК ижВерхнийОпцион,
    | ВЫБОР
    | КОГДА ижЗаказПокупателя.Ссылка.Контрагент.КодПоОКПО = "77304466"
    | ТОГДА -5
    | ИНАЧЕ -10
    | КОНЕЦ КАК ижНижнийОпцион
    |ИЗ
    | Документ.ижЗаказПокупателя.Товары КАК ижЗаказПокупателяТовары
    |ГДЕ
    | ижЗаказПокупателяТовары.ижВерхнийОпцион = 0
    | И ижЗаказПокупателяТовары.ижНижнийОпцион = 0
    |ИТОГИ ПО
    | Ссылка");
    ВыборкаДокументы = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаДокументы.Следующий() Цикл
    ДокОбъект = ВыборкаДокументы.Ссылка.ПолучитьОбъект();
    Товары = ДокОбъект.Товары

    ВыборкаСтроки = ВыборкаДокументы.Выбрать();
    Пока ВыборкаСтроки.Следующий() Цикл
    ЗаполнитьЗначениеСвойств(Товары[ВыборкаСтроки.НомерСтроки], ВыборкаСтроки, "ижВерхнийОпцион, ижНижнийОпцион");
    КонецЦикла;

    ДокОбъект.Записать();
    КонецЦикла;
```

Не запускал.
---
ЗаполнитьЗначениеСвойств(Товары[ВыборкаСтроки.НомерСтроки], ВыборкаСтроки, "ижВерхнийОпцион, ижНижнийОпцион");
да, да, проще....:)
---
Если что, то твой код вообще всю табличную часть документа портит, невизирая на то в какой строке что находится.
---
Минус единичку в индексе товаров забыл. Можно сразу в запросе отнять.