Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Обработка табличной части УТ 10.3

Обработка табличной части УТ 10.3
Я
   d_pinchuk
 
24.03.21 - 15:07
Почему при добавлении новой строки в типовую обработкуТЧ кнопкой "добавить" Невозможно изменить текущую строку?
{Обработка.ОбработкаТабличнойЧастиТовары.Форма.Форма.Форма(2122)}: Ошибка при установке значения атрибута контекста (ТекущаяСтрока)
                ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока = Товары[ИндексСтроки];
по причине:
Невозможно изменить текущую строку

Если же идет речь о существующих строках, то замена происходит без проблем.
Ошибку то не сложно было обойти конструкцией "попытка-исключение-конецпопытки", но, все же, вопрос остался.
Ниже типовая функция, в которой дописано пару строк, для того, чтобы не обновлялась текущая строка, после метода ТЗ.Загрузить()

// Функция выполняет пересчет автоматических скидок.
//
// Возвращаемое значение:
//  Булево - Истина, если автоматические скидки были рассчитаны.
//
Функция ПересчитатьАвтоматическиеСкидки()
    
    // Добавим переменную для сохранения индекса, под которым хранятся данные Текущей Строки.
    Перем ИндексСтроки;

    Если мРассчитыватьАвтоматическиеСкидки Тогда
        мСуммаДокументаБезСкидок = Ценообразование.ПолучитьСуммуДокументаБезСкидки(Товары);
        СтруктураПараметров = Новый Структура;
        СтруктураПараметров.Вставить("ВидРеализации"                 , Перечисления.ВидыСкидок.Оптовая);
        СтруктураПараметров.Вставить("СуммаДокумента"                , мСуммаДокументаБезСкидок);
        СтруктураПараметров.Вставить("Карта"                         , ДокументОбъект.ДисконтнаяКарта);
        СтруктураПараметров.Вставить("ВалютаРегламентированногоУчета", мВалютаРегламентированногоУчета);

        Если мЕстьНДС Тогда
            СтруктураПараметров.Вставить("УчитыватьНДС"    , ДокументОбъект.УчитыватьНДС);
            СтруктураПараметров.Вставить("СуммаВключаетНДС", ДокументОбъект.СуммаВключаетНДС);
        КонецЕсли;

        СтруктураПараметров.Вставить("УчетнаяПолитика", мУчетнаяПолитика);

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

            ОбработкаТабличныхЧастей.РассчитатьСкидкиПриПродаже(ДокументОбъект, ТЗТовары, СтруктураПараметров, мМинимальныеЦены, мСписокФильтров);

            КолонкаКачество = Товары.ВыгрузитьКолонку("Качество");
            
            // Сохраним Индекс, под которым хранятся данные Текущей Строки в ТЗТовары.
            ИндексСтроки = ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока.НомерСтроки - 1;
            
            Товары.Загрузить(ТЗТовары); // очищает ТЧ, ТекущаяСтрока = Неопределено
            Товары.ЗагрузитьКолонку(КолонкаКачество, "Качество");        
        КонецЕсли;
        
            // Заменим данные Текущей Строки на прежние.
            Попытка
                ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока = Товары[ИндексСтроки];
            Исключение
        
            КонецПопытки;
            
        Возврат Истина;
    Иначе
        Возврат Ложь;
    КонецЕсли;

КонецФункции // ПересчитатьАвтоматическиеСкидки()
   d_pinchuk
 
1 - 29.03.21 - 12:43
Вариантов нет?
   Малыш Джон
 
2 - 29.03.21 - 12:54
(1) варианты всегда есть

Если на строке присваивания остановиться, что отладчик про ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока и про Товары[ИндексСтроки] говорит?
   Галахад
 
3 - 29.03.21 - 13:07
(0) Редактирование новой строки, скорее всего еще не закончено.
   d_pinchuk
 
4 - 30.03.21 - 09:55
(2) ЭлементыФормы.Товары.ТекущаяСтрока = Неопределено
    Товары[ИндексСтроки] = ОбработкаТабличнаяЧастьСтрока.ОбработкаТабличнойЧастиТовары.Товары (Объект с номером строки = создаваемой строке)

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.