Множественный отбор в журналах средствами 1С. #322072


#0 by Stan from Piter
Прошу у всех прощения, но может кому и пригодиться - отбор по 4 элементам. 1. Создать общие реквиты справочника (ID01) до 16. 2. Глобальник: Функция глФормированиеСтрокиОтбора(ВидДокумента,СП,А,Б,В,Г) Экспорт    ВозвСтрока=""+ВидДокумента;    СписокЗн = СоздатьОбъект("СписокЗначений");    Если А=1 Тогда        Если ПустоеЗначение(СП.ПолучитьЗначение)=0 Тогда            ВозвСтрока=ВозвСтрока+СП.ПолучитьЗначение.Код        КонецЕсли;    КонецЕсли;    Если Б=1 Тогда        Если ПустоеЗначение(СП.ПолучитьЗначение)=0 Тогда            ВозвСтрока=ВозвСтрока+СП.ПолучитьЗначение.Код        КонецЕсли;    КонецЕсли;    Если В=1 Тогда        Если ПустоеЗначение(СП.ПолучитьЗначение)=0 Тогда            ВозвСтрока=ВозвСтрока+СП.ПолучитьЗначение.Код        КонецЕсли;    КонецЕсли;    Если Г=1 Тогда        Если ПустоеЗначение(СП.ПолучитьЗначение)=0 Тогда            ВозвСтрока=ВозвСтрока+СП.ПолучитьЗначение.Код        КонецЕсли;    КонецЕсли;    Возврат ВозвСтрока; КонецФункции    // глФормированиеСтрокиОтбора(СП,А,Б,В,Г) 3. Документ (ПриЗаписи)    СП=СоздатьОбъект("СписокЗначений");    СП.ДобавитьЗначение(Статус);    СП.ДобавитьЗначение(Контрагент);    СП.ДобавитьЗначение(Исполнитель);    СП.ДобавитьЗначение("");    ТекID=0;    Для А=0 По 1 Цикл        Для Б=0 По 1 Цикл            Для В=0 По 1 Цикл                Для Г=0 По 1 Цикл                    ТекID=ТекID+1;                            УстановитьАтрибут("ID"+Формат(ТекID,"Ч2"),глФормированиеСтрокиОтбора(ТекущийДокумент.Вид,СП,А,Б,В,Г));                КонецЦикла;            КонецЦикла;        КонецЦикла;    КонецЦикла; 4. В журнале.    ВидыОтбора("");              СП=СоздатьОбъект("СписокЗначений");    Если ПустоеЗначение(ВыбСтатус)=1 Тогда        СП.ДобавитьЗначение("");    Иначе        СП.ДобавитьЗначение(ВыбСтатус);    КонецЕсли;    Если ПустоеЗначение(ВыбЗаказчик)=1 Тогда        СП.ДобавитьЗначение("");    Иначе        СП.ДобавитьЗначение(ВыбЗаказчик);    КонецЕсли;    Если ПустоеЗначение(ВыбИсполнитель)=1 Тогда        СП.ДобавитьЗначение("");    Иначе        СП.ДобавитьЗначение(ВыбИсполнитель);    КонецЕсли;    СП.ДобавитьЗначение("");    ТекID=0;    А=0;    Б=0;    В=0;    Г=0;    Если ПустоеЗначение(СП.ПолучитьЗначение)=0 Тогда        А=1;        ТекID=ТекID+8;    КонецЕсли;    Если ПустоеЗначение(СП.ПолучитьЗначение)=0 Тогда        Б=1;        ТекID=ТекID+4;    КонецЕсли;    Если ПустоеЗначение(СП.ПолучитьЗначение)=0 Тогда        В=1;        ТекID=ТекID+2;    КонецЕсли;    Если ПустоеЗначение(СП.ПолучитьЗначение)=0 Тогда          Г=1;        ТекID=ТекID+1;    КонецЕсли;    Если ТекID=0 Тогда        УстановитьОтбор("Запрос","");    Иначе        УстановитьОтбор("ID_"+Формат(ТекID+1,"Ч2"),глФормированиеСтрокиОтбора("Запрос",СП,А,Б,В,Г));    КонецЕсли; Ну,  в общем и все. Кому интересно - пользуемся на здоровье.
#1 by Ёпрст2
"общие реквиты справочника " :)) Пятнично ... ЗЫ: Формировать строку из кодов элементов справочника - моветон ... Да и нафига изобретать лисапед? ...
#2 by Ёпрст2
Для А=0 По 1 Цикл       Для Б=0 По 1 Цикл           Для В=0 По 1 Цикл               Для Г=0 По 1 Цикл                   ТекID=ТекID+1;                           УстановитьАтрибут("ID"+Формат(ТекID,"Ч2"),глФормированиеСтрокиОтбора(ТекущийДокумент.Вид,СП,А,Б,В,Г));               КонецЦикла;           КонецЦикла;       КонецЦикла;   КонецЦикла; Это вообще шедевр ..надо запомнить ....:)
#3 by Stan from Piter
Булеву алгебру не вспомнить? Может подскажет уважаемый Ёпрст, функцию перебора элементов от 0000 до 1111??? Тогда пойду и напьюсь с горя, каким я стал тупым .... :-) Без наезда .... То-же самое, но вид с боку и только для 2 элементов ...
#4 by Chieftain
Чем тебе это не нравится? Для ном=0 по 1111 Цикл  ИмяАтрибута=Формат(ном,"Ч4") КонецЦикла;
#5 by Ёпрст2
Я б понял, если это писал начинающий кодер, но 3 года ..ппц... А за привязку к кодам справочника ...поубивал бы ...
#6 by Chieftain
Так там не три - почти четыре года)))
#7 by Stan from Piter
,, .... Вот именно .... 4 года.... А вот ВЫ та и не научились считать элементы ..... 0000 - 0, 0001 - 1, 1111 - 15. Это БУЛЕВА алгебра .... прошу не путать с простой. А цикл по 1111 элементам мне не нужен .... Читай внимательно ...
#8 by Stan from Piter
,, И нужно это для создания условия отбора по ЛЮБОМУ варианту отбора из 4 элементов ...
#9 by Ёпрст2
Утомил ...лучше уж тогда на справочниках слепить ...
#10 by Ёпрст2
А лепить 16 общих реквизитов ...это батенька п... Если уж так озаботился, то лучше уж своя форма журнала + ВК использовать ..
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям