|
Как установить фильтр для справочника | ☑ | ||
|---|---|---|---|---|
|
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) Прав - без "а"
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |