Версия для печати темы (https://pro1c.org.ua/index.php?s=87108fbeb5e33a51bb569cd8cb85a470&showtopic=44665)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ В ТЧ обработки изменить данные для отфильтрованных записей

Автор: Constantus 14.03.18, 9:45

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

Написал некую обработку.
Создал для нее форму с табличной частью "Детально" и командной панелью с классическими действиями по фильтрам "Установить отбор и сортировку списка"
Одним словом всё работает и придраться вроде не к чему, но...

Есть у меня в этой табличной части поле "Да" (булево). Это булево отвечает за дальнейшие действия под данной обработке, типа если в этой строке есть "Да" = истина, то выполнять нужно.
Так же есть кнопка, которая делает поле "да" = истина программно.

    Для каждого СтрокаТабличнойЧасти Из Детально Цикл
        СтрокаТабличнойЧасти.Да = Истина;
    КонецЦикла;



Встал вопрос. В ТЧ появилось 100 записей. Я фильтром отбираю и вывожу на экран только 20 записей. Как программно установить значение "Да"= истина только для отфильтрованных данных в ТЧ обработки?

Автор: Valerka 14.03.18, 14:08

НайтиСтроки()
НакладываеТЕ такой-же фильтр, как ив программе, перебираеТЕ и меняеТЕ.


 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 1
 

Автор: Bernet 14.03.18, 14:43

Constantus @ Сегодня, 9:45 * ,
Получить отфильтрованные строки можно так:

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

&НаСервере
Процедура ОбработатьСтрокиТаблицыНаСервере(ИдентификаторыВыбраныхСтрок)
    
    ВыбраныеСтроки = Новый Массив;
    
    Для Каждого ИдентификаторСтроки Из ИдентификаторыВыбраныхСтрок Цикл
       ОтфильтрованнаяСтрока = Объект.ТабличнаяЧасть1.НайтиПоИдентификатору(ИдентификаторСтроки);
        ОтфильтрованнаяСтрока.Реквизит1 = "Некая строка";    
    КонецЦикла;

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

Объект.ТабличнаяЧасть1 - это ваша таб. часть

Автор: Constantus 14.03.18, 14:48

Valerka @ Сегодня, 17:08 * ,

Вот написал код с предложенным

    Отбор = Новый Структура;
    Отбор.Вставить("Наименование", "Кредит 3 дн.");
    
    НайденныеСтроки = Детально.НайтиСтроки(Отбор);
    
    Для Каждого Стр из НайденныеСтроки Цикл
        Стр.ДА = Истина;
    КонецЦикла;


Отработал, но я здесь жестко прописал фильтрованное значение. А как вытащить значение из фильтра?
Я в фильтре на форме поставил на "Наименование" содержит "3 дн"

А здесь получается должно совпадать наименование полностью ("Наименование" - текстовое значение)

Автор: Bernet 14.03.18, 14:53

Constantus @ Сегодня, 14:48 * ,
Сделайте как я предложил выше и не надо будет играться с накладыванием фильтра =) Сразу получите идентификаторы уже отобранных строк, дальше по ним получаете строку и делаете с ней что хотите

Автор: Constantus 14.03.18, 15:09

Bernet @ Сегодня, 17:43 * ,

У меня обычные формы. Попробовал переделать код, не помогло...

Bernet @ Сегодня, 17:53 * ,

Для Каждого СтрокаТаблицыФормы Из ЭлементыФормы.Детально Цикл


{Обработка.МассоваяПометкаНаУдалениеДоговоров.Форма.Форма.Форма(200)}: Итератор для значения не определен
    Для Каждого СтрокаТаблицыФормы Из ЭлементыФормы.Детально Цикл



Ваш код

Для Каждого СтрокаТаблицыФормы Из Объект.ТабличнаяЧасть1 Цикл

Автор: Bernet 14.03.18, 15:26

Constantus @ Сегодня, 15:09 * ,
извиняюсь проморгал - мне казалось вы раньше по упр формам вопросы задавали)
вот такой изврат для обычных форм сработает:

        ТЗ = ЭлементыФормы.ТабличнаяЧасть1;
    
    ДанныеТаблицы = Неопределено;
    
    Выполнить("ДанныеТаблицы="+ТЗ.Данные);
    
    Для Каждого СтрокаТЗ ИЗ ДанныеТаблицы Цикл
        
        ТЗ.ТекущаяСтрока = СтрокаТЗ;
        Если ТЗ.ТекущаяСтрока = СтрокаТЗ Тогда // попали в отбор
            
            СтрокаТЗ.Реквизит1 = "Некое значение";    
            
        КонецЕсли;
        
    КонецЦикла;

Автор: Constantus 14.03.18, 15:31

Bernet @ Сегодня, 18:26 * ,

Благодарю, сработало...

Что это такое:

Выполнить("ДанныеТаблицы="+ТЗ.Данные);
?

Автор: Bernet 14.03.18, 15:36

Constantus @ Сегодня, 15:31 * ,
Команда на запуск фонового задания - в данном контексте это одна строка кода, которая вычитывает данные таблицы формы и запихивает результат в локальную переменную.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua