Имя: Пароль:
1C
1C 7.7
v7: атрибут ТЧ на форме
,
0 DES
 
31.07.13
12:24
Как получить арибут ТЧ формы, чтобы программно изменять положение и размеры этой ТЧ ?
46 Ёпрст
 
31.07.13
14:40
желательно , многострочную часть привязать вертикально не к форме, а к кнопке записать
47 Ёпрст
 
31.07.13
14:40
(45) открыть наконец, описалово класса.
48 Ёпрст
 
31.07.13
14:40
Вкладка Описание, если что в
49 DES
 
31.07.13
14:44
(47) открыл.
все описалово

//Класс Общие.Форма.Привязка
//Автор: Дмитрий Ощепков     mailto:[email protected]
//Версия: 1.6
50 Ёпрст
 
31.07.13
14:46
Описание класса Общие.Форма.Привязка

Автор: Дмитрий Ощепков (DmitrO)
Доработано: Дмитрий Трапезников (trad)
Версия: 2.0 (trad mod)

Описание
Класс предназначен для автоматического изменения расположения и размеров элементов управления (ЭУ) на форме.
Наследуется от встроенного класса FormEx РасширениеФормы и может использоваться как класс РасширениеФормы.

Порядок работы
В процедуре ПриОткрытии() необходимо инициализировать объект методом УстановитьФорму(). Задать нужные привязки
методом Привязка(). Порядок вызовов метода Привязка() определяет порядок расчета положения и размеров элементов
формы, так что если элемент управления А привязан к элементу управления Б, привязка элемента управления Б должна
быть определена раньше чем привязка элемента управления А.

В предопределенных процедурах формы

ПриИзмененииРазмераОкна(),
ПослеОткрытия(),

необходимо передать аргументы одноименной процедуре этого класса.

Описание способов привязки
Привязка ЭУ задается типом привязки и объектом к которому происходит привязка, в качестве объекта может выступать
сама форма или любой другой ЭУ. Если используется Форма, то в расчет берутся высота и ширина формы. Если
используется ЭУ, то в случае вертикальной привязки, в расчет берется координата верхней границы ЭУ; в случае
горизонтальной привязки, в расчет берется координата левой границы ЭУ.
Если для нескольких атрибутов формы необходимо задать одинаковую привязку, докускается в первом параметре метода
Привязка() перечислить идентификаторы привязываемых ЭУ через запятую.

Типы привязки:
"T" - (Top) привязка вертикального положения ЭУ
Привязка может работать в вертикальном направлении
При изменении размеров формы, ЭУ будет перемещаться за нижней границей формы, или за верхней границей ЭУ.

"H" - (Height) привязка высоты ЭУ
Привязка может работать в вертикальном направлении
При изменении размеров формы, ЭУ будет изменять высоту за нижней границей формы, или за верхней границей ЭУ.

"TH" - (Top Height) пропорциональная привязка вертикального положения и высоты ЭУ
Привязка может работать в вертикальном направлении
При изменении размеров формы, ЭУ будет перемещаться за нижней границей формы, или за верхней границей ЭУ,
в тоже время ЭУ будет изменять высоту пропорционально высоте формы или координате верхней границы ЭУ.

"T2" - (Top/2) привязка вертикального положения ЭУ
Привязка может работать в вертикальном направлении
При изменении размеров формы, ЭУ будет перемещаться за нижней границей формы, или за верхней границей ЭУ.
При этом изменене положения ЭУ будет равно половине изменения размера формы или положения "ведущего" ЭУ.

"L" - (Left) привязка горизонтального положения ЭУ
Привязка может работать в горизонтальном направлении
При изменении размеров формы, ЭУ будет перемещаться за правой границей формы, или за левой границей ЭУ.

"W" - (Width) привязка ширины ЭУ
Привязка может работать в горизонтальном направлении
При изменении размеров формы, ЭУ будет изменять ширину за правой границей формы, или за левой границей ЭУ.

"LW" - (Left Width) пропорциональная привязка горизонтального положения и ширины ЭУ
Привязка может работать в горизонтальном направлении
При изменении размеров формы, ЭУ будет перемещаться за правой границей формы, или за левой границей ЭУ,
в тоже время ЭУ будет изменять ширину пропорционально ширине формы или координате левой границы ЭУ.

"L2" - (Left/2) привязка горизонтального положения ЭУ
Привязка может работать в горизонтальном направлении
При изменении размеров формы, ЭУ будет перемещаться за правой границей формы, или за левой границей ЭУ.
При этом изменене положения ЭУ будет равно половине изменения размера формы или положения "ведущего" ЭУ.

"BR" - (ВoRder) привязка границ ЭУ
Привязка может работать в обоих направлениях (горизонтальном и вертикальном)
Для этого типа привязки должно быть указано два идентификатора элемента управления через запятую. При горизонтальном
направлении для левой границы и для правой границы, и при вертикальном направлении для верхней границы и для нижней
границы. Свое положение и размер привязываемый ЭУ будет изменять так, что его границы будут следовать за границами
ЭУ к которым он привязывается.

Механизм выравнивания
В процессе работы с формой есть возможность выравнивать ЭУ относительно друг друга, для этого существует
метод Выровнять(). В него должен быть передан идентификатор выравниваемого ЭУ, выравниваемая граница (L,R,T,B),
идентификатор ЭУ по которому нужно выровнять, граница по которой нужно выровнять, и размер отступа (в пикселях,
просто значение, которое будет учтено при выравнивании).

После применения метода Выровнять() привязка всех ЭУ сбрасывается. Она должна быть задана заново, после чего должен
быть вызван метод Привязать().

Шаблон модуля формы:

Перем гРФорма;

Процедура ПриОткрытии()
    гРФорма=СоздатьОбъект("Общие.Форма.Привязка");
    гРФорма.УстановитьФорму(Форма);
    гРФорма.Привязка();
КонецПроцедуры

Процедура ПослеОткрытия()
    гРФорма.ПослеОткрытия();
КонецПроцедуры

Процедура ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота)
    гРФорма.ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота);
КонецПроцедуры
51 Ёпрст
 
31.07.13
14:51
http://rusfolder.com/37447111

если нужны еще и сплиттеры, то есть другой класс
http://www.rikcenter.ru/download/Demo_RiK_Splitters.rar

или ВК от trad
52 DES
 
31.07.13
15:43
что такое сплиттеры?
53 Масянька
 
31.07.13
15:45
(52) Хоть бы Ё спасибо сказал....
54 DES
 
31.07.13
15:51
не спеши
55 Масянька
 
31.07.13
15:51
(54) Мда.... А пожевать не надо?
56 DES
 
31.07.13
15:53
(51) а какой метод мне юзать чтоб кнопки привязать справа ТЗ ?
57 DES
 
31.07.13
15:53
(55) не флуди
58 Ёпрст
 
31.07.13
16:03
(52) элемент управления между контрролами, мышой тянешь влево/вправо или вверх/вниз для растягивания ...
59 Ёпрст
 
31.07.13
16:03
(56) я ж тебе дал класс с примером.
60 DES
 
31.07.13
16:10
(59) посмотри плиз http://prntscr.com/1ijyap
как там привязывать кнопки к ТЗ ?
61 DES
 
31.07.13
16:25
чет не догоняю я в том примере
62 Ёпрст
 
31.07.13
16:52
Ну блин..
указываешь, какой контрол за кем либо едет , либо растягивает свою границу (вертикальную и горизонтальную).. усё.
63 Ёпрст
 
31.07.13
16:54
тебе надо, многострочная, растягивать вертикально к "TH" к внопке записать, горизонтально - LW к кнопке справа, кнопку записать - TH к форме вертикально и всё, кнопку справа от тч - вертикально T к табличной части и горизонтально L к Форма..
ec`/
64 Ёпрст
 
31.07.13
16:54
усё
65 Ёпрст
 
31.07.13
16:58
можешь еще это использовать
описалово и вк тут

http://www.1cpp.ru/forum/YaBB.pl?num=1353356102/27#27

примерчик тут
http://www.1cpp.ru/forumfiles/Attachments/_demo_Splitter.zip
66 DES
 
31.07.13
17:27
все не работает, кроме ТЗ.
что я делаю не так ?

гРФорма.Привязка("кнПровести,кнОК,кнЗаписать,тхтКомментарий","T","Форма");
гРФорма.Привязка("Комментарий","T","Форма","W","Форма");
гРФорма.Привязка("тхтАвтор,кнЗакрыть","T","Форма","L","Форма");

гРФорма.Привязка("табТабель","T","Форма","W","Форма");
гРФорма.Привязка("кнДобавитьТ","T","табТабель","L","табТабель");
гРФорма.Привязка("кнИзменитьТ",,,"L","табТабель");
гРФорма.Привязка("кнДублироватьТ",,,"L","табТабель");
гРФорма.Привязка("кнУдалитьТ",,,"L","табТабель");

гРФорма.Привязка("табРабота","H","Форма","W","Форма");
гРФорма.Привязка("кнДобавитьР",,,"L","табРабота");
гРФорма.Привязка("кнИзменитьР",,,"L","табРабота");
гРФорма.Привязка("кнУдалитьР",,,"L","табРабота");

гРФорма.Привязка("табМатериал","H","Форма","W","Форма");
гРФорма.Привязка("кнДобавитьМ",,,"W","табМатериал");
гРФорма.Привязка("кнИзменитьМ",,,"W","табМатериал");
гРФорма.Привязка("кнУдалитьМ",,,"W","табМатериал");
    
гРФорма.Привязка("табМБП","T","Форма","W","Форма");
гРФорма.Привязка("кнДобавитьБ",,,"L","табМБП");
гРФорма.Привязка("кнИзменитьБ",,,"L","табМБП");
гРФорма.Привязка("кнУдалитьБ",,,"L","табМБП");

гРФорма.Привязка("МногострочнаяЧасть","T","Форма","W","Форма");

и
совсем запутался в версиях.
как в обработке defcls указать каталог  *.ert ?

//********************************************************************************
//#include "_DoubleТЧ@MD"
класс Общие.Форма.Привязка=Общие.Форма.Привязка.ert : РасширениеФормы
{
    void Привязка(Строка ИДЭлемента, Строка ТипВ="", Строка ИДЭлементаВ="", Строка ТипГ="", Строка ИДЭлементаГ="");
    void УстановитьФорму(РасширяемаяФорма);
    void ПриИзмененииРазмераОкна(ТипСобытия, ШиринаФормы, ВысотаФормы);
    void ПослеОткрытия();
    void Сбросить();
    void Выровнять(ИДЭлемента, Граница, ИДЭлементаЦель, ГраницаЦель, Отступ);
    void Привязать();
};
67 DES
 
31.07.13
17:35
(63) дешифровать не удалось
68 Ёпрст
 
31.07.13
17:35
У меня, обычно так:

в defcl.prm :


//#include Classes\Общие\Defcls.prm
//#include Classes\ЗакладкиФормы\Defcls.prm
//#include Classes\Документ\Defcls.prm
//#include Classes\Перехватчик\Defcls.prm
//#include Classes\ЦветАтрибутов\Defcls.prm
.... и т.д..

а в самих описания уже так:

в Classes\Перехватчик\Defcls.prm например, это:

класс ПерехватСобытий = ПерехватСобытий.ert{};
69 Ёпрст
 
31.07.13
17:37
(66) галку "изменять размер" в свойствах формы снял хоть, для начала ?
70 DES
 
31.07.13
17:41
(69) конечно, 3 раза!
71 Ёпрст
 
31.07.13
17:42
ну твои ошибки - ты все табличные части привязываешь к форме, а надо - друг к дружке.
72 Ёпрст
 
31.07.13
17:47
на вот, http://infostart.ru/public/20885/

я как-то писал и бросил, там автоматом генерится текст привязок формы
73 DES
 
31.07.13
18:17
это для меня недоступно скачать
74 DES
 
31.07.13
20:28
Неудачный примерчик сформирован.
таблица 3 на 3.
А как сделать так http://prntscr.com/1illv8 ?
75 Ёпрст
 
01.08.13
08:56
(74)
    гРФорма=СоздатьОбъект("Общие.Форма.Привязка");
    гРФорма.УстановитьФорму(Форма);
    
    гРФорма.Привязка("кСформировать,кЗакрыть,тПолеВвода","T","Форма");
    гРФорма.Привязка("РеквизитФормы","T","Форма","W","Форма");
    
    //гРФорма.Привязка("_в3","TH","РеквизитФормы","LW","Форма");
    //гРФорма.Привязка("_в2","BR","_в3,РеквизитФормы", "LW","_в3");
//    гРФорма.Привязка("_в1","BR","_в3,РеквизитФормы", "W","_в2");
    гРФорма.Привязка("_в1","TH","РеквизитФормы","LW","Форма");

    //гРФорма.Привязка("_б3","TH","_в3","LW","Форма");
    гРФорма.Привязка("_б2","BR","_б2,_в1", "LW","Форма");
    гРФорма.Привязка("_б1","BR","_б2,_в1", "W","_б2");

    гРФорма.Привязка("_а3","H","_б2","LW","Форма");
    гРФорма.Привязка("_а2","BR","_а3,_б2", "LW","_а3");
    гРФорма.Привязка("_а1","BR","_а3,_б2", "W","_а2");
76 Ёпрст
 
01.08.13
08:57
(73) доступно, там доступ - все стоит, без ограничений каких либо.
77 varelchik
 
01.08.13
09:58
(76) Он походу не зарегистрирован либо денег нема.
78 Ёпрст
 
01.08.13
09:59
(77) там не надо "псевдо денег", достаточно только регистрации
79 Масянька
 
01.08.13
10:11
(76) Походу ему надо - разжевать и в рот положить (сделать как надо и рассказать как работает).
80 DES
 
01.08.13
12:43
(79) да за что ты на меня обиделся?
81 DES
 
01.08.13
13:09
(78) подскажи назначение параметров Привязка("_в1","TH","РеквизитФормы","LW","Форма")
82 Ёпрст
 
01.08.13
13:10
(80) это она
83 Ёпрст
 
01.08.13
13:10
(81) см (50)
84 DES
 
01.08.13
13:18
(82) а чего так выражается ? "(17) Чего? Я ничё не понял :( "
85 DES
 
01.08.13
13:19
(83) там нет описания назначения параметров
86 Ёпрст
 
01.08.13
13:21
(85) в плане ?

открой сам класс, там и так всё понятно -
ид атрибута, тип вертикальной привязки, к чему привязываемся, тип горизонтальной привязки, к чему привязываемся.. усё.
87 Ёпрст
 
01.08.13
13:21
ну и мою поделку на ИС посмотри - там генерится текст для привязок в любой форме.
88 Ёпрст
 
01.08.13
13:22
правда, может не в той последовательности, да и пофик.. один раз настроил и забыл.
89 Масянька
 
01.08.13
13:41
(80) А с чего ты взял, что я обиделся?
Просто - не красиво (мягко скажу) - человек с тобой возится, возится, терпеливо, а ты даже "спасибо" ни разу не сказал.

PS Не, Ё - самый лучший и ТЕРПЕЛИВЫЙ учитель Мисты!!!!!!!!!!
90 DES
 
01.08.13
13:50
(89) ТЫ СТАЛ ПОВТОРЯТЬСЯ.
91 DES
 
01.08.13
14:34
(88) какого автора лучше использовать ?

//Автор: Дмитрий Ощепков     mailto:[email protected]
//Версия: 1.6

или

Анисков Александр Александрович
15.07.2010

или ?
92 Ёпрст
 
01.08.13
14:40
(91) да пофик, если сплиттеры не нужны, то достаточно версии 2.0 с модификациями от trad
если сплиттеры нужны, то взять от A'Dirks-а класс, или ВК от trad
93 Ёпрст
 
01.08.13
14:41
Ежели пользуешься классами типа ПоставщикДанных или ПрмойЗапрос, то там есть свой класс на базе перехватчика - УправлениеФормой
94 DES
 
02.08.13
00:39
(93) нифига не получается.
че то не соображу "кто на ком стоял"
Могу я скинуть куда-нить формочку чтоб ты глянул?
95 Ёпрст
 
02.08.13
09:21
ну кидай..на любую файлопомойку
96 DES
 
02.08.13
11:46
http://webfile.ru/6627836
пароль:DES
97 Ёпрст
 
02.08.13
13:33
98 Ёпрст
 
02.08.13
13:34
на вот, остальное сам понавтыкаешь, мне лень ужо..
Сплиттеры тебе довбавил, 2 штуки.
99 DES
 
02.08.13
19:09
скинул все в каталог
запускаю Док
дает
оПривязки = СоздатьОбъект("Общие.Форма.Привязки");
{Документ.Наряд.Форма.Модуль(41)}: Неудачная попытка создания объекта (Общие.Форма.Привязки)
100 DES
 
02.08.13
19:22
как происходит определение классов?
из файла defcls ?
че то не срабатывает
101 DES
 
02.08.13
19:28
Все, СПС !!!
Завелося.
102 DES
 
02.08.13
19:40
А что дает TurboMD ?
103 DES
 
02.08.13
19:50
Загрузил, а как юзать ?
104 DES
 
02.08.13
22:17
Да, кстати, а можно например нижнюю таблицу ограничить в сворачивании (когда тянут за сплиттер), ну чтобы ее кнопки не улетали вниз на другие кнопки
105 DES
 
02.08.13
23:13
пишу
    оПривязки.МинимальныеРазмеры("ТабРабота",-1,-1);
    оПривязки.МинимальныеРазмеры("ТабМатериал",-1,-1);
а сплиттер все равно их уменьшает до черты
106 Ёпрст
 
03.08.13
09:54
(102) изменять мд на лету, не сохраняя конфу и не перезагружая предприятие
(105) зарем загрузку turbomd  в глобальнике, или очисти содержимое turbomd.prm в каталоге базы.
107 DES
 
03.08.13
13:30
(106) заремил, без изменений
108 DES
 
03.08.13
13:33
как сделать чтобы средний ряд таблиц не уменьшался меньше их кнопок ?
109 Ёпрст
 
03.08.13
23:00
http://rusfolder.com/37481877

занимайся
110 DES
 
03.08.13
23:34
Ух ты, как ты это делаешь ?

!!!Огромное спасибо.
111 DES
 
03.08.13
23:36
А как можно приделать кнопку, чтобы форма сбросила настройки к "заводским" после того  как юзер ее подергал?
112 Salimbek
 
04.08.13
10:17
(111) Да легко, в "ПослеОткрытия" перебираешь все элементы формы и записываешь их размеры и положение куда-нибудь. А в обработчике своей кнопки восстанавливаешь эти размеры и размер формы.
113 DES
 
04.08.13
21:14
(109) подскажи еще как ограничить средний ряд таблиц чтобы они были не меньше чем ПриОткрытии.
114 Ёпрст
 
05.08.13
08:06
(113) А щас разве меньше ?!
115 Ёпрст
 
05.08.13
08:07
И это, ТЗ с кнопочками для редактирования этой ТЗ - моветон.
Либо прямая правка в ТЗ, либо табличное поле на форме.
116 DES
 
05.08.13
14:38
(114) Опс, не дописал... имелось ввиду по ширине.
(115) Согласен, но не допер еще...
117 DES
 
05.08.13
14:39
я так и не понял как привязывать элементы...
118 Масянька
 
05.08.13
14:49
(117) А не колышет - Ё с тобой возился - а "Спасибо" так и сказал.... Не хорошо :(
119 Ёпрст
 
05.08.13
14:54
(117) всмысле как ?

указываешь имя атрибута, далее тип привязки и к какому она атрибуту, усё..
120 Ёпрст
 
05.08.13
14:55
Хочешь "растянуть" что либо - нужно правый край атрибута и нижний привязать к форме.
хочешь просто двигать - левый край к форме или к другому атрибуту..
121 Ёпрст
 
05.08.13
15:07
(116) аналогично, как и с вертикальными кнопочками - влепить еще один контрол, до которого двигать вертикальный сплиттер
122 DES
 
05.08.13
17:27
(121) как оно понимает "до которого"
123 Ёпрст
 
05.08.13
20:25
(122) это же очевидно:
при задании сплиттера, указываются расягиваемые элементы сверху и снизу (слева и справа). Вот до этих границ и растягивается. Делаешь просто невидимый контрол, текст к примеру, вот до него и "доедет". Усё.
124 Ёпрст
 
05.08.13
20:26
а вообще, смотришь в код класса и там всё и так очевидно..
125 DES
 
05.08.13
21:58
(123) указанные (слева и справа) элементы растягиваются.
Если укажу невидимый контрол, так он тоже будет также (как и все) растягиваться.
126 Ёпрст
 
06.08.13
08:35
(125)езе подумай..
Да и наглядный пример с горизонтальными сплиттерами с "ограничением" я тебе дал.
127 DES
 
06.08.13
09:32
довавляю, вроде все делаю по аналогии, а оно вообще стопорит все растяжки.
128 Ёпрст
 
06.08.13
09:32
(127) ну занимайся в общем.
129 Ёпрст
 
06.08.13
09:33
там не так много вариантов
130 DES
 
06.08.13
09:56
а у тебя нет поблизости примерчика прямого ввода в ТЗ ?
131 Ёпрст
 
06.08.13
09:57
есть как минимум, 3 класса
132 Ёпрст
 
06.08.13
09:57
но проще табличное поле.
133 Ёпрст
 
06.08.13
10:02
http://www.1cpp.ru/forum/YaBB.pl?num=1241377896
вот, один из последних редакторов тз..
134 oslokot
 
06.08.13
10:15
(130) я делаю так:
Табличное поле. Пример редактирования колонки с типом число.
В официальном мануале 1С++ это не описано, является бетой. Работает уже давно, сбоев нет.

// ===============================
Процедура тп_Выбор(ТП, НомерСтроки, Колонка, ТипОбластиЯчейки)

    // Прямое редактирование значений
    Если ТипОбластиЯчейки =3 Тогда
           ТЗ = ТП.ПоставщикДанных.ТаблицаЗначений;
        Значение =ТЗ.ПолучитьЗначение(НомерСтроки, Колонка.Имя);
        ТП.РедактироватьЗначение(НомерСтроки, Колонка, ТипОбластиЯчейки, Значение,15,4, "ВыбЗнач", "0x00000008");
    КонецЕсли;

КонецПроцедуры // тп_Выбор


// ===============================
Процедура тп_ПриРедактированииЗначения(__тп, __стр, __кол, __рег, __знач)

    Если __рег =3 Тогда
        _тз =__тп.ПоставщикДанных.ТаблицаЗначений;
        _нк =__тп.Колонки.Индекс(__кол) +1;
        _тз.УстановитьЗначение(__стр, _нк, __знач);
        __тп.ОбновитьСтроки();
    КонецЕсли;    

КонецПроцедуры
135 Ёпрст
 
06.08.13
10:17
(134) всё описано
136 Ёпрст
 
06.08.13
10:18
137 oslokot
 
06.08.13
10:20
(136) да, но это так и осталось в бета-режиме, где-то сноска есть в этой ветке. В оф.мануале такого нет: http://www.1cpp.ru/docum/icpp/html/TableField.html
138 oslokot
 
06.08.13
10:23
+ мне немножко не нравится как оно отрабатывает редактирование агрегатов (справочники, перечисления). Делаю открытие пристройкой к месту, если это возможно.
139 Ёпрст
 
06.08.13
10:33
(137) :)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
140 Ёпрст
 
06.08.13
10:34
если че, сайт "с оф мануалом" года эдак с 2005 никем не обновляется.
141 Ёпрст
 
06.08.13
10:34
все изменения - на форуме. и вся документация там же.
142 oslokot
 
06.08.13
10:39
(141) выходит я отстал от жизни ))) ну да фик с ним. 1с++ был последним вдохом в мои клюшки. Надеюсь распрощаться ними к новому году, наконец-то. Ё, сам то перешел на снеговика?
143 DES
 
06.08.13
10:51
(133) СПС.
Опс, оказывается у меня на форме не ТЗ,
а класс МногострочнаяЧастьДоп
144 Ёпрст
 
06.08.13
11:21
(142) вынуждают.
Но снеговик - то еще редкостное г.
Одна недоделка.
145 Salimbek
 
06.08.13
20:13
(144) И не говори
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс