Как получить список колонок многострочной части формы списка справочника? #13939


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

В этой группе 1С