Отбор по текущему значению в колонке общего журнала документов
Есть оператор — девочка Таня, которой было лень нажимать несколько раз на кнопку мыши и получать отбор по необходимому ей значению реквизита в общем журнале документов в ТИС, благодаря ее лени данная полезняшка и родилась
- Описание
- Подробнее
Описание
Все довольно просто: стоим в колонке общего журнала на значении реквизита документа, нажимаем кнопку «По колонке» и вуаля! отбор по значению получите, нажимаем на кнопку «Х» и отбор снимаем. Алгоритм универсальный, куски специфичные для ТИС убираете и все, в тексте они помечены. Создаете две кнопки, например как на моем рисунке, на одну вешаем функцию ОтборПоКолонке() на вторую СнятьОтбор(). Да, чуть не забыл, если у вас ТИС то колонке «Информация» присвойте одноименный идентификатор, колонке с видом документа (он в ТИС текст получаемый функцией «глНазваниеДокументаВЖурнале») присвойте идентификатор содержащий «ВидДок», но не равный ему (системное значение), например «ВидДокумента».
На картинке показано в комплексе с //sale.itcity.ru/public/15393/
// Это вставить в самом начале, например в первой строке
Перем СписокВидовОтбора;
// Это вставить в текст модуля формы общего журнала, например в самом конце
// перед операторами основной программы
//******************************************************************************
Процедура ОтборПоКолонке()
Если ПустоеЗначение(ТекущийДокумент)=1 Тогда
Возврат;
КонецЕсли;
ИмяОтбора = «»;
Если Найти(Форма.ТекущаяКолонка(),«ВидДок»)>0 Тогда
УстановитьОтбор(ТекущийДокумент.Вид());
ЗначениеОтбора = ТекущийДокумент.Вид();
ИмяОтбора=«ВидДок»;
ИначеЕсли Форма.ТекущаяКолонка()=«ДатаДок» Тогда
УстановитьИнтервал(ТекущийДокумент.ДатаДок,ТекущийДокумент.ДатаДок);
Возврат;
ИначеЕсли Форма.ТекущаяКолонка()=«Информация» Тогда
Попытка
ЗначениеОтбора = глИнформацияПоДокументуВЖурнале(ТекущийДокумент);
Исключение
КонецПопытки;
Иначе
ЗначениеОтбора = ТекущийДокумент.ПолучитьАтрибут(Форма.ТекущаяКолонка());
КонецЕсли;
Если ТипЗначенияСтр(ЗначениеОтбора)=«Справочник» Тогда
Позиция = СписокВидовОтбора.НайтиЗначение(ЗначениеОтбора.Вид());
Если Позиция>0 Тогда
СписокВидовОтбора.ПолучитьЗначение(Позиция,ИмяОтбора);
УстановитьОтбор(ИмяОтбора,ЗначениеОтбора);
КонецЕсли;
ИначеЕсли ИмяОтбора<>«ВидДок» Тогда
Возврат;
КонецЕсли;
// Далее до конца функции кусок специфичный для ТИС, кому лень не убирайте
Попытка
Для Счет=1 По ВидОтбора.РазмерСписка() Цикл
ОтборПо = ВидОтбора.ПолучитьЗначение(Счет);
Если Найти(Врег(ОтборПо),Врег(Лев(ИмяОтбора,2)))>0 Тогда
ВидОтбора.ТекущаяСтрока(Счет);
ЗначениеВВидеСтроки=Строка(ЗначениеОтбора);
Прервать;
КонецЕсли;
КонецЦикла;
Если ОтборПо = «по контрагенту» Тогда
КонтрагентДляОтбора = ЗначениеОтбора;
ИначеЕсли ОтборПо = «по виду документов» Тогда
ВидДокументаДляОтбора = СписокВидовДокументов.НайтиЗначение(ЗначениеОтбора);
СписокВидовДокументов.ТекущаяСтрока(ВидДокументаДляОтбора);
ИначеЕсли ОтборПо = «по автору» Тогда
АвторДляОтбора = ЗначениеОтбора; // общий реквизит документов
ИначеЕсли ОтборПо = «по фирме» Тогда
ФирмаДляОтбора = ЗначениеОтбора; // общий реквизит документов
ИначеЕсли ОтборПо = «по юр. лицу» Тогда
ЮрЛицоДляОтбора= ЗначениеОтбора; // общий реквизит документов
ИначеЕсли ОтборПо = «по складу» Тогда
СкладДляОтбора = ЗначениеОтбора;
ИначеЕсли ОтборПо = «по проекту» Тогда
ПроектДляОтбора = ЗначениеОтбора;// общий реквизит документов
КонецЕсли; // ОтборПо
ПриУстановкеБыстрогоОтбора();
Исключение
КонецПопытки;
КонецПроцедуры
//******************************************************************************
Процедура СнятьОтбор()
Попытка
// Это снова кусок специфичный для ТИС
Если ВидОтбора.ТекущаяСтрока()=1 Тогда
Возврат;
КонецЕсли;
ВидОтбора.ТекущаяСтрока(1);
ПриУстановкеБыстрогоОтбора();
Исключение
УстановитьОтбор(«*»);
КонецПопытки;
КонецПроцедуры
// Это вставить в конец модуля, там где операторы основной программы модуля
// Заполним список видов отбора
СписокВидовОтбора = СоздатьОбъект(«СписокЗначений»);
Для Счетчик=1 По Метаданные.ГрафаОтбора() Цикл
Если Метаданные.ГрафаОтбора(Счетчик).Тип <> «Справочник» Тогда Продолжить КонецЕсли;
СписокВидовОтбора.ДобавитьЗначение(Метаданные.ГрафаОтбора(Счетчик).Вид,Метаданные.ГрафаОтбора(Счетчик).Идентификатор);
КонецЦикла;
Для Счетчик=1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Если Метаданные.ОбщийРеквизитДокумента(Счетчик).Тип <> «Справочник» Тогда Продолжить КонецЕсли;
СписокВидовОтбора.ДобавитьЗначение(Метаданные.ОбщийРеквизитДокумента(Счетчик).Вид,Метаданные.ОбщийРеквизитДокумента(Счетчик).Идентификатор);
КонецЦикла;
P.S. Обрабатываю отбор только по значениям типа «Справочник» полагая что отбор по значениям других типов обычно носит служебный характер и используется авторами для разных «тайных» целей самостоятельно.