Имя: Пароль:
1C
1С v8
Обычные формы. Отборы построителя на форме для множества раздельных запросов
,
0 ProProg
 
20.02.12
21:21
Вот голову ломаю как красиво реализтовать?
В модуле есть с десяток разных запросов которые между собой не связаны! а ваыполняются в зависимости от разных обстоятельств.
Но между ними связано лишь одно - у всех есть общее поле с номенклатурой.

Как сделать так чтобы ы юзера на форме были отборы, он мог по номенклатуре и реквизитам номенклатуры отбирать все что угодно.

Но все эти условия можно были прикреплять ко всем запросам.
1 ProProg
 
20.02.12
21:22
Повторю для особо непонятливыхъ - все запросы в коде отдельно! так нужно!
2 catena
 
20.02.12
21:26
Подсовывать построителю нужный текст?
3 Reaper_1c
 
20.02.12
21:29
Ну а проблема в чем? Под каждый запрос делаешь построитель запроса. Во всех построителях задаешь одинаковые псевдонимы полей для отбора. Отбор, наиболее часто используемого построителя, суешь на форму. Для остальных перед получением зпроса отбор очищаешь и заполняешь по отбору основного построителя. При этом общедоступным должен быть только основной построитель. Остальные можно даже пересоздавать по месту вызова...
4 acsent
 
20.02.12
21:31
все запросы сделать через построитель запросов. отбор копировать
5 ProProg
 
20.02.12
21:44
(3) мда уж. много кода..
А вот только что еще у меня пришла идея что не все так просто.
ПОясню. Сейчас еще круче стала задача (сам придумал) что в этом глобальном отборе будет еще не только отбор по номенклатуре, а например с учетом остатков.
Т.е. сейчас пишу отбор по которому юзер сможет отбирать еще номенклатуру которая есть на остатках.

И уже по отборам этого запроса будут фильтроваться остальные.

Поясню. Загрузка из экселя. Пользователи хотят чтобы программа загружала не весь прайс лист который может быть на сотни тысяч строк товаров, а например только определенные папки (например они из всего прайса продают только часть товара).
Плюс еще вот я подумал что полезно будет еще ставить фильтр по загрузке отбирать только ту которая например есть на остатках. или наоборот нет на остатках.
Или вообще например загружать только продаваемую номенклатуру.

Мысль понятна?
Короче в связи со всем этим сейчас решил все таки отдельный запрос сделать для глобального фильтра.
Все остальные запросы - поисковые. В случае задания глобального фильтра, синхронизация и загрузка будет происходить только по полученной номенклатуре глоабльного фильтра.

ноухау.
6 ProProg
 
20.02.12
21:45
Все жто для максимальной оптимизации загрузки прайса поставщика и работы только с нужным товаром.
7 ProProg
 
20.02.12
21:46
вижу решение только в выполнении первого запроса. выгрузки товаров в ТЗ и наложении на это ТЗ уже во всех остальных поисковых запросах фильтра.
8 Reaper_1c
 
20.02.12
22:04
(7) Изобретатель, копирование отбора это 5 строчек. А твое изобретение будет почем зря жрать оперативку в обычном приложении или перегрузит диски рабочего каталога сервера приложений в управляемом. В то же время (3) не будет жрать ресурсов, а в клиент-сервере еще и за статистику СУБД зацепится. Маня, маня...
9 ProProg
 
20.02.12
22:05
(8) в других запросах не будет отборов по остаткам и другим фигням.
10 ProProg
 
20.02.12
22:08
Вот в чем фишка.
Нужно заранее до выполнения поисковых запросов ограничить вообще поиск всей номенклатуры по запросу в котором будет отбиратся номенклатура с учетом остатков и прочей фигни которая придумается потом.

Например считать с прайса только ту номенклатуру которая продавалась и т.п.
То есть задача до поиска получить заведомо нужный список номенклатуры, и далее искать уже по нему.

При загрузке прайса в сто тысяч строк (представь себе сколько времени займет синхронизация) если нам нужно будет всего получить загрузку 500 позиций, то проще получив их и выгрузив в отдельную. ТЗ
далее всем остальным запросам сказать не искать по справочнику а искать только в 500 позициях.
Понял??
11 ProProg
 
20.02.12
22:09
Таким образом не услоджняя все остальные запросы (не лепя к ним остатки и прочую фигню которую потом пожелают прилепить для фильтра) оптимальным считаю проверку установки отборов, выгрузку в ТХЗ, наложение во всех поисковых запросах ограничение на поиск номенклатуры. супер.
12 Stim
 
20.02.12
22:11
базван еще не пришел? позовите. как подойдет, не хочу пропустить. пока попкорн начну запекать
13 ProProg
 
20.02.12
22:13
Сделал! Ура. По прайсу в сто тысяч строк если надо получить из экселевского прайса всего инфо по одной группе ! все за секунды отработало!
14 Neg
 
20.02.12
22:17
Выкладывай, будим тестить.:)
15 acsent
 
20.02.12
22:28
(7) лучше не тз а временную
16 acsent
 
20.02.12
22:28
а так идея норм
17 ProProg
 
20.02.12
22:31
Вот шо получилось. с проверкой фильтра. чтобы иной раз не делать запрос всего справочника.

НастроитьПостроительОтчета();
   УстановленХотьОдинОтбор = Ложь;
   Для Инд = 0 По ПостроительОтчетаНоменклатура.Отбор.Количество()-1 Цикл        
       ПолеОтбора = ПостроительОтчетаНоменклатура.Отбор[Инд];
       
       Если ПолеОтбора.Использование Тогда
           УстановленХотьОдинОтбор = Истина;
           Прервать;
       КонецЕсли;
   КонецЦикла;
   ТоварыГлобальныйФильтр = Новый ТаблицаЗначений();
   ТоварыГлобальныйОтбор = Новый СписокЗначений();
   Если УстановленХотьОдинОтбор Тогда
       ПостроительОтчетаНоменклатура.Выполнить();    
       РезультатЗапроса = ПостроительОтчетаНоменклатура.Результат;
       
       ТоварыГлобальныйФильтр = РезультатЗапроса.Выгрузить();
       ТоварыГлобальныйОтбор = ТоварыГлобальныйФильтр.ВыгрузитьКолонку("Номенклатура");
   КонецЕсли;



и далеее

Если УстановленХотьОдинОтбор Тогда
                   Запрос.Текст = Запрос.Текст + " И НоменклатураКонтрагентов.Номенклатура В (&ТоварыГлобальныйОтбор)";
                   Запрос.УстановитьПараметр("ТоварыГлобальныйОтбор", ТоварыГлобальныйОтбор);            
               КонецЕсли;
18 ProProg
 
20.02.12
22:34
Завтра разойдется как обновление 250 клиентам. Посмотрим чо народ скажет.
19 Reaper_1c
 
20.02.12
22:38
(15) Никогда не видел как рабочий процесс разрывает не закрытый менеджер временных таблиц? А зрелище феерическое...
20 acsent
 
20.02.12
22:50
(19) так нужно закрывать
21 Chernik
 
20.02.12
23:03
(19) Временные таблицы зло? ;)
22 Reaper_1c
 
20.02.12
23:07
(21) Мышьяк отлично избавляет от зубной боли. Главное применять по инструкции.

(20) Так у автора эта ТЗ будет жить пока с его поделкой работают...
23 ОбычныйЧеловек
 
21.02.12
00:04
(17) Семерочника за километр видно...цикл "ДляКаждого" видимо принципиально не используем да?
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.