![]() |
![]() |
![]() |
|
Как получить список колонок многострочной части формы списка справочника? | ☑ | ||
---|---|---|---|---|
0
Leyla
27.10.04
✎
12:34
|
Здравствуйте!
Нужно получить список колонок многострочной части формы списка справочника. Как это можно сделать? |
|||
1
Leyla
27.10.04
✎
12:55
|
Пожалуйста, подскажите!
|
|||
2
Leyla
27.10.04
✎
13:46
|
Да... Либо никто не знает, либо - это невозможно...
Если это невозможно, то это очень грустно |
|||
3
Dr Gl00m
27.10.04
✎
13:49
|
Как я понял тебе это нужно программно. Обрисуй ситуацию, может можно без этого обойтись?
|
|||
4
Виталий Августейший
27.10.04
✎
13:55
|
(0) Штатно - только те, которые являются реквизитами справочника в попытке получитьАтрибут. Если все - то formex.
|
|||
5
Славко
27.10.04
✎
13:57
|
Метаданные.Справочник(ВидСпр).Реквизит(ИмяРеквиз).Видимость()
|
|||
6
Rovan
гуру
27.10.04
✎
13:58
|
(5) Не так.
Форма.ИмяРеквизита.Видимость() Но это совсем не то. |
|||
7
Leyla
27.10.04
✎
13:59
|
Да, программно.
Хочу дать полльзователю управлять видимостью колонок в формах списков справочников. Нашла, как это делается в Типовой конфигурации "1С:Бухгалтерия" для справочника Контрагенты, но добавлять колонки для каждого справочника "вручную" долго, и если что-то вдруг изменится - придется менять код. Вот и хотелось получить список колонок программно. |
|||
8
Славко
27.10.04
✎
13:59
|
или (5)
|
|||
9
Crew
27.10.04
✎
14:00
|
(6)
Имена реквизитов еще узнать нужно |
|||
10
Leyla
27.10.04
✎
14:02
|
(4) Программирую на 1С второй месяц, уже столкнулась с невозможностью реализовать такие элементарные вещи... грустно...
Реквизиты справочника-то я достану через метаданные, но ведь колонки бывают и вычисляемые. Formex почему-то не хочется подгружать, цель не оправдывает средства. |
|||
11
Славко
27.10.04
✎
14:02
|
(7) тогда просто:
Видимость(<?>) Синтаксис: Видимость(<Режим>) Назначение: Установка режима отображения элемента диалога. Возвращает: текущее числовое значение режима отображения элемента диалога (на момент до исполнения метода). Параметры: <Режим> - число: 1 - поле диалога отображается, 0 - поле диалога скрыто. Замечание: Доступ к методу возможен только в контексте Модуля формы через атрибут Форма. Использование данного метода для колонки табличной части формы не может изменять видимость отдельно для совмещенных и многострочных колонок. |
|||
12
Виталий Августейший
27.10.04
✎
14:05
|
10. Если ты скромная прелестная девушка, то можешь скинуть мне свой 1сv7.md - я бы тебе сделал.
|
|||
13
Славко
27.10.04
✎
14:05
|
(10) Мадам, научитесь пользоваться СП, или если СП мало, то СП+ЖКК, и можете мне поверить, Вам будет не так грустно...
ЗЫ я первые 2 года программил тока по СП... |
|||
14
Виталий Августейший
27.10.04
✎
14:06
|
Внимание, достопочтенная публика! Сравните 12 и 13.
|
|||
15
Leyla
27.10.04
✎
14:06
|
(12) Спасибо большое за ваше благородное предложение, но очень хочется сделать самой, а вы мне только подскажите!
|
|||
16
Leyla
27.10.04
✎
14:07
|
(13) Пожалуйста, расшифруйте СП и ЖКК
|
|||
17
Виталий Августейший
27.10.04
✎
14:08
|
15. Для начала расскажи, как подключала formex.
|
|||
18
Leyla
27.10.04
✎
14:09
|
(17) Я его не подключала, просто искала в интернете информацию по своей проблеме и прочитала про FormEx.
|
|||
19
Dr Gl00m
27.10.04
✎
14:10
|
(16) Синтакс-Помощник и Желто-красные книжки
|
|||
20
Виталий Августейший
27.10.04
✎
14:11
|
18. Кроме как через formex никак не получится изящно.
|
|||
21
Leyla
27.10.04
✎
14:13
|
(19) Благодарю: ЖКК 4 шт. всегда у меня на столе, кроме этого диски ИТС, а уж без СП вообще никуда :)
|
|||
22
Leyla
27.10.04
✎
14:15
|
(20) Понятно, но FormEx, почему-то, не хочется.
Буду брать реквизиты, а вычисляемые, так уж и быть, придется дописывать вручную. |
|||
23
Crew
27.10.04
✎
14:16
|
(20)
ИМХО если отказаться от вычисляемых колонок, то можно без FormEx |
|||
24
Виталий Августейший
27.10.04
✎
14:16
|
22. В вычисляемые можно вставить функции, которые будут индентифицировать их как видимые.
|
|||
25
Crew
27.10.04
✎
14:17
|
(22)
Конфигурация типовая? |
|||
26
Leyla
27.10.04
✎
14:18
|
(24) А если их пользователь захочет сделать невидимыми?
|
|||
27
Leyla
27.10.04
✎
14:18
|
(25) Да, типовая.
|
|||
28
Славко
27.10.04
✎
14:28
|
так что Вам еще нужно подсказать? ведь уже явно указал на метод, который Вам нада использовать для решения Вашей задачи...
|
|||
29
Славко
27.10.04
✎
14:29
|
даже в виде выдержки из СП, а пример использования можно в ЖКК позырить...
|
|||
30
Leyla
27.10.04
✎
14:31
|
(28)(29)
Проблема не в том, чтоб колонке установить видимость, а в том, чтоб программным способом получить список идентификаторов этих самых колонок. |
|||
31
Славко
27.10.04
✎
14:38
|
на это я тоже ответ давал...
|
|||
32
Славко
27.10.04
✎
14:39
|
и не только я...
|
|||
33
Leyla
27.10.04
✎
14:42
|
(31) Имеете ввиду (5)?
А как быть с вычисляемыми колонками? Их же среди реквизитов нет. |
|||
34
GrayT
27.10.04
✎
14:45
|
(31)Я не видел твоего ответа на 0.
Могу только сказать, что можно получить и список вычисляемых и без ФормЕх, но боюсь что это Leylу тоже не устроит |
|||
35
Виталий Августейший
27.10.04
✎
14:48
|
Лейла, Славко рубит только в принтерах.
|
|||
36
Crew
27.10.04
✎
14:48
|
(34)
Расскажи как вычисляемые получить? |
|||
37
GrayT
27.10.04
✎
14:49
|
(36)Другая ВК :)
|
|||
38
Crew
27.10.04
✎
14:50
|
(37)
Блин нельзя же так шутить ;) |
|||
39
GrayT
27.10.04
✎
14:50
|
+37 Точнее АктивХ
|
|||
40
Leyla
27.10.04
✎
14:51
|
(34) Интересно было бы узнать, каким образом может другая ВК помочь?
|
|||
41
Виталий Августейший
27.10.04
✎
14:51
|
Можно и без ВК. Только мне лень код писать с нуля.
|
|||
42
GrayT
27.10.04
✎
14:53
|
(40)АктивМД и парсить диалог.
(41)Не пиши, на пальцах обрисуй |
|||
43
Leyla
27.10.04
✎
14:53
|
(39) Расскажите, и будет видно, устроит это Leyly или нет :)
|
|||
44
Leyla
27.10.04
✎
14:54
|
(41) Виталий, вы знаете еще какой-то способ? или это все-таки FormEx?
|
|||
45
Leyla
27.10.04
✎
14:56
|
(42) Что такое АктивМД или лучше - где про него можно почитать?
|
|||
46
GrayT
27.10.04
✎
14:56
|
43. А вообще если нет желания постоянно менять конфу, то можно загнать все колонки в файл (тхт, хмл - по вкусу) и от тудова уже брать.
Если конечно Виталий Августейший ни чего хорошего не предложит |
|||
47
Виталий Августейший
27.10.04
✎
14:58
|
44,42 - немного позже, сейчас занят.
|
|||
48
Славко
27.10.04
✎
14:59
|
(33) в (5) не правильный ответ, кроме того Вы понимаете разницу между реквизитом объекта и реквизитом формы?
(35) на этом форуме я не высказывался вроде по принтерам, или Матрена у тя тут Ник совсем мне неизвестный? :))))) по большому счету без ВК или без юзанья ActiveX тут не обойтись... я имею про задачу вцелом... |
|||
49
Diter
27.10.04
✎
14:59
|
(42) ActiveMD работает только с реквизитами объектов.
|
|||
50
GrayT
27.10.04
✎
14:59
|
ActiveMD - OLE сервер, позволяет работать с конфигурацией из Предприятия. В данном случае можно получить текст диалога и вытащить названия из секции Multicolumn
|
|||
51
Crew
27.10.04
✎
15:01
|
(47)
"Я вам говорю приходите завтра, а вы все время сегодня приходите" (с) РусскоеРадио |
|||
52
GrayT
27.10.04
✎
15:01
|
47 - так я и подумал
49 - ошибаешься |
|||
53
Виталий Августейший
27.10.04
✎
15:02
|
51. Сегодня, просто мне нужно время проверить код, а я сейчас занят работой.
|
|||
54
Leyla
27.10.04
✎
15:03
|
(48) Надеюсь, что понимаю. Но нигде не прозвучало, как может ВК (это вычисляемая колонка, если я правильно понимаю) помочь? Озвучьте, пожалуйста.
|
|||
55
Виталий Август Цезар
27.10.04
✎
15:05
|
54. формкс делает так.
ФормаРасш=СоздатьОбъект("РасширениеФормы"); ФормаРасш.УстановитьФорму(Конт.Форма); Для П=0 По ФормаРасш.КоличествоАтрибутов()-1 Цикл Идентификатор=ФормаРасш.ПолучитьАтрибут(П) |
|||
56
Славко
27.10.04
✎
15:06
|
ВК - это внешняя компонента, например тот же формекс...
а получть атрибут - это метод не только для реквизитов объектов... если полностью все автоматом, т.е. программно, то без ВК или без юзанья ActiveX тут не обойтись |
|||
57
Crew
27.10.04
✎
15:09
|
(56)
можно. Но Leyla врядли согласится |
|||
58
Leyla
27.10.04
✎
15:09
|
(55) Объект "РасширениеФормы" - формэксовский? Т.е. без подключения Formex им воспользоваться, похоже, нельзя?
|
|||
59
Виталий Август Матре
27.10.04
✎
15:10
|
56. Ну почему же? Даже если известна строка с идентификаторами вычисляемых колонок - то уже можно программно без ВК.
|
|||
60
Leyla
27.10.04
✎
15:11
|
(57) Как тонко почувствован характер :)
|
|||
61
Виталий Августейший
27.10.04
✎
15:11
|
58. Именно так, леди.
57. У тебя одно на уме :) |
|||
62
Leyla
27.10.04
✎
15:14
|
(61) На (58), пожалуйста, ответьте! Ведь нельзя?
|
|||
63
Leyla
27.10.04
✎
15:15
|
Ой, вижу, простите, спасибо!
|
|||
64
Славко
27.10.04
✎
15:18
|
(59) ключевая фраза - если полностью все автоматом...
|
|||
65
Crew
27.10.04
✎
15:29
|
Способы конечно корявые :) + полуавтоматом ;)
Может Виталик или монстры 1С ченить умное подскажут. Ногами не бить. 1) Сделать название расчетных колонок однотипными (РК1,РК2,РК3) Управлять видимостью через Попытку/Исключение 2) Добавить реквизиты в форму с определ. однотипными именами. А в синонимах проставить имена расчетных колонок. 3)Прописать в синониме справочника имена расчетных колонок через разделители. (61) Можно подумать что пост (12) это я написал. |
|||
66
Leyla
27.10.04
✎
15:37
|
(65) Способы мне нравятся, несмотря на их "полуавтоматичность", и главное - никаких лишних dll! :)
|
|||
67
Diter
27.10.04
✎
15:43
|
(52) Нет прости, но помоему ошибаешься ты. Ну получишь ты текст формы моделя, ну найдёшь та реквизит ТЧ (узнаешь его имя методом тыка установи признаки вычесляемых колонок). Дальше то что? Как видимостью управлять планируешь? При таком раскладе можно и GComp`ом воспользоваться. Тот же эффект.
|
|||
68
GrayT
27.10.04
✎
15:54
|
(67)Текст диалога, получу наименование реквизитов. Дальше уже ясно.
С ФормЕх-ом проще однозначно, но это ВК |
|||
69
Diter
27.10.04
✎
15:56
|
ActiveMD тоже ВК.
ОК есть наименование колонки, как задать её видимость? |
|||
70
GrayT
27.10.04
✎
16:04
|
Не разочаровывай меня
1. Из дока по АстивМД "ActiveMD - представляет собой OLE Automation сервер для доступа к файлу метаданных (MD файлу) 1С Предприятия 7.7. ActiveMD не является внешней компонентой в понимании 1С Предприятия и с ним можно работать из любого языка программирования, поддерживающего OLE Automation в т.ч. и из самого 1С'а. " 2 Форма.ПолучитьАтрибут(НаименРеквФормы).Видимость(0) |
|||
71
Diter
27.10.04
✎
16:13
|
(70) Может конечно я и не силён в терминологии, но в моём понимании, ВК это всё, что "пристёгивается" извне к 1С.
За способ программно управлять реквизитами формы, не зная заранее их наименования - респект :) |
|||
72
GrayT
27.10.04
✎
16:16
|
Я тоже не силен - руки не доходят :) Но при правильном понимании терменологии может открыться и понимание технологий.
|
|||
73
Diter
27.10.04
✎
16:19
|
(72) Вот выдержка из als по ActiveMD
"Copyright (C) 2001 by Павел Бычковяк: Active MD представляет собой in-proc ActiveX сервер и предназначен для доступа к метаданным 1С Предприятия 7.7." Заметь не ОЛЕ а ActiveX |
|||
74
Виталий из Ростова
27.10.04
✎
17:42
|
Перем Скрипт;
Перем СписКолонок; Процедура СканироватьКолонки() Форма.ОбработкаОжидания(,); Если СписКолонок.НайтиЗначение(Форма.ТекущаяКолонка())=0 Тогда СписКолонок.Добавитьзначение(Форма.Текущаяколонка()); СписКолонок.Пометка(СписКолонок.РазмерСписка(),1); Скрипт.SendKeys("{RIGHT}"); СканироватьКолонки(); Иначе Возврат; КонецЕсли; КонецПроцедуры Процедура УстановитьВидимость() Для П=1 По СписКолонок.РазмерСписка() Цикл Пом=СписКолонок.Пометка(П); Зн=СписКолонок.Получитьзначение(П); Атр=Форма.ПолучитьАтрибут(Зн); Атр.Видимость(Пом); КонецЦикла; КонецПроцедуры Процедура УправлениеВидимостью() Если СписКолонок.ОтметитьЗначения(,,,)=1 Тогда УстановитьВидимость(); КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() Форма.ОбработкаОжидания("СканироватьКолонки",1); КонецПроцедуры СписКолонок=СоздатьОбъект("Списокзначений"); Скрипт=СоздатьОбъект("WScript.Shell"); |
|||
75
Виталий Августейший
27.10.04
✎
17:43
|
Процедура управлениеВидимостью() - формула кнопки.
Можно было сделать и без WScript... |
|||
76
Виталий Августейший
27.10.04
✎
17:47
|
Забыл дописать, что это я написал не ради Crew и GrayT, а ради прекрассной леди Лейлы, четвертой дамы моего сердца.
|
|||
77
Crew
27.10.04
✎
17:58
|
(75)
Браво! Боюсь даже спрашивать как без WScript |
|||
78
Виталий Августейший
27.10.04
✎
18:10
|
77. У меня есть мысли по этому поводу, но пока нет времени проверить. Постараюсь не забыть завтра эту тему и выложить универсальный код без WScript.
|
|||
79
GrayT
27.10.04
✎
18:38
|
76 Я и не надеялся ;)
|
|||
80
Leyla
28.10.04
✎
06:54
|
(74) Прочитала - здорово! Надо попробовать!
|
|||
81
Leyla
28.10.04
✎
07:41
|
(74)
Попробовала - работает, только почему-то процесс сканирования колонок работает бесконечно. На свой страх и риск решила немножко изменить процедуру СканироватьКолонки(), вот, что получилось: Процедура СканироватьКолонки() Если СписКолонок.НайтиЗначение(Форма.ТекущаяКолонка())=0 Тогда СписКолонок.Добавитьзначение(Форма.Текущаяколонка()); СписКолонок.Пометка(СписКолонок.РазмерСписка(),1); Скрипт.SendKeys("{RIGHT}"); Иначе Форма.ОбработкаОжидания("",); Возврат; КонецЕсли; КонецПроцедуры Т.е. убрала рекурсию (все равно обработка ожидания запускает СканированиеКолонок периодически), убрала первую строчку Форма.ОбработкаОжидания(,); (может, я чего-то не понимаю - зачем она?) Добавила Форма.ОбработкаОжидания("",); - заканчивает периодический вызов процедуры СканированиеКолонок, когда все колонки добавлены. Может, я не учла каких-то нюансов? |
|||
82
Виталий Михайлович
28.10.04
✎
11:00
|
81. Да, не нужно было менять код :)
|
|||
83
Leyla
28.10.04
✎
11:03
|
(82) Тогда, пожалуйста, Виталий Михайлович, объясните, что не так?
|
|||
84
Можно просто Виталий
28.10.04
✎
11:07
|
Милая Лейла, Обработка ожидания в первоначальном варианте вызвала процедуру сканирования и при активизации этой процедуры прекратила свое действие. В твоем варианте - обработка ожиданя продолжает работать, то есть раз в секунду пытается заново вызвать процедуру сканирования.
|
|||
85
Виталий Августейший
28.10.04
✎
11:10
|
Никто не хочет посоревноваться за лучшее написание по теме сабжа без использования ВК и WScript?
|
|||
86
Leyla
28.10.04
✎
11:14
|
(84) Виталий (хорошо, что можно просто :), а у меня ваш вариант работает бесконечно. Что его должно было остановить: эта команда - Форма.ОбработкаОжидания(,); ?
И еще вопрос - зачем рекурсия в процедуре сканироватьКолонки()? Может быть, или рекурсия или обработкаОжидания. А может, оставить только рекурсию и убрать ОбработкуОжидания - все равно она вызывается при открытии формы - там и вызвать первоначально сканироватьКолонки()? Что-то я запуталась! Распутывайте! |
|||
87
Виталий Августейший
28.10.04
✎
11:22
|
Лейла, рекурсия вызывает всего лишь перемещение курсора вправо и получение идентификатора колонки списка. Если идентификатор уже был просканирован - тогда "возврат", то есть прекращение процедуры. А обработка ожидания в рекурсии работает только один раз - при первом вызове отменяет обработку ожидания сканирования каталога. Последующие вызовы с пустыми параметрами обработки ожидания ничего не делают. Конечно, приведенный в 84 пример далеко не изящен, был сделан наспех. Потому, исключительно ради Вас, я и предложил 85.
|
|||
88
Leyla
28.10.04
✎
11:32
|
(87) Мне и с использованием WScript'а очень нравится ваша идея, Виталий.
(85) Не уверена, найдутся ли желающие посоперничать с вами :) |
|||
89
Leyla
28.10.04
✎
12:20
|
(87) И все-таки, Виталий, я поэкспериментировала с процедурой СканироватьКолонки(),
команда Форма.ОбработкаОжидания(,) не отменяет периодический вызов сканирования колонок, и получается, что все работает как раз за счет того, что процедура ОбработкаОжидания продолжает работать. Если же ее действительно остановить, то колонки не просканируются, т.к. в рекурсии всегда будет текущей одна и та же колонка, не смотря на то, что вызывается Скрипт.SendKeys("{RIGHT}"); Похоже, что следующая колонка не устанавливается, пока процедура СканироватьКолонки не отработает до конца (в.т.ч. и ее вложенные рекурсивные вызовы), поэтому здесь рекурсивный вызов можно просто убрать и работать будет так же. |
|||
90
Виталий Август
28.10.04
✎
12:26
|
89. Я не знаю Лейла, я не программист. Я 1с практически не юзаю - для этого есть подчиненные. Моя обязанность - просто управлять людьми, ситуациями.
|
|||
91
Leyla
28.10.04
✎
12:31
|
(90) Виталий, Вам хочу сказать особенное большое спасибо - идея действительно великолепная, я сама бы до такого точно не додумалась. Благодарю.
|
|||
92
XXX
28.10.04
✎
13:04
|
А можно где нибудь описание WScript достать?
|
|||
93
Crew
28.10.04
✎
13:32
|
||||
94
XXX
28.10.04
✎
13:40
|
(93) Спасибо
|
|||
95
GrayT
28.10.04
✎
13:43
|
Сдается мне что Виталий Августейший нашел таки способ решить задачу без ВК и WSH.
Может поделишься? |
|||
96
Виталий Августейший
28.10.04
✎
13:53
|
95. Нашел, но я еще не придумал новый ник и не оформил во внешнюю обработку.
|
|||
97
Leyla
28.10.04
✎
14:16
|
Виталий, а когда оформите, расскажете (покажете) нам?
|
|||
98
Виталий Михайлович
28.10.04
✎
14:18
|
97. Как оформлю - то конечно. Но сейчас пока совсем нет времени на программирование. Надеюсь, что к концу дня смогу выделить время.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |