Вход | Регистрация


1С:Предприятие ::

Метки: 

как переделать обычную форму в УФ?

Я
   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();

КонецЦикла;

Возврат ВременнаяТаблица;

КонецФункции
-----------------------------
 
  Рекламное место пустует
   h-sp
 
1 - 12.04.17 - 09:28
(0) зачем обычная понадобилась?
   dezss
 
2 - 12.04.17 - 09:30
(1) Так наоборот же.
(0) Добавь директивы &НаСервере и &НаКлиенте и посмотри что получится.
   dezss
 
3 - 12.04.17 - 09:31
(0) Если ВременнаяТаблица1 - это таблица на форме, то сперва создаешь колонки, а потом загружаешь в нее данные, присваивать вроде нельзя.
   Troyan_IV
 
4 - 12.04.17 - 11:26
Таблицу программно на форме я создаю, а как передать значение колонок из временной таблицы(в функции в модуле объекта) не понимаю
   Troyan_IV
 
5 - 12.04.17 - 11:27
(3) Таблицу программно на форме я создаю, а как передать значение колонок из временной таблицы(в функции в модуле объекта) не понимаю
   DrShad
 
6 - 12.04.17 - 11:27
(4) с колонками программно создал!? а заполнить не смог - не верю
   h-sp
 
7 - 12.04.17 - 11:31
(4) делай функцию в форме. В модуле объекта сейчас никто не делает, это делали 20 лет назад.
   Fedor-1971
 
8 - 12.04.17 - 11:34
(6) он работал с ОФ
(5) раздели два понятия Сервер и Клиент - на сервере создаём и заполняем таблицу, на клиент она приедет вместе с формой
В МодульОбъекта без большой необходимости просто не лазь (алгоритм: перейти на сервер, преобразовать Форма - Объект, вызвать твою функцию, преобразовать обратно Объект - Форма, вернуться на клиента) во всей этой движухе только одна проблема: таблицу ты создал для формы, в объекте она не доступна, если уж очень хочешь единые функции заполнения и контроля для объекта и формы вылаживай их в МодульМенеджера
   DrShad
 
9 - 12.04.17 - 11:35
(8) так ему же нужна УФ?
   Вафель
 
10 - 12.04.17 - 11:35
юзай внешние источники и никакого кода
 
  Рекламное место пустует
   DrShad
 
11 - 12.04.17 - 11:37
(10) +100500
   Dmitry1c
 
12 - 12.04.17 - 11:39
(0) при помощи инструмента конвертации обычных форм в упраляемые
   Fedor-1971
 
13 - 12.04.17 - 11:43
(10) это ТС виднее, но у него проблема работы с УФ. Он пытается работать с ними на принципах ОФ: "всю логику запихнём в модуль объекта и будем с этим как-то жить"
   Troyan_IV
 
14 - 12.04.17 - 11:44
Задачу поставили следующую, вот держи ОФ, переделай в УФ.
Таблицу программно создаю, сам могу заполнять строки и вводить новые колонки, но колонки и строки должны сами заполнятся из функции описанной в модуле объекта, вот в этом то и стала загвостка.

Програмирую недавно, училса на УФ с ОФ познакомилса вот только что)
   Fedor-1971
 
15 - 12.04.17 - 11:46
(14) Как-то плохо учился. Так достань свою функцию в модуль формы и заполни таблицу НаСервере
   Troyan_IV
 
16 - 12.04.17 - 11:47
(10) Тоесть внешний источник? если сам на форме ручками не кодом рисуешь таблицу, одинэска орёт что не позволю тебе неуч что либо менять, учи код и сам программно создавай таблицу.
   Вафель
 
17 - 12.04.17 - 11:49
(13) но это гораздо лучше, чем всю логику на форме делать.
   Troyan_IV
 
18 - 12.04.17 - 11:49
(15) функция хоть и объявлена глобальной, но не хочет запускаться в модуле формы, мол не вижу.
   Вафель
 
19 - 12.04.17 - 11:49
(16) внешний источник + динамический список
   Troyan_IV
 
20 - 12.04.17 - 11:52
(19) Всё действо происходит во внешней обработке, в модуле объекта с SQL-базы берём данные, там же в объекте делается таблица. Но на модуль формы(той же обработки) эта функция ни как не вызывается
   Fedor-1971
 
21 - 12.04.17 - 11:59
(19) мы не знаем зачем ТС сия форма, может там ещё некая логика используется и источник данных не статичен

(18) как минимум, копию функции сделай в модуль формы.
ДанныеФормыВЗначение(<Объект>, <Тип>) - получи объект обработки, потом сможешь вызвать свою функцию, только я уже говорил, таблицаЗначений реквизит формы и в объекте отсутствует совсем (если она не описана как ТЧ обработки)
ЗначениеВДанныеФормы(<Значение>, <Объект>) - что натворил, вернёшь обратно

или РеквизитФормыВЗначение(<ИмяРеквизита>, <Тип>) и обратно
   zladenuw
 
22 - 12.04.17 - 12:01
   Вафель
 
23 - 12.04.17 - 12:05
А зачем колонки в коде создавать? разве они меняются?
Просто в оф было проще в коде, а на уф руками
   mistеr
 
24 - 12.04.17 - 12:23
(12) Подробнее можно?
   Troyan_IV
 
25 - 12.04.17 - 12:41
Процедура ПерваяКолонка()
    
    // Добавить реквизит.


ТипыРеквизита = Новый Массив;

ТипыРеквизита.Добавить(Тип("Строка"));

ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита);

НовыйРеквизит = Новый РеквизитФормы("РеквизитКолонкаПервая",    // имя

ОписаниеТиповДляРеквизита,  // тип

"ВременнаяТаблица1",  // путь

"Пенрвая",    // заголовок

Истина);    // сохраняемые данные


 

ДобавляемыеРеквизиты = Новый Массив;

ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);

ИзменитьРеквизиты(ДобавляемыеРеквизиты);


// Добавить элемент формы и связать его с реквизитом.


НовыйЭлемент = Элементы.Добавить("КолонкаПервая", Тип("ПолеФормы"), Элементы.ЭлементВременнаяТаблица1);

//Связь элемента с реквизитом и установка свойств элемента

НовыйЭлемент.ПутьКДанным = "ВременнаяТаблица1.РеквизитКолонкаПервая";

НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;

НовыйЭлемент.КнопкаОчистки = Истина;

//// Установить обработчик события.


//НовыйЭлемент.УстановитьДействие("ПриИзменении", "ОбработчикПриИзмененииКолонкиПервая");

//    
    
КонецПроцедуры




Я создаю и ручками заполняю таблицу, как мне передать в неё значение временной таблицы из функции? :'(

Извените если всех достал своим тупизмом
   h-sp
 
26 - 12.04.17 - 13:06
(25) создать руками на форме таблицу и все колонки. Зачем тупить с программным кодом? Программный код нужен, если имена колонок меняются, или типы.
   Вафель
 
27 - 12.04.17 - 13:08
ЭтаФорма.Временнаятаблица.Загрузить(Таблица)
   h-sp
 
28 - 12.04.17 - 13:08
(25) но вообще-то так надо
РеквизитФормыВЗначение("Объект").ИзТКС();
   Troyan_IV
 
29 - 12.04.17 - 13:09
(26) имена колонок и строки получаю с БД, могут меняться, так бы без проблем всё нарисовал.
   h-sp
 
30 - 12.04.17 - 13:11
(28)+ то есть на форме реквизит Объект, это типа набор каких-то структур, чтобы настоящий объект получить, надо применить РеквизитФормыВЗначение()



Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует