Запись изменений в табличной части документа
Я вроде бы уже писал с подбной проблемой, но методы которые мне посоветовали там не спасают.
Задача: сделать одноразовую обработку, которая пройдется по документам и заполнит недавно добавленные поля ТЧ.
Вычитал в СП про метод ЗагрузитьКолонку, показалось удобным (по крайней мере я воспринял это как оптимальный варинат), однако оно не работает. Подскажите, пожалуйста, как исправить.
Задача: сделать одноразовую обработку, которая пройдется по документам и заполнит недавно добавленные поля ТЧ.
Вычитал в СП про метод ЗагрузитьКолонку, показалось удобным (по крайней мере я воспринял это как оптимальный варинат), однако оно не работает. Подскажите, пожалуйста, как исправить.
Процедура ЗаполнениеТЧ() Экспорт
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ижЗаказПокупателя.Ссылка КАК Ссылка,
| ижЗаказПокупателя.Контрагент.КодПоОКПО
|ИЗ
| Документ.ижЗаказПокупателя.Товары КАК ижЗаказПокупателяТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ижЗаказПокупателя КАК ижЗаказПокупателя
| ПО ижЗаказПокупателяТовары.Ссылка = ижЗаказПокупателя.Ссылка
|ГДЕ
| ижЗаказПокупателяТовары.ижВерхнийОпцион = 0
| И ижЗаказПокупателяТовары.ижНижнийОпцион = 0");
ТЗ = Запрос.Выполнить().Выгрузить();
ТЗ.Индексы.Добавить("Ссылка");
Доки = ТЗ.Скопировать(, "Ссылка");
Доки.Свернуть("Ссылка");
Для Каждого Док Из Доки Цикл
ДокументОбъект = Док.Ссылка.ПолучитьОбъект();
Опцион = ?(ДокументОбъект.Контрагент.КодПоОКПО = "77304466",5,10);
Товары = ДокументОбъект.Товары;
ОпционыВ = Новый Массив(Товары.Количество());
ОпционыН = Новый Массив(Товары.Количество());
Для Ь = 0 по (Товары.Количество()-1)Цикл
ОпционыВ[Ь] = Опцион;
ОпционыН[Ь] = Опцион * -1;
КонецЦикла;
ДокументОбъект.Товары.ЗагрузитьКолонку(ОпционыВ, "ижВерхнийОпцион");
ДокументОбъект.Товары.ЗагрузитьКолонку(ОпционыН, "ижНижнийОпцион");
ДокументОбъект.Записать();
Прервать;
КонецЦикла;
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Подсистема: История изменений реквизитов объекта, в том числе табличных частей. 1С 8.2
- Документооборот КОРП. Внедрение функции «Автоматическое заполнение таблиц в шаблоне odt по данным табличной части справочника»
- Универсальная загрузка табличной части документа из таблицы (внешняя обработка)
- Универсальный редактор реквизитов, табличных частей и движений объекта
- Дополнительные реквизиты табличной части документов без изменения хранения данных
Найденные решения
(1)
Вычитал в СП
Горе от ума.
ДокументОбъект = Док.Ссылка.ПолучитьОбъект();
Опцион = ?(ДокументОбъект.Контрагент.КодПоОКПО = "77304466",5,10);
Для Каждого СтрокаДокумента Из ДокументОбъект.Товары Цикл
СтрокаДокумента.ижВерхнийОпцион = Опцион;
СтрокаДокумента.ижНижнийОпцион = - Опцион;
КонецЦикла;
ДокументОбъект.Записать();
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Вычитал в СП
Горе от ума.
ДокументОбъект = Док.Ссылка.ПолучитьОбъект();
Опцион = ?(ДокументОбъект.Контрагент.КодПоОКПО = "77304466",5,10);
Для Каждого СтрокаДокумента Из ДокументОбъект.Товары Цикл
СтрокаДокумента.ижВерхнийОпцион = Опцион;
СтрокаДокумента.ижНижнийОпцион = - Опцион;
КонецЦикла;
ДокументОбъект.Записать();
Показать
(1)
Запрос = Новый Запрос;
запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ижЗаказПокупателяТовары.Ссылка КАК Документ,
| ВЫБОР
| КОГДА ЕСТЬNULL(СпрКонтрагенты.КодПоОКПО, "") = "77304466"
| ТОГДА 5
| ИНАЧЕ 10
| КОНЕЦ КАК ижВерхнийОпцион,
| ВЫБОР
| КОГДА ЕСТЬNULL(СпрКонтрагенты.КодПоОКПО, "") = "77304466"
| ТОГДА -5
| ИНАЧЕ -10
| КОНЕЦ КАК ижНижнийОпцион
|ИЗ
| Документ.ижЗаказПокупателя.Товары КАК ижЗаказПокупателяТовары
| ВНУТРЕНЕЕ СОЕДИНЕНИЕ Документ.ижЗаказПокупателя КАК Документы
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК СпрКонтрагенты
| ПО Документы.Контрагент = СпрКонтрагенты.Ссылка
| ПО ижЗаказПокупателяТовары.Ссылка = Документы.Ссылка
| И ижЗаказПокупателяТовары.ижВерхнийОпцион = 0
| И ижЗаказПокупателяТовары.ижНижнийОпцион = 0";
ВыборкаДокументы = Запрос.Выполнить().Выбрать();
Пока ВыборкаДокументы.Следующий() Цикл
ДокОбъект = ВыборкаДокументы.Документ.ПолучитьОбъект();
ТЗ = ДокОбъект.Товары.Выгрузить();
ТЗ.ЗаполнитьЗначения("ижВерхнийОпцион", ВыборкаДокументы.ижВерхнийОпцион);
ТЗ.ЗаполнитьЗначения("ижНижнийОпцион", ВыборкаДокументы.ижНижнийОпцион);
ДокОбъект.Товары.Загрузить(ТЗ);
ДокОбъект.Записать();
КонецЦикла;
Показать
Всё куда проще:
Не запускал.
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ижЗаказПокупателяТовары.Ссылка КАК Ссылка,
| ижЗаказПокупателяТовары.НомерСтроки КАК НомерСтроки,
| ВЫБОР
| КОГДА ижЗаказПокупателя.Ссылка.Контрагент.КодПоОКПО = "77304466"
| ТОГДА 5
| ИНАЧЕ 10
| КОНЕЦ КАК ижВерхнийОпцион,
| ВЫБОР
| КОГДА ижЗаказПокупателя.Ссылка.Контрагент.КодПоОКПО = "77304466"
| ТОГДА -5
| ИНАЧЕ -10
| КОНЕЦ КАК ижНижнийОпцион
|ИЗ
| Документ.ижЗаказПокупателя.Товары КАК ижЗаказПокупателяТовары
|ГДЕ
| ижЗаказПокупателяТовары.ижВерхнийОпцион = 0
| И ижЗаказПокупателяТовары.ижНижнийОпцион = 0
|ИТОГИ ПО
| Ссылка");
ВыборкаДокументы = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДокументы.Следующий() Цикл
ДокОбъект = ВыборкаДокументы.Ссылка.ПолучитьОбъект();
Товары = ДокОбъект.Товары
ВыборкаСтроки = ВыборкаДокументы.Выбрать();
Пока ВыборкаСтроки.Следующий() Цикл
ЗаполнитьЗначениеСвойств(Товары[ВыборкаСтроки.НомерСтроки], ВыборкаСтроки, "ижВерхнийОпцион, ижНижнийОпцион");
КонецЦикла;
ДокОбъект.Записать();
КонецЦикла;
ПоказатьНе запускал.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот