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

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

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

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

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

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

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

Спасибо
21 WhiteCat
 
24.01.04
01:04
(15) Прав - без "а"
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший