gifts2017

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

Опубликовал Евгений (Berrimor) в раздел Программирование - Практика программирования

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

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

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

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

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

    ИмяОтбора = "";

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей (Che) Коцюра (CheBurator) 21.02.10 16:14
еще лучше - закладки в форме журнала по сделанным ранее отборам и ведение их истории - оправдывается в полпинка. данная полезняшка - тоже хорошо!
2. Евгений (Berrimor) 21.02.10 17:11
(1) у меня в комплексе с той что ты советуешь работает ;) сменил картинку
3. Артур Аюханов (artbear) 22.02.10 09:55
Отбор по колонке звучит более непонятно, чем "Отбор по текущему значению в колонке" :)
4. Артур Аюханов (artbear) 22.02.10 09:56
5. Евгений (Berrimor) 23.02.10 09:47
(1)(4) история удобна не всегда, например данная реализация ускорения отбора по значению родилась для ситуации когда операторы бесконечно делают отбор по клиенту, и закладки в этой ситуации не только не помогают, а мешают - не информативно, а глаза мозолят, так что имеет право на существование комплекс: закладки отбора+моя полезняшка - закладки можно отключить, отбором по тек значению в колонке не пользоваться, ежели не надь
6. Артур Аюханов (artbear) 24.02.10 09:04
(5) Я про закладки не говорил, ИМХО это неудобно.
Я говорил только про возможность ведения истории.
7. Александр Зеленский (alevize) 04.10.11 13:19
Спасибо, довольно так и полезная идея, и реализация!
8. Кристина Кулакова (kulkrise) 25.06.16 13:02
Добрый день!

По поводу отбора если по контрагенту и др. понятно, а как реализовать отбор по реквизитам ДатаПередан и ДатаВозврат (Тип "Дата")?
При этом эти даты могут быть, как заполненными, так и пустыми, а отбор нужен в обоих случаях.
Помогите, пожалуйста.

С уважением,
kulkrise.
9. Евгений (Berrimor) 26.06.16 05:55
Попытаться включить отбор можно по любой колонке журнала, но работать будет только в случае ВОЗМОЖНОСТИ подобного отбора, т.е. если данное поле является графой отбора журнала документов.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа