Имя: Пароль:
1C
 
Как получить список колонок многострочной части формы списка справочника?
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. Как оформлю - то конечно. Но сейчас пока совсем нет времени на программирование. Надеюсь, что к концу дня смогу выделить время.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший