Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: отбор в табличной части
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
alex040269
Доброе время суток.
Подскажите, пожалуйста, как обойти строки табчасти, соответсвующие отбору.

Конкретно интерисует табличная часть "Неявки" обработки "Анализ неявок" из ЗиУП.

Спасибо.


Hokum
Можно использовать НайтиСтроки()

ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Сотрудник", Сотрудник);
НайденныеСтроки = Неявки.НайтиСтроки(ПараметрыОтбора);


Для каждого Строка из НайденныеСтроки Цикл

КонецЦикла
Ardi
Запрос к источнику данных.
Hokum
Если отбор сложнее одного параметра, то запрос конечно.
Ardi
Или источник данных это для журнала документов?
alex040269
Пользователь заполняет, табличную часть, нажимает правую кнопку мыши, устанавливает произвольный отбор.
Затем нажимает кнопку на панели под которой код:

Для Каждого Стр Из Неявки Цикл
   Стр.Пометка = Истина
КонецЦикла


Нужно цикл заменить так, чтобы обрабатывались не все строки,а только строки, удовлетворяющие отбору пользователя.
logist
Я вот не помню точно, но вроде можно получить текущий отбор, а дальше как написали выше - через НайтиСтроки.
alex040269
в общем ничего не придумалось кроме:
Функция СоответсвуетОтбору(СтрокаТЧ,ОтборСтрок)
    Для Каждого Отбор Из ОтборСтрок Цикл
        Если Не Отбор.Использование Тогда
            Продолжить;
        КонецЕсли;
        Если (Отбор.ВидСравнения = ВидСравнения.Больше И СтрокаТЧ[Отбор.Имя] <= Отбор.Значение )
            Или     (Отбор.ВидСравнения = ВидСравнения.БольшеИлиРавно И СтрокаТЧ[Отбор.Имя] < Отбор.Значение)
            Или     (Отбор.ВидСравнения = ВидСравнения.Меньше И СтрокаТЧ[Отбор.Имя] >= Отбор.Значение)
            Или     (Отбор.ВидСравнения = ВидСравнения.МеньшеИлиРавно И СтрокаТЧ[Отбор.Имя] > Отбор.Значение)
            Или     (Отбор.ВидСравнения = ВидСравнения.НеРавно И СтрокаТЧ[Отбор.Имя] = Отбор.Значение)
            Или     (Отбор.ВидСравнения = ВидСравнения.Равно И СтрокаТЧ[Отбор.Имя] <> Отбор.Значение) Тогда
            Возврат Ложь;
        КонецЕсли;    
    КонецЦикла;
    Возврат Истина;    
КонецФункции


функцию еще нужно дополнять.
Ardi
ПостроительЗапроса = Новый ПостроительЗапроса; 
    ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличноеПолеЗаказПокупателя);
    ПостроительЗапроса.Выполнить();
    ТЗ = ПостроительЗапроса.Результат.Выгрузить();
alex040269
Я, наверное, что-то недопонял, но у меня получилось вот так:
    ПостроительЗапроса = Новый ПостроительЗапроса;
    ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Неявки);
    
    Для Каждого Элемент Из ЭлементыФормы.Неявки.ОтборСтрок Цикл
        Если Элемент.Использование Тогда
            НовыйЭлемент = ПостроительЗапроса.Отбор.Добавить(Элемент.ПутьКДанным);
            НовыйЭлемент.ВидСравнения = Элемент.ВидСравнения;
            ЗаполнитьЗначенияСвойств(НовыйЭлемент,Элемент);
        КонецЕсли;
    КонецЦикла;
    
    ПостроительЗапроса.Выполнить();
    ТЗ = ПостроительЗапроса.Результат.Выгрузить();
    
    Для Каждого СтрокаТЧ Из ТЗ Цикл
        Если СтрокаТЧ.ДублирующаясяСтрока Тогда Продолжить; КонецЕсли;
        Неявки[СтрокаТЧ.НомерСтроки-1].Отметка = Истина
    КонецЦикла;
Ardi
alex040269,
Может быть. Я уже точно не помню как выглядит именно тот код и где его подглядеть.
Batchir
В типовых конфах (по крайней мере в УПП) есть такая функция
ОбщиегоНазначения.ОтобратьСтрокиПоКритериям
Вроде она как раз делает то что нужно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.