Имя: Пароль:
1C
1C 7.7
v7: Как пробежаться по форме списка справочника ПриОткрытии()
,
0 Absurdus
 
17.04.17
12:55
Открываю справочник цены определенной номенклатуры. ПриОткрытии мне надо записать реквизит Показать, чтобы потом УстановитьОтбор("Показать",1);
А вот как ПриОткрытии() пробежаться по форме списка не знаю.
Изначально прописать какой-нибудь обработкой этот реквизит - не вариант. Т.к. какие цены показать, а какие скрыть может измениться в любой момент
1 Волшебник
 
модератор
17.04.17
12:56
Чушь какая-то
2 Смотрящий
 
17.04.17
12:57
(0) Тебе динамически надо показывать цены ?
3 Absurdus
 
17.04.17
12:58
Мне надо некоторым пользователям скрыть некоторые виды цен в справочнике цен
4 Злопчинский
 
17.04.17
12:58
(0) пробегаться надо не по форме списка
А по выборке справочника
Ибо форма отображает содержимое справочника
5 Смотрящий
 
17.04.17
12:59
ИспользоватьСписокЭлементов(<?>);
Синтаксис:
ИспользоватьСписокЭлементов(<СписокЗначений>)
Назначение:
Реализует фильтрацию элементов справочника, используя нединамический фильтр.
Параметры:
<СписокЗначений> - необязательный параметр. Значение типа - ''СписокЗначений'' - должен представлять собой список элементов справочника, выбранных для просмотра. Если это значение пустое, то фильтр отключается.
Замечание:
Метод доступен только в контексте Модуля формы списка справочника и относится ко всему текущему справочнику.
6 Absurdus
 
17.04.17
13:00
В форме списка как по выборке пробежаться? Владелец = null
7 HawkEye
 
17.04.17
13:00
(0) ты полностью оправдал свой ник...
8 Злопчинский
 
17.04.17
13:01
(3) не получится
Разные пользователи могут смотреть одновременно одно и то же содержимое
Поэтому придётся писать просмотр списка с нужным содержимым на своём так сказать движке - например отображать справочник с помощью тз
9 Смотрящий
 
17.04.17
13:01
Спр = СоздатьОбъект("Справочник." + Вид());
Спр.ИспользоватьВладельца(ИспользоватьВладельца());
Спр.ВыбратьЭлементы();
10 Смотрящий
 
17.04.17
13:01
Справочник должен быть спозиционирован по владельцу, либо назначай его принудительно
11 skafandr
 
17.04.17
13:01
(6)При чем тут форма списка? Пробегаешь по элементам справочника цена и прописываешь записываешь с реквизитом а потом отбор в списке
12 Злопчинский
 
17.04.17
13:02
(6) смотри например (5)
Про владельца херня какаято
13 skafandr
 
17.04.17
13:02
подчиненному к товару естественно
14 Злопчинский
 
17.04.17
13:02
(11) не взлетит, смотрят один справочник два пользователя одновременно с разными правами
15 Chameleon1980
 
17.04.17
13:02
(9) вроде, выбрть элементы  нужным параметром типа без учета иерархии чтоли.
16 HawkEye
 
17.04.17
13:02
(11) а что будет если одну цену надо первому пользователю показать, а второму скрыть?
17 Злопчинский
 
17.04.17
13:04
Если база скальная то можно прикрутить патч ромикса, который позволяет модифицировать запросы, которые тянут данные из базы на отображение списков
18 Смотрящий
 
17.04.17
13:05
(15) Пусть сам посмотрит СП, я дверь показал - пройти туда он только сам сможет
19 Absurdus
 
17.04.17
13:06
(9) О! Так работает, спасибо.
20 Злопчинский
 
17.04.17
13:07
(0) нормально ный вариант можно сделать как было в тис 8.7
Там цены товара отображались в тз на форме номенклатуры
Для автора это имхо оптимальный вариант или как в (5).
А чтобы было красиво - посмотретьткак сделана форма обработки просмотра остатков
Я бы делал на тз
Вариант с использовать список элементов противоречит моему чувству прекрасного
21 Злопчинский
 
17.04.17
13:09
(19) другой юзер в это время будет порождать коллизии. И если второй юзверь имеет более широкие права то после открытия им просмотра цен - первый юзверь увидит не предназначенную для него инфу
22 skafandr
 
17.04.17
13:09
(14) Конечно,был неправ .... удивительно непонятная формулировка задачи
Тогда отбирать список по своей логике и использовать ИспользоватьСписокЭлементов()
23 Absurdus
 
17.04.17
13:21
(21) Не. Никаких колллизий
24 Злопчинский
 
17.04.17
13:27
(23) обоснуй. Если писать реквизит в справочник - то он не на одного, а на всех
25 Absurdus
 
17.04.17
13:33
Если НазваниеНабораПрав() = "Филиал" Тогда  
        Н = СоздатьОбъект("Справочник.Номенклатура");
        Ц = СоздатьОбъект("Справочник.Цены");  
        Н.НайтиЭлемент(ИспользоватьВладельца());
        Ц.ИспользоватьВладельца(Н.ТекущийЭлемент());
        Ц.ВыбратьЭлементы();
        Пока Ц.ПолучитьЭлемент() = 1 Цикл
            Если Ц.ТипЦен.ДоступноУве = 1 Тогда
                Если Ц.ПоказатьУве = 0 Тогда
                    Ц.ПоказатьУве = 1;
                    Ц.Записать();  
                КонецЕсли;
            иначе  
                Если Ц.ПоказатьУве = 1 Тогда
                    Ц.ПоказатьУве = 0;
                    Ц.Записать();  
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
        
        УстановитьОтбор("ПоказатьУве",1);  
        Форма.Процент.Видимость(0);
    КонецЕсли;

Открыл цены у одной и той же номенклатуры одновременно под пользователем с правами Филиал и под обычными правами. У филиала показываются три типа цен, которые и надо показать. И обычного - все цены
26 Chameleon1980
 
17.04.17
13:39
что за конструкция:

Н.НайтиЭлемент(ИспользоватьВладельца());
27 Absurdus
 
17.04.17
13:42
(26) Сам в шоке! Но работает
28 HawkEye
 
17.04.17
13:43
(26) это вместо ВыбратьЭлементы(0)... )))))
29 HawkEye
 
17.04.17
13:45
(27) если ты перебираешь ВСЕ элементы, то проще использовать ИспользоватьСписокЭлементов()...

если конечно нет задачи специально написать корявый и тормозящий код...
30 HawkEye
 
17.04.17
13:46
(25) если ты показываешь цены ОДНОЙ номенклатуры, зачем цикл по ВСЕМ элементам?
31 HawkEye
 
17.04.17
13:48
+30...
аааааа у тебя там  Н.НайтиЭлемент(ИспользоватьВладельца())...

ну хоть так...
32 Absurdus
 
17.04.17
13:51
Да всё нормуль пашет и совершенно не тормозит. Меня устраивает. Спасибо еще раз умным людям.
33 Смотрящий
 
17.04.17
14:23
(25) Чет намолотил ты лишнего