Каталог решений - Отбор по текущему значению в колонке общего журнала документов

Отбор по текущему значению в колонке общего журнала документов

Отбор по текущему значению в колонке общего журнала документов

В наличии

Есть оператор — девочка Таня, которой было лень нажимать несколько раз на кнопку мыши и получать отбор по необходимому ей значению реквизита в общем журнале документов в ТИС, благодаря ее лени данная полезняшка и родилась

Категория:

Описание

Все довольно просто: стоим в колонке общего журнала на значении реквизита документа, нажимаем кнопку «По колонке» и вуаля! отбор по значению получите, нажимаем на кнопку «Х» и отбор снимаем. Алгоритм универсальный, куски специфичные для ТИС убираете и все, в тексте они помечены. Создаете две кнопки, например как на моем рисунке, на одну вешаем функцию ОтборПоКолонке() на вторую СнятьОтбор(). Да, чуть не забыл, если у вас ТИС то колонке «Информация» присвойте одноименный идентификатор, колонке с видом документа (он в ТИС текст получаемый функцией «глНазваниеДокументаВЖурнале») присвойте идентификатор содержащий «ВидДок», но не равный ему (системное значение), например «ВидДокумента».

На картинке показано в комплексе с //sale.itcity.ru/public/15393/

// Это вставить в самом начале, например в первой строке
Перем СписокВидовОтбора;

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

    ИмяОтбора = «»;

    Если Найти(Форма.ТекущаяКолонка(),«ВидДок»)>Тогда
        УстановитьОтбор(ТекущийДокумент.Вид());
        ЗначениеОтбора = ТекущийДокумент.Вид();
        ИмяОтбора=«ВидДок»;
    ИначеЕсли Форма.ТекущаяКолонка()=«ДатаДок» Тогда
        УстановитьИнтервал(ТекущийДокумент.ДатаДок,ТекущийДокумент.ДатаДок);
        Возврат;

    ИначеЕсли Форма.ТекущаяКолонка()=«Информация» Тогда

        Попытка
            ЗначениеОтбора = глИнформацияПоДокументуВЖурнале(ТекущийДокумент);

        Исключение
        КонецПопытки;
    Иначе
        ЗначениеОтбора = ТекущийДокумент.ПолучитьАтрибут(Форма.ТекущаяКолонка());
    КонецЕсли;

    Если ТипЗначенияСтр(ЗначениеОтбора)=«Справочник» Тогда
        Позиция = СписокВидовОтбора.НайтиЗначение(ЗначениеОтбора.Вид());
        Если Позиция>0 Тогда
            СписокВидовОтбора.ПолучитьЗначение(Позиция,ИмяОтбора);
            УстановитьОтбор(ИмяОтбора,ЗначениеОтбора);
        КонецЕсли;
    ИначеЕсли ИмяОтбора<>«ВидДок» Тогда
        Возврат;
    КонецЕсли;

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

        Если ОтборПо = «по контрагенту» Тогда
            КонтрагентДляОтбора = ЗначениеОтбора;
        ИначеЕсли ОтборПо  = «по виду документов» Тогда
            ВидДокументаДляОтбора = СписокВидовДокументов.НайтиЗначение(ЗначениеОтбора);
            СписокВидовДокументов.ТекущаяСтрока(ВидДокументаДляОтбора);
        ИначеЕсли ОтборПо  = «по автору» Тогда
            АвторДляОтбора = ЗначениеОтбора;  // общий реквизит документов
        ИначеЕсли ОтборПо  = «по фирме» Тогда
            ФирмаДляОтбора = ЗначениеОтбора;  // общий реквизит документов
        ИначеЕсли ОтборПо  = «по юр. лицу» Тогда
            ЮрЛицоДляОтбора= ЗначениеОтбора; // общий реквизит документов
        ИначеЕсли ОтборПо = «по складу» Тогда
            СкладДляОтбора = ЗначениеОтбора;
        ИначеЕсли ОтборПо = «по проекту» Тогда
            ПроектДляОтбора = ЗначениеОтбора;// общий реквизит документов
        КонецЕсли; // ОтборПо

        ПриУстановкеБыстрогоОтбора();
    Исключение
    КонецПопытки;
КонецПроцедуры

//******************************************************************************
Процедура СнятьОтбор()
    Попытка
        // Это снова кусок специфичный для ТИС
        Если ВидОтбора.ТекущаяСтрока()=Тогда
            Возврат;
        КонецЕсли;

        ВидОтбора.ТекущаяСтрока(1);
        ПриУстановкеБыстрогоОтбора();
    Исключение
        УстановитьОтбор(«*»);
    КонецПопытки;
КонецПроцедуры

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

Для Счетчик=По Метаданные.ОбщийРеквизитДокумента() Цикл
    Если Метаданные.ОбщийРеквизитДокумента(Счетчик).Тип <> «Справочник» Тогда Продолжить КонецЕсли;
    СписокВидовОтбора.ДобавитьЗначение(Метаданные.ОбщийРеквизитДокумента(Счетчик).Вид,Метаданные.ОбщийРеквизитДокумента(Счетчик).Идентификатор);
КонецЦикла;

P.S. Обрабатываю отбор только по значениям типа «Справочник» полагая что отбор по значениям других типов обычно носит служебный характер и используется авторами для разных «тайных» целей самостоятельно.

has been added to your cart:
Оформление заказа