Имя: Пароль:
1C
1С v8
как переделать обычную форму в УФ?
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)+ то есть на форме реквизит Объект, это типа набор каких-то структур, чтобы настоящий объект получить, надо применить РеквизитФормыВЗначение()