Имя: Пароль:
1C
1С v8
как сделать фильтр в динамическом списке по характеристике (обычные формы)
,
0 vde69
 
модератор
16.06.14
15:31
есть документ и есть периодический РС СтатусыДокумента как сделать фильтр "Не закрытые"?

запрос и потом Ссылка в (списокИзЗапроса) не подходит, слишком много обьектов

РЛС - не подходит по причине пересечения ролей

реквизит делать нельзя, да и реквизит нельзя сделать периодическим

какие еще идеи?
1 Бешеная Нога
 
16.06.14
15:36
это в форме списка документа? и реквизит документу добавить нельзя?
2 vde69
 
модератор
16.06.14
15:39
реквизит добавить нельзя, он преодический
3 Бешеная Нога
 
16.06.14
15:42
(2) если все-таки "можно" добавить реквизит - то его можно записывать при записи РС, тогда в добавленном реквизите всегда будет актуальное значение, по которому можно отбирать в форме списка. тогда получается - а нафиг РС...
4 Бешеная Нога
 
16.06.14
15:42
а обычную форму заменить управляемой тоже никак?
5 Timon1405
 
16.06.14
15:44
Левое соединение> тащим текущий статус (максимум по периоду)> результат во вложенный запрос>выбираем все поля
6 Бешеная Нога
 
16.06.14
15:44
(5) ты бог!
7 vde69
 
модератор
16.06.14
15:51
(5) и где мне это написать?

у меня динамический список обычные формы...
8 Бешеная Нога
 
16.06.14
15:55
(7) может все таки просто Табличное поле с данными ДокументСписок?
9 Timon1405
 
16.06.14
16:02
(7) ПКМ - свойства - галка произвольный запрос. но есть подозрение, что у вас-таки не демонический список
10 vde69
 
модератор
16.06.14
16:11
(9) ОБЫЧНЫЕ ФОРМЫ!!!
(8) не пойдет, список на 100к элементов
11 Бешеная Нога
 
16.06.14
16:22
(7) тогда что я упускаю. динамический список только в управляемых формах же.
12 К_Дач
 
16.06.14
16:23
(10) Может РегистрСведенийСписок?
13 mikecool
 
16.06.14
16:24
в обычных, имхо, только "запрос и потом Ссылка в (списокИзЗапроса)" или доп. реквизит
14 К_Дач
 
16.06.14
16:35
Если все-таки РегистрСведенийСписок, то заполняй его с отбором по периоду, отбор по периоду делай недоступным, при смене даты на форме (неважно что там за форма) - перезаполняй список (меняй отбор). При этом отбор по измерению "Статус" будет у тебя доступен, хочешь вручную устанавливай, хочешь - также программно...
15 МоеИмя
 
16.06.14
16:44
Почему реквизит нельзя ?

Реквизит ТекСтатус и при смене статуса дока писать тудысь актуальный статус дока. В РС пускай история храниться.
16 К_Дач
 
16.06.14
16:47
Омойбог. Форма списка справочника "Валюты" в любой конфе на обычных формах. Открываем и читаем код
17 Бешеная Нога
 
16.06.14
16:49
(16) ты бог! отбор тоже сделаешь?
18 К_Дач
 
16.06.14
17:00
(17) обработка, на форму кидаем табличное поле с типов РегистрСведенийСписок.КурсыВалют В событие при выводе строки:

Процедура ТабличноеПоле1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    СтруктураКурса = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ДатаСреза, Новый Структура("Валюта", ДанныеСтроки.Валюта));
    ОформлениеСтроки.Ячейки.Курс.УстановитьТекст(Формат(СтруктураКурса.Курс, "ЧДЦ=4"));    
КонецПроцедуры

Хоть наотбирайся по валюте и курсу

(2) и эт... в 8-ке нет периодических реквизитов
19 Bober
 
16.06.14
17:34
(18) вот жесть то какая
20 mikecool
 
16.06.14
17:35
(15) херово только то, что реквизит в док в закрытом периоде писать не особо получится, придется извращаться
21 acsent
 
16.06.14
17:58
Переходи на упр формы. Будет гораздо проще (хотя бы в данном конкретном случае)
22 Бешеная Нога
 
16.06.14
18:00
(18) ну давай, наложи отбор на колонку Курс, всемогущий ты наш
23 К_Дач
 
16.06.14
20:30
(22) я тебе привел код из типовой конфы, CRM рарусовская. Правда там на форме все-таки СправочникСписок.Валюты, для регистра - это будет жесть, конечно же. Отбор там работает.
24 vde69
 
модератор
17.06.14
08:16
короче я отказался от фильтра, сделал просто оформление... из-за размера регистра вариант с временой индексируемой таблицей работает в 4-5 раз быстрее чем простое условие, скорость скролинка нормальная при постоянно нажатой клавише PageUp скролинг успевает за кнопкой (нету эффекта кнопку отпустил а программа еще листает).
Если кто подскажет еще более быстрый вариант буду благодарен...

//-------------------------------------------------------
Процедура ОформитьСписокДокументовПоСтатусу(ОформленияСтрок) Экспорт
    Если не ПИ.ИспользоватьОформлениеПоСтатусу() Тогда
        Возврат;
    КонецЕсли;
    
    //мДокументы = Новый СписокЗначений();
    //Для Каждого эл из ОформленияСтрок Цикл
    //    мДокументы.Добавить(эл.ДанныеСтроки.Ссылка);
    //КонецЦикла;

    //Запрос = Новый Запрос(
    //"ВЫБРАТЬ
    //|    СтатусыДокументов.Регистратор КАК Документ,
    //|    СтатусыДокументов.Статус
    //|ИЗ
    //|    РегистрСведений.СтатусыДокументов КАК СтатусыДокументов
    //|ГДЕ
    //|    СтатусыДокументов.Регистратор В(&Документы)");
    
    //----------------------------
    // с ВТ работает примерно в 4 раза быстрее
    
    мДокументы = Новый ТаблицаЗначений();
    мДокументы.Колонки.Добавить("Документ", Метаданные.РегистрыСведений.СтатусыДокументов.СтандартныеРеквизиты.Регистратор.Тип);
    Для Каждого эл из ОформленияСтрок Цикл
        НоваяСтрока = мДокументы.Добавить();
        НоваяСтрока.Документ = эл.ДанныеСтроки.Ссылка;
    КонецЦикла;

    Запрос = Новый Запрос(
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ТабДокументов.Документ КАК Документ
    |ПОМЕСТИТЬ Документы
    |ИЗ
    |    &Документы КАК ТабДокументов
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Документ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    СтатусыДокументов.Регистратор КАК Документ,
    |    СтатусыДокументов.Статус
    |ИЗ
    |    Документы КАК Документы
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыДокументов КАК СтатусыДокументов
    |        ПО Документы.Документ = СтатусыДокументов.Регистратор");
    
    Запрос.УстановитьПараметр("Документы", мДокументы);
    мТЗ = Запрос.Выполнить().Выгрузить();
    
    Для Каждого эл из ОформленияСтрок Цикл
        мСтр = мТЗ.Найти(эл.ДанныеСтроки.Ссылка, "Документ");
        Если мСтр = Неопределено Тогда
            Эл.Шрифт = ШрифтыСтиля.ШрифтСтатусаСоздан;
        ИначеЕсли мСтр.Статус = Перечисления.СтатусыЗаявокБюджетирования.Создан Тогда
            Эл.Шрифт = ШрифтыСтиля.ШрифтСтатусаСоздан;
        ИначеЕсли мСтр.Статус = Перечисления.СтатусыЗаявокБюджетирования.Исполнен Тогда
            Эл.Шрифт = ШрифтыСтиля.ШрифтСтатусаИсполнен;
        ИначеЕсли мСтр.Статус = Перечисления.СтатусыЗаявокБюджетирования.Отказан Тогда
            Эл.Шрифт = ШрифтыСтиля.ШрифтСтатусаОтказан;
        Иначе
            Эл.Шрифт = ШрифтыСтиля.ШрифтСтатусаБП;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры
25 Бешеная Нога
 
17.06.14
08:24
(23) ты реально ничего не понимаешь
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший