![]() |
|
как переделать обычную форму в УФ? | ☑ | ||
---|---|---|---|---|
0
Troyan_IV
12.04.17
✎
09:25
|
Помогите переделать обычную форму в управляемую
код в модуле формы: Процедура СфорОстат(Элемент) ВременнаяТаблица1=ИзТКС(); ЭлементыФормы.ВременнаяТаблица1.СоздатьКолонки(); КонецПроцедуры ---------------------------------------------------------- В модуле Объекта: Функция ИзТКС() экспорт ПодключБаза(); НаборЗаписей = Новый ComObject("ADODB.RecordSet"); Попытка Организ="""МОРИОН"""; Команда = Новый COMОбъект("ADODB.Command"); Команда.CommandTimeout = 600; Команда.ActiveConnection = Connection; Команда.CommandText ="SEL ECT ComponentName as component,Sum(Quantity) Количество FR OM mydata_common_db.mydbcarrview_10.carrier_magname | GROUP BY ComponentName order by ComponentName"; НаборЗаписей = Команда.Execute(); //Состояние("Данные получены."); Исключение Сообщить("Нет данных."); //Возврат 0; КонецПопытки; ВременнаяТаблица = Новый ТаблицаЗначений; //Добавление колонок во временную таблицу Для НомерСтолбца = 0 По НаборЗаписей.Fields.Count - 1 Цикл ИмяСтолбца = НаборЗаписей.Fields.Item(НомерСтолбца).Name; ВременнаяТаблица.Колонки.Добавить(ИмяСтолбца); КонецЦикла; Пока НЕ НаборЗаписей.EOF Цикл НоваяСтрока = ВременнаяТаблица.Добавить(); Для НомерСтолбца = 0 По НаборЗаписей.Fields.Count-1 Цикл Попытка НоваяСтрока.Установить(НомерСтолбца, СокрЛП(НаборЗаписей.Fields(НомерСтолбца).Value)); Исключение Сообщить("Нет данных."); КонецПопытки; КонецЦикла; НаборЗаписей.MoveNext(); КонецЦикла; Возврат ВременнаяТаблица; КонецФункции ----------------------------- |
|||
1
h-sp
12.04.17
✎
09:28
|
(0) зачем обычная понадобилась?
|
|||
2
dezss
12.04.17
✎
09:30
|
(1) Так наоборот же.
(0) Добавь директивы &НаСервере и &НаКлиенте и посмотри что получится. |
|||
3
dezss
12.04.17
✎
09:31
|
(0) Если ВременнаяТаблица1 - это таблица на форме, то сперва создаешь колонки, а потом загружаешь в нее данные, присваивать вроде нельзя.
|
|||
4
Troyan_IV
12.04.17
✎
11:26
|
Таблицу программно на форме я создаю, а как передать значение колонок из временной таблицы(в функции в модуле объекта) не понимаю
|
|||
5
Troyan_IV
12.04.17
✎
11:27
|
(3) Таблицу программно на форме я создаю, а как передать значение колонок из временной таблицы(в функции в модуле объекта) не понимаю
|
|||
6
DrShad
12.04.17
✎
11:27
|
(4) с колонками программно создал!? а заполнить не смог - не верю
|
|||
7
h-sp
12.04.17
✎
11:31
|
(4) делай функцию в форме. В модуле объекта сейчас никто не делает, это делали 20 лет назад.
|
|||
8
Fedor-1971
12.04.17
✎
11:34
|
(6) он работал с ОФ
(5) раздели два понятия Сервер и Клиент - на сервере создаём и заполняем таблицу, на клиент она приедет вместе с формой В МодульОбъекта без большой необходимости просто не лазь (алгоритм: перейти на сервер, преобразовать Форма - Объект, вызвать твою функцию, преобразовать обратно Объект - Форма, вернуться на клиента) во всей этой движухе только одна проблема: таблицу ты создал для формы, в объекте она не доступна, если уж очень хочешь единые функции заполнения и контроля для объекта и формы вылаживай их в МодульМенеджера |
|||
9
DrShad
12.04.17
✎
11:35
|
(8) так ему же нужна УФ?
|
|||
10
Вафель
12.04.17
✎
11:35
|
юзай внешние источники и никакого кода
|
|||
11
DrShad
12.04.17
✎
11:37
|
(10) +100500
|
|||
12
Dmitry1c
12.04.17
✎
11:39
|
(0) при помощи инструмента конвертации обычных форм в упраляемые
|
|||
13
Fedor-1971
12.04.17
✎
11:43
|
(10) это ТС виднее, но у него проблема работы с УФ. Он пытается работать с ними на принципах ОФ: "всю логику запихнём в модуль объекта и будем с этим как-то жить"
|
|||
14
Troyan_IV
12.04.17
✎
11:44
|
Задачу поставили следующую, вот держи ОФ, переделай в УФ.
Таблицу программно создаю, сам могу заполнять строки и вводить новые колонки, но колонки и строки должны сами заполнятся из функции описанной в модуле объекта, вот в этом то и стала загвостка. Програмирую недавно, училса на УФ с ОФ познакомилса вот только что) |
|||
15
Fedor-1971
12.04.17
✎
11:46
|
(14) Как-то плохо учился. Так достань свою функцию в модуль формы и заполни таблицу НаСервере
|
|||
16
Troyan_IV
12.04.17
✎
11:47
|
(10) Тоесть внешний источник? если сам на форме ручками не кодом рисуешь таблицу, одинэска орёт что не позволю тебе неуч что либо менять, учи код и сам программно создавай таблицу.
|
|||
17
Вафель
12.04.17
✎
11:49
|
(13) но это гораздо лучше, чем всю логику на форме делать.
|
|||
18
Troyan_IV
12.04.17
✎
11:49
|
(15) функция хоть и объявлена глобальной, но не хочет запускаться в модуле формы, мол не вижу.
|
|||
19
Вафель
12.04.17
✎
11:49
|
(16) внешний источник + динамический список
|
|||
20
Troyan_IV
12.04.17
✎
11:52
|
(19) Всё действо происходит во внешней обработке, в модуле объекта с SQL-базы берём данные, там же в объекте делается таблица. Но на модуль формы(той же обработки) эта функция ни как не вызывается
|
|||
21
Fedor-1971
12.04.17
✎
11:59
|
(19) мы не знаем зачем ТС сия форма, может там ещё некая логика используется и источник данных не статичен
(18) как минимум, копию функции сделай в модуль формы. ДанныеФормыВЗначение(<Объект>, <Тип>) - получи объект обработки, потом сможешь вызвать свою функцию, только я уже говорил, таблицаЗначений реквизит формы и в объекте отсутствует совсем (если она не описана как ТЧ обработки) ЗначениеВДанныеФормы(<Значение>, <Объект>) - что натворил, вернёшь обратно или РеквизитФормыВЗначение(<ИмяРеквизита>, <Тип>) и обратно |
|||
22
zladenuw
12.04.17
✎
12:01
|
||||
23
Вафель
12.04.17
✎
12:05
|
А зачем колонки в коде создавать? разве они меняются?
Просто в оф было проще в коде, а на уф руками |
|||
24
mistеr
12.04.17
✎
12:23
|
(12) Подробнее можно?
|
|||
25
Troyan_IV
12.04.17
✎
12:41
|
Процедура ПерваяКолонка()
// Добавить реквизит. ТипыРеквизита = Новый Массив; ТипыРеквизита.Добавить(Тип("Строка")); ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита); НовыйРеквизит = Новый РеквизитФормы("РеквизитКолонкаПервая", // имя ОписаниеТиповДляРеквизита, // тип "ВременнаяТаблица1", // путь "Пенрвая", // заголовок Истина); // сохраняемые данные ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); ИзменитьРеквизиты(ДобавляемыеРеквизиты); // Добавить элемент формы и связать его с реквизитом. НовыйЭлемент = Элементы.Добавить("КолонкаПервая", Тип("ПолеФормы"), Элементы.ЭлементВременнаяТаблица1); //Связь элемента с реквизитом и установка свойств элемента НовыйЭлемент.ПутьКДанным = "ВременнаяТаблица1.РеквизитКолонкаПервая"; НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; НовыйЭлемент.КнопкаОчистки = Истина; //// Установить обработчик события. //НовыйЭлемент.УстановитьДействие("ПриИзменении", "ОбработчикПриИзмененииКолонкиПервая"); // КонецПроцедуры Я создаю и ручками заполняю таблицу, как мне передать в неё значение временной таблицы из функции? :'( Извените если всех достал своим тупизмом |
|||
26
h-sp
12.04.17
✎
13:06
|
(25) создать руками на форме таблицу и все колонки. Зачем тупить с программным кодом? Программный код нужен, если имена колонок меняются, или типы.
|
|||
27
Вафель
12.04.17
✎
13:08
|
ЭтаФорма.Временнаятаблица.Загрузить(Таблица)
|
|||
28
h-sp
12.04.17
✎
13:08
|
(25) но вообще-то так надо
РеквизитФормыВЗначение("Объект").ИзТКС(); |
|||
29
Troyan_IV
12.04.17
✎
13:09
|
(26) имена колонок и строки получаю с БД, могут меняться, так бы без проблем всё нарисовал.
|
|||
30
h-sp
12.04.17
✎
13:11
|
(28)+ то есть на форме реквизит Объект, это типа набор каких-то структур, чтобы настоящий объект получить, надо применить РеквизитФормыВЗначение()
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |