8.х Отбор по табличной части

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем mauar, 7 май 2011.

  1. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Есть табличная часть "ВидыОбъектов", в ней выводятся все документы из конфигурации, заполняется это так:

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

    надо в ней сделать отбор, делаю так:

    Код:
    ЭлементОтбора = ВидыОбъектов.Отбор.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
    ЭлементОтбора.Использование = Истина;
    
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    
    ЭлементОтбора.ПравоеЗначение = ЭлементыФормы.НачДата;
    

    Ругается на то что поле объекта "Отбор" не обнаружено!

    Делаю свою собсвтенную обработку типа отчета для вывода всех документов в конфигурации и вывода по каждому документу номер,
    дата и др. Вот надо сделать отбор по дате документов.
  2. Hr0n
    Offline

    Hr0n Опытный в 1С

    Регистрация:
    17 авг 2009
    Сообщения:
    353
    Симпатии:
    0
    Баллы:
    26
    Во первых, для ТЧ надо использовать не Отбор а ОтборСтрок. Во вторых, на каком основании вы применяете ВидСравненияКомпоновкиДанных? Он используется только в СКД, а у Вас, судя по коду, обычное программное заполнение ТЧ, т.е. нужно использовать ВидСравнения. В третьих, скорее всего ЭлементыФормы.НачДата это элемент формы поле ввода с типом "Дата", но никак не сама дата. Если так, надо использовать ЭлементыФормы.НачДата.Значение. Попробуйте так:
    Код:
    ЭлементыФормы.ВидыОбъектов.ОтборСтрок.Дата.ВидСравнения = ВидСравнения.БольшеИлиРавно;
    ЭлементыФормы.ВидыОбъектов.ОтборСтрок.Дата.Значение = ЭлементыФормы.НачДата.Значение;
    ЭлементыФормы.ВидыОбъектов.ОтборСтрок.Дата.Использование = ЗначениеЗаполнено(ЭлементыФормы.НачДата.Значение);
    
  3. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26

    Да я уже понял, а все равно пытаюсь сделать отбор строк в интервале, делаю так

    Код:
    ЭлементыФормы.ВидыОбъектов.ОтборСтрок.Дата.Использование=Истина;
    ЭлементыФормы.ВидыОбъектов.ОтборСтрок.Дата.ВидСравнения = ВидСравнения.Интервал;
    ЭлементыФормы.ВидыОбъектов.ОтборСтрок.Дата.ЗначениеС = ЭлементыФормы.НачДата.Значение;
    ЭлементыФормы.ВидыОбъектов.ОтборСтрок.Дата.ЗначениеПо = ЭлементыФормы.КонДата.Значение;
    
    Но тут все равно он неграмотно работает, если строки пустые то он таблицу очищает а должен выводить все данные, да и в интервале не совсем грамотно вроде работает, там если конечную дату выбрать он по ней тоже отбор не делает.
  4. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Привет, mauar. Как жизнь?

    В общем, я думаю, что в данной ситуации будет лучше использовать запрос.
    Работать быстрее будет. Да и проще, наверное, условие на дату наложить.

    Вот так, например, работает:
    Код:
    Если ВидыОбъектов.Количество() > 0 Тогда
    ТекстВопроса = "Перед заполнением таблица будет очищена. Продолжить?";
    Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
    
    Если Ответ = КодВозвратаДиалога.Нет Тогда
    Возврат;
    КонецЕсли;
    
    ВидыОбъектов.Очистить();
    КонецЕсли;
    
    
    Запрос = Новый Запрос;
    
    Для каждого Док Из Метаданные.Документы Цикл
    
    Если Док.Реквизиты.Найти("Ответственный") = Неопределено Тогда
    ТекстОтветственный = "";
    Иначе
    ТекстОтветственный = " Ответственный,";
    КонецЕсли; 
    
    
    Если Док.ДлинаНомера < 1 Тогда
    ТекстНомер = "";
    Иначе
    ТекстНомер = " Номер,";
    КонецЕсли;
    
    
    Если ЗначениеЗаполнено(КонДата) Тогда
    УсловиеДаты = "	Дата МЕЖДУ &НачДата И &КонДата";
    Иначе
    УсловиеДаты = "	Дата > &НачДата";
    КонецЕсли;
    
    Запрос.Текст = "
    |ВЫБРАТЬ
    |" + ТекстНомер + "
    |   Дата,
    |" + ТекстОтветственный + "
    |   ПометкаУдаления,
    |   Проведен
    |ИЗ
    |   Документ." + Док.Имя + "
    |ГДЕ
    |" + УсловиеДаты;
    
    Запрос.УстановитьПараметр("НачДата",НачДата);
    Запрос.УстановитьПараметр("КонДата", КонецДня(КонДата));
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
    НоваяСтрока = ВидыОбъектов.Добавить();
    НоваяСтрока.Синоним = Док;
    НоваяСтрока.Номер = ?(Док.ДлинаНомера < 1, "Нет", Выборка.Номер);
    НоваяСтрока.Дата = Выборка.Дата;
    НоваяСтрока.Ответственный = ?(Док.Реквизиты.Найти("Ответственный") = Неопределено, "Нет", Выборка.Ответственный);
    НоваяСтрока.ПометкаУдаления = Выборка.ПометкаУдаления;
    НоваяСтрока.Проведен = Выборка.Проведен;
    КонецЦикла; 
    
    КонецЦикла;
    
    
  5. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Привет привет :angry: , жизнь нормально, написал тебе в личку !
  6. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Это все, конечно, замечательно :D
    А по данной теме-то как??? Все нормально???

Поделиться этой страницей