Как изменить данные только в одной колонке ТЧ ?

1. dejurik 25.02.24 20:31 Сейчас в теме
Добрый день, Всем! Покажите пример, как применить метод "ЗагрузитьКолонку" в табличную часть. В контекстной подсказке выпадает только метод "Загрузить".

	
    ТЗ_ВсеСтроки = Объект.ТЧДанныеJS.Выгрузить();
	Для Каждого СтрокаТЗ Из ТЗ_ВсеСтроки Цикл
		Если СтрокаТЗ.БуферКоличество = 0 Тогда  
			СтрокаТЗ.БуферКоличество = СтрокаТЗ.СкладКоличество; 
		КонецЕсли;
	КонецЦикла;	
	Объект.ТЧДанныеJS.Загрузить(ТЗ_ВсеСтроки); 
Показать
По теме из базы знаний
Найденные решения
12. user1880116 26.02.24 09:47 Сейчас в теме
(11)
Сложно

1. Алгоритм твоего примера, в модуле формы. Перезагрузки не требует вообще.
Для Каждого Строка Из Объект.ТЧДанныеJS Цикл
    Если Строка.БуферКоличество = 0 Тогда  
        Строка.БуферКоличество = Строка.СкладКоличество; 
    КонецЕсли;
КонецЦикла;    

2. Перезагрузка всей колонки в модуле формы через таблицу значений
Таблица = Объект.ТЧДанныеJS.Выгрузить();
ЗначенияКолонки = Таблица.ВыгрузитьКолонку("СкладКоличество");
Таблица.ЗагрузитьКолонку("БуферКоличество ", ЗначенияКолонки)
Объект.ТЧДанныеJS.Загрузить(Таблица);

3. Перезагрузка всей колонки в модуле формы через объект основного реквизита. Вместо явной выгрузки в таблицу значений используется неявная при преобразовании реквизита формы в объект и обратно.
ОсновнойОбъект = РеквизитФормыВЗначение("Объект");
ЗначенияКолонки = ОсновнойОбъект.ТЧДанныеJS.ВыгрузитьКолонку("СкладКоличество");
ОсновнойОбъект.ЗагрузитьКолонку("БуферКоличество ", ЗначенияКолонки);
ЗначениеВРеквизитФормы(ОсновнойОбъект, "Объект");

4. Перезагрузка всей колонки из модуля формы вызовом модуля объекта. Реквизит формы всё также перезаполнятеся целиком при неявном преобразовании реквизита формы в объект и обратно.

В модуле формы:
ОсновнойОбъект = РеквизитФормыВЗначение("Объект");
ОсновнойОбъект.ПерезаполнитьКолонки();
ЗначениеВРеквизитФормы(ОсновнойОбъект, "Объект");
И в модуле объекта:
Процедура ПерезаполнитьКолонки() Экспорт
    ЗначенияКолонки = ТЧДанныеJS.ВыгрузитьКолонку("СкладКоличество");
    ЗагрузитьКолонку("БуферКоличество ", ЗначенияКолонки);
КонецПроцедуры

Производительность разная.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 25.02.24 21:55 Сейчас в теме
(1) В модуле объекта надо грузить
Прикрепленные файлы:
3. dejurik 26.02.24 05:16 Сейчас в теме
4. user1880116 26.02.24 08:51 Сейчас в теме
А зачем вообще что-то куда-то выгружать и загружать, если все равно всё сводится к обходу циклом?
5. dejurik 26.02.24 09:07 Сейчас в теме
(4) Мне нужно загрузить значения колонки табличной части "СкладКоличество" в колонку "БуферКоличество". Выгружаю данные в ТЗ, обрабатываю в цикле и загружаю в ТЧ. Если есть другой путь, покажите, буду признателен.
6. user1880116 26.02.24 09:13 Сейчас в теме
(5)
Мне нужно
Просто перебирай строки своего Объект.ТЧДанныеJS.

Если бы тебе надо было заполнить всю колонку, но можно было бы думать о выгрузке и загрузке. Но ты обрабатываешь только нулевые.
7. dejurik 26.02.24 09:17 Сейчас в теме
(6) Я привел пример, только части кода, чтобы понять принцип загрузки в ТЧ только одной колонки, чтобы не было перезаписи всей таблицы.
8. user1880116 26.02.24 09:19 Сейчас в теме
(7)
чтобы понять
И для этого ты привел пример, который выгрузки и загрузки не требует. Очень хорошо.
9. dejurik 26.02.24 09:23 Сейчас в теме
(8) Все верно, в модуле объекта не требует, но я изначально делал это в модуле формы, о чем мне подсказали выше.
10. user1880116 26.02.24 09:27 Сейчас в теме
(9) Оно и в модуле формы не требует, уж поверь.

Ты разберись для начала где какой тип данных возникает и какие методы у объекта этого типа есть. А потом уже паникуй "в контекстной подсказке выпадает только метод".
11. dejurik 26.02.24 09:30 Сейчас в теме
12. user1880116 26.02.24 09:47 Сейчас в теме
(11)
Сложно

1. Алгоритм твоего примера, в модуле формы. Перезагрузки не требует вообще.
Для Каждого Строка Из Объект.ТЧДанныеJS Цикл
    Если Строка.БуферКоличество = 0 Тогда  
        Строка.БуферКоличество = Строка.СкладКоличество; 
    КонецЕсли;
КонецЦикла;    

2. Перезагрузка всей колонки в модуле формы через таблицу значений
Таблица = Объект.ТЧДанныеJS.Выгрузить();
ЗначенияКолонки = Таблица.ВыгрузитьКолонку("СкладКоличество");
Таблица.ЗагрузитьКолонку("БуферКоличество ", ЗначенияКолонки)
Объект.ТЧДанныеJS.Загрузить(Таблица);

3. Перезагрузка всей колонки в модуле формы через объект основного реквизита. Вместо явной выгрузки в таблицу значений используется неявная при преобразовании реквизита формы в объект и обратно.
ОсновнойОбъект = РеквизитФормыВЗначение("Объект");
ЗначенияКолонки = ОсновнойОбъект.ТЧДанныеJS.ВыгрузитьКолонку("СкладКоличество");
ОсновнойОбъект.ЗагрузитьКолонку("БуферКоличество ", ЗначенияКолонки);
ЗначениеВРеквизитФормы(ОсновнойОбъект, "Объект");

4. Перезагрузка всей колонки из модуля формы вызовом модуля объекта. Реквизит формы всё также перезаполнятеся целиком при неявном преобразовании реквизита формы в объект и обратно.

В модуле формы:
ОсновнойОбъект = РеквизитФормыВЗначение("Объект");
ОсновнойОбъект.ПерезаполнитьКолонки();
ЗначениеВРеквизитФормы(ОсновнойОбъект, "Объект");
И в модуле объекта:
Процедура ПерезаполнитьКолонки() Экспорт
    ЗначенияКолонки = ТЧДанныеJS.ВыгрузитьКолонку("СкладКоличество");
    ЗагрузитьКолонку("БуферКоличество ", ЗначенияКолонки);
КонецПроцедуры

Производительность разная.
13. dejurik 26.02.24 09:59 Сейчас в теме
Спасибо огромное за примеры! Делал как в 4-ом варианте, думал это единственный верный путь. В каком варианте выше производительность ?
14. user1880116 26.02.24 10:21 Сейчас в теме
(13) Зависит от размеров таблицы. Если там десяток строчек, то проще перебрать их в цикле, как в варианте 1. Если там много, то через явную выгрузку варианта 2. Варианты 3 и 4 используют дополнительно преобразование реквизита формы в объект, это дорогая операция, ведущая к компиляции модуля объекта и выполнения кода в его секции инициализации.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот