Фильтр по справ...

1. vlad_klg 08.11.07 10:10 Сейчас в теме
Процедура ЗаполнитьСписки() выводит весь список справочников в конфигурации для дальнейшей их обработки,
как сделать чтобы в данный список не попадали определенные справочники (н-р "Сторонные юридические лица") ?
Процедура ЗаполнитьСписки()
Для ш=1 по Метаданные.Справочник() Цикл
МД=Метаданные.Справочник(ш);
Влад=МД.Владелец;
Если Строка(Влад)="Метаданные" Тогда
спВидовСправочников.ДобавитьЗначение(МД.Идентификатор,МД.Представление());
КонецЕсли;
КонецЦикла;
КонецПроцедуры
заранее сенкс...
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. vlad_klg 08.11.07 12:15 Сейчас в теме
Перем ТипСправочника;
Перем ТекСпр,ТекИдСпр;
Перем ГруппаПереноса,ФлагПереноса;
Перем l,Компонента;


Функция глЕстьРеквизитШапки1(ИмяРеквизита, ВидДокумента) Экспорт

Если ПустоеЗначение(ИмяРеквизита) = 1 Тогда
Возврат 0;

ИначеЕсли Метаданные.ОбщийРеквизитДокумента(ИмяРеквизита).Выбран() = 1 Тогда
Возврат 1;

ИначеЕсли ПустоеЗначение(ВидДокумента) = 1 Тогда
Возврат 0;

ИначеЕсли Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита).Выбран() = 1 Тогда
Возврат 1;

Иначе
Возврат 0;
КонецЕсли;

КонецФункции //глЕстьРеквизитШапки()

Функция глЕстьРеквизитМнЧ1(ИмяРеквизита,ВидДокумента) Экспорт
Перем Реквизит;
Если (ПустоеЗначение(ВидДокумента) = 1) ИЛИ
(ПустоеЗначение(ИмяРеквизита) = 1) Тогда
Возврат 0;
КонецЕсли;
Реквизит=Метаданные.Документ(ВидДокумента).РеквизитТабличнойЧасти(ИмяРеквизита);
Возврат Реквизит.Выбран();
КонецФункции //глЕстьРеквизитМнЧ()





//__________________________________________________________­___________________
Процедура ЗаполнитьСписки()
Для ш=1 по Метаданные.Справочник() Цикл
МД=Метаданные.Справочник(ш);
Влад=МД.Владелец;
Если Строка(Влад)="Метаданные" Тогда
спВидовСправочников.ДобавитьЗначение(МД.Идентификатор,МД.Представление());
Если МД.Представление()="Сторонные юридические лица" Тогда
Продолжить
КонецЕсли;
КонецЕсли;

КонецЦикла;
спДействий.ДобавитьЗначение("Печать");
спДействий.ДобавитьЗначение("Пометить на удаление");
//спДействий.ДобавитьЗначение("Удалить");
//спДействий.ДобавитьЗначение("Перенести в группу");
КонецПроцедуры
//__________________________________________________________­___________________
Функция МножественныйФильтрЗадан()
Если спМФ.РазмерСписка()>0 Тогда
Возврат 1;
КонецЕсли;
Возврат 0;
КонецФункции // МножественныйФильтрЗадан
//__________________________________________________________­___________________
Функция СписокРезультатов()
Если спНеиспЭлементов.РазмерСписка()>0 Тогда
Возврат 1;
КонецЕсли;
Возврат 0;
КонецФункции // МножественныйФильтрЗадан
//__________________________________________________________­___________________
Функция ПерерисовкаНазванийЗакладок()
Форма.Закладки.УстановитьЗначение(2,?(МножественныйФильтрЗадан()=1,"(!) ","")+"Множественный фильтр");
Форма.Закладки.УстановитьЗначение(3,?(СписокРезультатов()=1,"(!) ","")+"Результаты");
КонецФункции // ПерерисовкаНазванийЗакладок
//__________________________________________________________­___________________
Процедура РаботаСоСписком(Режим,Пар)
Перем ТекПоз;
Перем ТекЭлемент;
Перем Фрм;

ТипСправочника=спВидовСправочников.ПолучитьЗначение(спВидовСправочников.ТекущаяСтрока());
Список=спМФ;
ТекПоз = Список.ТекущаяСтрока();
Если ТекПоз>0 Тогда
ТекЭлемент=Список.ПолучитьЗначение(ТекПоз);
КонецЕсли;
Если Режим="Добавить" Тогда
СписокПодбора = Список;
СправочникПодбора = ВРег(ТипСправочника);
ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,Пар,ТекЭлемент);
Фрм.ВыборГруппы(1);
ИначеЕсли Режим="Удалить" Тогда
Если Пар=0 Тогда
Список.УдалитьЗначение(ТекПоз);
Иначе
Список.УдалитьВсе();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//__________________________________________________________­___________________
Процедура Состояние_(Сост,интервал=0)
Если Компонента=1 Тогда
l.ShowMsgPanel(Сост,интервал);
Иначе
Состояние(Сост);
КонецЕсли;
КонецПроцедуры
//__________________________________________________________­___________________
Процедура ОбработкаВыбораВидаСправочника()
Если спМФ.РазмерСписка()>0 Тогда
ТекТипСправочника=спВидовСправочников.ПолучитьЗначение(спВидовСправочников.ТекущаяСтрока());
Если ТипСправочника<>ТекТипСправочника Тогда
спМФ.УдалитьВсе();
ПерерисовкаНазванийЗакладок();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//__________________________________________________________­___________________
Процедура ЗаполнитьСписокВидовПодчиненныхСправочников(Вид,спВидовПодчиненныхСправочников)
спВидовПодчиненныхСправочников=СоздатьОбъект("СписокЗначений");
Для ш=1 По Метаданные.Справочник() Цикл
МД=Метаданные.Справочник(ш);
Влад=МД.Владелец;
Если не(Строка(Влад)="Метаданные") Тогда
Если Влад.Идентификатор=Вид Тогда
спВидовПодчиненныхСправочников.ДобавитьЗначение(МД.Идентификатор);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ДобавитьВтзТМП(ТЗтмп,атр,Д)
стр=0;
ТЗтмп.НайтиЗначение(атр,стр,"Объект");
Если стр=0 Тогда
тзТМП.новаяСтрока();
тзТМП.Объект=атр;
тзтмп.ссылка=Д.текущийДокумент();
КонецЕсли;
КонецПроцедуры // ДобавитьВтзТМП()

//__________________________________________________________­___________________
Процедура Сформировать(режим="")
Перем Представление,спВидовПодчиненныхСправочников;
Вид=спВидовСправочников.ПолучитьЗначение(спВидовСправочников.ТекущаяСтрока(),Представление);
ЗаполнитьСписокВидовПодчиненныхСправочников(Вид,спВидовПодчиненныхСправочников);
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|"+Вид+"=Справочник."+Вид+".ТекущийЭлемент;
|Группировка "+Вид+" без групп;";
Если спМФ.РазмерСписка()>0 Тогда
ТекстЗапроса= ТекстЗапроса+"
|Условие ("+Вид+" в спМФ);";
КонецЕсли;
Состояние_("Выполнение запроса...");
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Предупреждение("Запрос не выполнен!",1);
Состояние_("Завершение обработки...",1);
Возврат;
КонецЕсли;
тзТМП=СоздатьОбъект("ТаблицаЗначений");
спВсехЭлементов=СоздатьОбъект("СписокЗначений");
спИспЭлементов=СоздатьОбъект("СписокЗначений");
Запрос.Выгрузить(тзТМП,0,0);
тзТМП.Выгрузить(спВсехЭлементов,,,1);
тзТМП=СоздатьОбъект("ТаблицаЗначений");
Состояние_("Поиск ссылок...");
Если режим="" Тогда
Если НайтиСсылки(спВсехЭлементов,тзТМП)=0 Тогда
Предупреждение("Поиск не выполнен!",1);
Состояние_("Завершение обработки...",1);
Возврат;
КонецЕсли;
Иначе
тзТМП.НоваяКолонка("Объект");
тзТМП.НоваяКолонка("Ссылка");
тзТМП.НоваяКолонка("Описание");
Д=СоздатьОбъект("Документ");
// Д.ВыбратьДокументы('01.01.1998','06.01.1998');
Д.ВыбратьДокументы(,);
у=0;
Пока Д.ПолучитьДокумент()=1 Цикл
у=у+1;
Состояние("Документов: "+у+" "+Д.ДатаДок);
ДВИД=Д.Вид();
ИмяРеквизита="";
М=Метаданные.Документ(ДВИД);
х=0;
Для х=1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Если Метаданные.ОбщийРеквизитДокумента(х).Тип="Справочник" Тогда
Если Метаданные.ОбщийРеквизитДокумента(х).Вид=Вид Тогда
Атр=Д.ПолучитьАтрибут(Метаданные.ОбщийРеквизитДокумента(х).Идентификатор);
ДобавитьВтзТМП(тзТМП,Атр,Д);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для х=1 По М.РеквизитШапки() Цикл
Если М.РеквизитШапки(х).Тип="Справочник" Тогда
Если М.РеквизитШапки(х).Вид=Вид Тогда
Атр=Д.ПолучитьАтрибут(М.РеквизитШапки(х).Идентификатор);
ДобавитьВтзТМП(тзТМП,Атр,Д);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Д.ВыбратьСтроки();
Пока Д.ПолучитьСтроку()=1 Цикл
Для х=1 По М.РеквизитТабличнойЧасти() Цикл
Если М.РеквизитТабличнойЧасти(х).Тип="Справочник" Тогда
Если М.РеквизитТабличнойЧасти(х).Вид=Вид Тогда
Атр=Д.ПолучитьАтрибут(М.РеквизитТабличнойЧасти(х).Идентификатор);
ДобавитьВтзТМП(тзТМП,Атр,Д);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Сост="Обработка таблицы ссылок...";
Состояние_(Сост);
тзТМП.Свернуть("1,2","");
тзТМП.ВыбратьСтроки();
Сч=0;
Колонка2=тзТМП.ПолучитьПараметрыКолонки(2);
Пока тзТМП.ПолучитьСтроку()=1 Цикл
Сч=Сч+1;
Если Колонка2="Reference" Тогда
ТекСсылка=тзТМП.Reference;
Иначе
ТекСсылка=тзТМП.Ссылка;
КонецЕсли;
Состояние_(Сост+Строка(Сч));
Если ТипЗначения(ТекСсылка)=11 Тогда
ТекВид=ТекСсылка.Вид();
Если спВидовПодчиненныхСправочников.НайтиЗначение(ТекВид)=1 Тогда
тзТМП.УдалитьСтроку();
КонецЕсли;
КонецЕсли;
КонецЦикла;
тзТМП.Свернуть("1","");
тзТМП.Выгрузить(спИспЭлементов,,,1);
спНеиспЭлементов.УдалитьВсе();
ТекСпр=Представление;
ТекИдСпр=Вид;
Сост="Заполнение списка элементов ...";
Состояние_("Заполнение списка элементов ...");
Для ш=1 По спВсехЭлементов.РазмерСписка() Цикл
ТекЭл=спВсехЭлементов.ПолучитьЗначение(ш);
Если спИспЭлементов.НайтиЗначение(ТекЭл)=0 Тогда
спНеиспЭлементов.ДобавитьЗначение(ТекЭл);
Состояние_(Сост+Строка(ш));
КонецЕсли;
КонецЦикла;
ПерерисовкаНазванийЗакладок();
Состояние_("Высвобождение памяти...");
Состояние_("Завершение обработки...",1);
КонецПроцедуры
//__________________________________________________________­___________________
Процедура Пометка(Пар)
Для ш=1 По спНеиспЭлементов.РазмерСписка() Цикл
спНеиспЭлементов.Пометка(ш,Пар);
КонецЦикла;
КонецПроцедуры
//__________________________________________________________­___________________
Процедура Печать()
Т=СоздатьОбъект("Таблица");
Т.ВывестиСекцию("Шапка");
КолЭл=спНеиспЭлементов.РазмерСписка();
Для ш=1 По КолЭл Цикл
ТекЭл=спНеиспЭлементов.ПолучитьЗначение(ш);
Т.ВывестиСекцию("Строка");
КонецЦикла;
Т.ВывестиСекцию("Итого");
Т.ТолькоПросмотр(1);
Т.Опции(0,0);
Т.Показать("Печать неиспользуемых элементов справочника "+ТекСпр);
КонецПроцедуры
//__________________________________________________________­___________________
Процедура Удалить(Пар)
Попытка
Спр=СоздатьОбъект("Справочник."+ТекИдСпр);
Исключение
Возврат;
КонецПопытки;
Если спНеиспЭлементов.РазмерСписка()>0 Тогда
Отв=Вопрос("Вы действительно хотите "+?(Пар=0,"пометить на удаление","удалить")+
" помеченные галочками элементы?","Да+Нет");
Если Отв="Да" Тогда
НачатьТранзакцию();
Сч=0;
РазмерСписка=спНеиспЭлементов.РазмерСписка();
Для ш=1 По РазмерСписка Цикл
Инд=РазмерСписка-ш+1;
Если спНеиспЭлементов.Пометка(Инд)=0 Тогда
Продолжить;
КонецЕсли;
ТекЭл=спНеиспЭлементов.ПолучитьЗначение(Инд);
Если Спр.НайтиЭлемент(ТекЭл)=1 Тогда
Сч=Сч+1;
Спр.Удалить(Пар);
Состояние_("Удаление - "+Строка(ш));
Если Сч%50=49 Тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
КонецЕсли;
Если Пар=1 Тогда
спНеиспЭлементов.УдалитьЗначение(Инд);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Предупреждение("Обработано позиций: "+Строка(Сч));
КонецЕсли;
КонецЕсли;
ПерерисовкаНазванийЗакладок();
Состояние_("Завершение обработки...",1);
КонецПроцедуры
//__________________________________________________________­___________________
Процедура Перенести()
Попытка
Спр=СоздатьОбъект("Справочник."+ТекИдСпр);
Если ТипЗначения(ГруппаПереноса)=11 Тогда
Если спНеиспЭлементов.РазмерСписка()>0 Тогда
Отв=Вопрос("Вы действительно хотите перенести "+
?(ГруппаПереноса.Выбран()=1," в группу "+Строка(ГруппаПереноса)," в корневую часть")+
" помеченные галочками элементы?","Да+Нет");
Если Отв="Да" Тогда
НачатьТранзакцию();
Сч=0;
Для ш=1 По спНеиспЭлементов.РазмерСписка() Цикл
Если спНеиспЭлементов.Пометка(ш)=0 Тогда
Продолжить;
КонецЕсли;
ТекЭл=спНеиспЭлементов.ПолучитьЗначение(ш);
Если Спр.НайтиЭлемент(ТекЭл)=1 Тогда
Сч=Сч+1;
Спр.Родитель=ГруппаПереноса;
Спр.Записать();
Состояние_("Перенос - "+Строка(ш));
Если Сч%50=49 Тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Предупреждение("Обработано позиций: "+Строка(Сч));
КонецЕсли;
КонецЕсли;
ПерерисовкаНазванийЗакладок();
КонецЕсли;
Исключение
Возврат;
КонецПопытки;
Состояние_("Завершение обработки...",1);
КонецПроцедуры
//__________________________________________________________­___________________
Процедура ПеренестиВГруппу()
Перем Фрм,ТекЭлемент;
ФлагПереноса=1;
ГруппаПереноса="";
Попытка
Если Метаданные.Справочник(ТекИдСпр).КоличествоУровней>1 Тогда
ОткрытьПодбор("Справочник."+ТекИдСпр,,Фрм,0,ТекЭлемент);
Фрм.ВыборГруппы(1);
Иначе
Предупреждение("В справочнике всего один уровень...",1);
КонецЕсли;
Исключение
Возврат;
КонецПопытки;
КонецПроцедуры
//__________________________________________________________­___________________
Процедура ВыполнитьДействие()
Действие=спДействий.ПолучитьЗначение(спДействий.ТекущаяСтрока());
Если Действие="Печать" Тогда
Печать();
ИначеЕсли Действие="Пометить на удаление" Тогда
Удалить(0);
//ИначеЕсли Действие="Удалить" Тогда
// Удалить(1);
//ИначеЕсли Действие="Перенести в группу" Тогда
// ПеренестиВГруппу();
КонецЕсли;
КонецПроцедуры
//__________________________________________________________­___________________
Процедура ПриВыбореЗакладки(Номер,Значение)
Если Номер=1 Тогда
Форма.ИспользоватьСлой("Main",2);
ИначеЕсли Номер=2 Тогда
Форма.ИспользоватьСлой("MultipleFilter",2);
ИначеЕсли Номер=3 Тогда
Форма.ИспользоватьСлой("Results",2);
КонецЕсли;
ПерерисовкаНазванийЗакладок();
КонецПроцедуры
//__________________________________________________________­___________________
Процедура ОбработкаПодбора(Значение)
Если ФлагПереноса=1 Тогда
Если Значение.ЭтоГруппа()=1 Тогда
ГруппаПереноса=Значение;
Иначе
ГруппаПереноса=Значение.Родитель;
КонецЕсли;
Перенести();
Иначе
СписокПодбора=спМФ;
Если (СписокПодбора.НайтиЗначение(Значение)=0) Тогда
СписокПодбора.ДобавитьЗначение(Значение);
СписокПодбора.ТекущаяСтрока(СписокПодбора.РазмерСписка());
КонецЕсли;
КонецЕсли;
ФлагПереноса=0;
КонецПроцедуры // ОбработкаПодбора
//__________________________________________________________­___________________
Процедура ПриЗакрытии()
Состояние_("",1);
КонецПроцедуры // ОбработкаПодбора
//__________________________________________________________­___________________
Процедура ПриОткрытии()
ЗаполнитьСписки();

//Попытка
// l=СоздатьОбъект("Addon1C.Commands");
// Компонента=1;
//Состояние_("Компонента Addon1C загружена",20);
//Исключение
// Компонента=0;
//Сообщить("Компонента Addon1C не загружена","i");
//КонецПопытки;
КонецПроцедуры
//__________________________________________________________­___________________
Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение(1,"Основная");
Форма.ИспользоватьСлой("Main",2);
Форма.Закладки.ДобавитьЗначение(2,"Множественный фильтр");
Форма.Закладки.ДобавитьЗначение(3,"Результаты");
ТипСправочника="";
ТекСпр="?";
ФлагПереноса=0;
2. Just 3 08.11.07 11:20 Сейчас в теме
Что-то типа

Если МД.Идентификатор="СторЮрЛица" Тогда

или

Если МД.Представление()="Сторонные юридические лица" тогда
3. vlad_klg 08.11.07 11:37 Сейчас в теме
пробовал и так - не получается...
4. sashulyT 201 08.11.07 11:59 Сейчас в теме
vlad_klg Написал:
-------------------------------------------------------
> пробовал и так - не получается...


Скинь вес код
6. Just 3 08.11.07 12:22 Сейчас в теме
Я не знаю как у Вас, а в типовой не "Сторонные" а "Сторонние", а во вторых сначала надо проверять на условие, а уж потом добавлять в список, у тебя наоборот
7. vlad_klg 08.11.07 12:31 Сейчас в теме
спасибо just получилось - это моя невнимательность и неопытность
8. Just 3 08.11.07 12:41 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот