Вход | Регистрация


1С:Предприятие ::

Метки:

Как установить фильтр для справочника

Я
   Kadr
20.01.04 - 06:51
Подскажите пожалуйста, как установать фильтр для справочника "Сотрудники" 1С:ЗиК по реквизиту "Подразделение". Применение метода УстановитьОтбор не помагает, так как реквизит "Подразделение" является периодическим и ему нельзя поставить галочку "Отбор по реквизиту"
 
 
   Львенок
 
1 - 20.01.04 - 10:17
1) Создай фиктивное измерение "Подразд1", с "отбором по реквизиту", которому всегда присваивай текущее значение  "Подразделение" при изменении последнего. Тогда ты сможешь использовать "Отбор по реквизиту". Это просто но некрасиво и не рационально.
2) В форме сделать дополнительное поле "ВыбПодразд", в котором можно вводить значение подразделения по которому нужно фильтровать, при его вводе пробегать весь справочник, справнивать "Подразделение" текущего элемента на текущую дату с ВыбПодразд и если они равны добавлять текущий элемент в список значений. А потому использовать конструкцию "ИспользоватьСписокЭлементов(...)" (см. синтаксис помощьник). Это занимает чуть больше времени при отображении, но на мой взгляд более элегантно.
___
Искренне Ваш, Львенок.
   Kadr
2 - 22.01.04 - 07:06
Спасибо, Львенок.
Хотя до первого способа я допер сам. Набрав код у меня все заработало. Однако после нескольких экспериментов че-то база при попытке выполнить инструкцию "УстановитьОтбор" стала выдавать (то есть Винды выдают) "приложение 1Сv7.exe вызвало ошибку и будет закрыто". И так не постоянно (то есть, а то нет). Может подскажишь чего делать.
А по второму варианту я тоже написал код, но у меня не заполняется список. В чем может быть дело?
   Kadr
3 - 22.01.04 - 07:12
Да и еще! Что необходимо сделать, чтобы можно было вставлять куда-нибудь (например в текстовый файл через буфер обмена) текст программы на языке 1С, а то че-то с кодировкой какие-то глюки?
   Львенок
 
4 - 22.01.04 - 07:43
Ну если не заполняется список, значит у тебя ошибка в условии. Не то ни с тем сравниваешь. Например, если поле подразделение текстовое, тогда может быть у тебя поле ввода в форме (ВыбПодразд) имеет 20 символов, в справочнике поле Подразделение 15 символов. Из-за таких вещей сравнение может легко не работать, условие не выполняться, список не заполняься. В общем ищи ошибки.
___
Искренне Ваш, Львенок.
   Kadr
5 - 22.01.04 - 08:02
Тип поля ввода в форме Справочник.Подразделения
   Kadr
6 - 22.01.04 - 08:02
А то, что ошибка я понимаю...
   Kadr
7 - 22.01.04 - 08:05
Условие-то у меня нормально выполняется. Вот только инструкция
Пер2.ДобавитьЗначение(Пер1.Подразделение.Получить(ТекущаяДата()).Наименование)
не приводит к добавлению значения
   Kadr
8 - 22.01.04 - 09:06
Во я ушлепок!!!
Правлю и тут конфу под конкретные задачи. Ну значит скопировал всю базу с сервера. Исправил. Назад на сервер. Так n-ое количество раз. Ну мне надоело долго ждать и я решил ускорить процесс: решил копировать только MD-шник. В итоге чуть не запарол базу, которую сам делал!!!

Народ!!! Не экономьте время - дороже станет
   Львенок
 
9 - 22.01.04 - 09:31
А почему .Наименование? В функции ИспользоватьСписокЭлементов(СписЗнач) переменная СписЗнач должная являться списком элементов (объектов), а не их наименований (строк).
___
Искренне Ваш, Львенок.
   Kadr
10 - 22.01.04 - 10:10
Переменная Пер2 определена так

Пер2 = СоздатьОбъект("СписокЗначений")
 
 
   Львенок
 
11 - 22.01.04 - 10:32
В общем пишу как надо. Проверять не проверял, но уверен, что работает. Для работы предполагается три вещи:
1) Сия процедура используется в форме списка справочника "Сотрудники".
2) На форму добавлено поле ввода (реквизит диалога по научному) с идентификатором "ВыбПодразд" и типом "Справочник.Подразделения"
3) После измененния ВыбПодразд в форме вы каким-то образом вызываете приведенную ниже процедуру.

Процедура ФильрПоРеквизиту()
    Спр=СоздатьОбъект ("Справочник.Сотрудники");
    СписЗнач=СоздатьОбъект ("СписокЗначений");
    Спр.ИспользоватьДату(РабочаяДата());
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл         
        Если (Спр.Подразделение=ВыбПодразд) Или (ВыбПодразд.Выбран()=0) Тогда
            СписЗнач.ДобавитьЗначение(Спр.ТекущийЭлемент());
        КонецЕсли;
    КонецЦикла;
    ИспользоватьСписокЭлементов(СписЗнач);
КонецПроцедуры

P.S.: Надеюсь, все заработает.
___
Искренне Ваш, Львенок.
   Kadr
12 - 22.01.04 - 10:44
Я тоже надеюсь. Спасибо. А все таки, как вставить текст программы, например в данное сообщение через буфер обмена? Когда вставляю - кодировка не совпадает!
   Львенок
 
13 - 22.01.04 - 10:57
Это глюки одной эски. Попробуй переключить регистр, когда будешь находиться в окне 1С. Не поможет попробуй сохранить этот кусочек через блокнот и открыть файлв 1С. Я не помню, как я решал эту проблему, но она точно решается.
___
Искренне Ваш, Львенок
   WhiteCat
 
14 - 22.01.04 - 11:59
(12) У тебя скорее всего стоит W2K или XP. Когда копируешь и вставляешь, нужно чтобы и в 1С-ке и в тексте стоял русский язык. Если копируешь в русском, а вставляешь в ангельском то вместо буковок и циферок палочки и квадратики получаются
   Kadr
15 - 22.01.04 - 13:21
У меня W2K и ты (14) оказался прав(а). Спасибо
   Львенок
 
16 - 22.01.04 - 13:28
(15) Ты расскажи, решилась ли проблема с фильтром!
___
Искренне Ваш, Львенок.
   Kadr
17 - 22.01.04 - 13:52
Да решилась. Вот код:

Процедура ФильтрПодразделение()        
    
Пер1 = СоздатьОбъект("Справочник.Сотрудники");
Пер1.ВыбратьЭлементы();
Пока Пер1.ПолучитьЭлемент()>0 Цикл
Если Пер1.ЭтоГруппа()=0 Тогда
Если Пер1.Подразделение3 <>   Пер1.Подразделение.Получить(ТекущаяДата()).Наименование Тогда
Пер1.Подразделение3 = Пер1.Подразделение.Получить(ТекущаяДата()).Наименование;
Пер1.Записать();
            КонецЕсли;
        КонецЕсли;
    КонецЦикла
    УстановитьОтбор("Подразделение3", ТекстПодразделение.Наименование);   

КонецПроцедуры
   Kadr
18 - 23.01.04 - 10:23
Кстати! Так тоже для сетевой версии ЗиК не пойдет. Так как если один пользователь кого-нибудь редактирует, то если с другой машины приходит метод "Записать" этот элемент, то, соответственно, выдается ошибка. Наверное надо пользоваться вторым методом (2), хотя мне так тоже не нравится
   Львенок
 
19 - 23.01.04 - 10:38
(18) А нечего без дела справочники переписывать. Изменять фиктивный реквизит и перезаписывать его, нужно только если изменился реальный реквизит. Причем не проверять сие постоянно при каждом открытии справочника, а повесить в форму элемента, и проверять только при его записи. Тогда Ничего никогда не окажется заблокированным.
___
Искренне Ваш, Львенок.
   Kadr
20 - 23.01.04 - 11:12
Да я уже переделал по второму методу (2) и все работает на ура!!!.

Спасибо
   WhiteCat
 
21 - 24.01.04 - 01:04
(15) Прав - без "а"



Список тем форума
  Рекламное место пустует
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует