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


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) Прав - без "а"



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