|
Данные из одной формы в другую | ☑ | ||
---|---|---|---|---|
0
msk-07
21.02.14
✎
14:04
|
Создал для документа еще одну форму, в эту форму передавать данные из основной формы документа?
Вижу это как-то так ДанныеИзФормы = Документы.ЗаказПоставщику.ПолучитьФормуСписка("ФормаДокумента"); ДанныеИзФормы.ОткрытьМодально(); ЭтаФорма.Закрыть(ДанныеИзФормы); Сообщить(ЭтаФорма.ТекущийЭлемент) По понимаю, что так я получаю чистую форму, а мне нужно уже данные, которые были заполнены в документе из которого я вызываю эту форму. Может кто сталкивался с такой задачей? |
|||
11
hhhh
21.02.14
✎
14:27
|
(9) а почему бредовое какое-то
ПолучитьФормуСписка("ФормаДокумента") ?? вы форму списка хотите или форму документа? |
|||
12
msk-07
21.02.14
✎
14:29
|
(11) нужны данные из документа.
|
|||
13
zladenuw
21.02.14
✎
14:31
|
(12) так получитьформу("формадокумента") это раз.
ну так делаешь сохранение и передаешь структуру. |
|||
14
msk-07
22.02.14
✎
20:02
|
Я все еще не решил проблему, может кто все таки сталкивался.
Вот есть документ уже заполненный, я хочу в дополнительную форму записать еще информацию и из этой доп.формы вывести на печать данные, которые я только заполнил и данные, которые были ранее заполнены в документе. |
|||
15
Torquader
22.02.14
✎
20:05
|
У нас есть документ, в котором все данные, мы хотим открыть форму, а потом закрыть наш документ - так ?
|
|||
16
msk-07
22.02.14
✎
20:06
|
Нет, мы заполнили документ, записали. Потом открываем дополнительную форму из этого документа, дополняем ее какими то сведениями и из этой доп формы я хочу распечатать документ. То есть мне нужны данные как из самого документа и из новой формы.
|
|||
17
Torquader
22.02.14
✎
20:08
|
(16) Если документ записан, то что мешает просто передать на него ссылку и там по ссылке получить все данные документа ?
|
|||
18
msk-07
22.02.14
✎
20:11
|
пробовал запросом.
Процедура ПечатьНажатие(Элемент) Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийДокумент",ДокументОбъект); Запрос.Текст =" |ВЫБРАТЬ | Номер, | Дата, | ДоговорКонтрагента, | Организация, | Контрагент КАК Получатель, | Организация КАК Руководители, | Организация КАК Поставщик, | СуммаДокумента, | ВалютаДокумента, | УчитыватьНДС, | СуммаВключаетНДС |ИЗ | Документ.ЗаказПоставщику КАК ЗаказПоставщику | |ГДЕ | ЗаказПоставщику.Ссылка = &ТекущийДокумент"; Запрос.Выполнить(); КонецПроцедуры но выводится ошибка Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. ЗаказПоставщику.Ссылка <<?>>= &ТекущийДокумент |
|||
19
zladenuw
22.02.14
✎
20:14
|
так ссылку. а не объект передавай
|
|||
20
Torquader
22.02.14
✎
20:15
|
ДокументОбъект.Ссылка
|
|||
21
msk-07
22.02.14
✎
20:24
|
Данные не выводятся. В отладчике тип неопределенно. Может это нужно делать в модуле объекта. а не в форме?
|
|||
22
Torquader
22.02.14
✎
20:26
|
Получай из объекта ссылку в самом документе и передавай в форму уже ссылку - если передаёшь объект, а потом его закрываешь, то есть вероятность, что в переменной будет ссылка на то, чего больше нет.
|
|||
23
msk-07
22.02.14
✎
20:33
|
Могу ли я сделать так, в общем модуле
Функция ПолучитьДанные() Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка); Запрос.Текст =" |ВЫБРАТЬ | Номер, | Дата, | ДоговорКонтрагента, | Организация, | Контрагент КАК Получатель, | Организация КАК Руководители, | Организация КАК Поставщик, | СуммаДокумента, | ВалютаДокумента, | УчитыватьНДС, | СуммаВключаетНДС |ИЗ | Документ.ЗаказПоставщику КАК ЗаказПоставщику | |ГДЕ | ЗаказПоставщику.Ссылка = &ТекущийДокумент"; Данные = Запрос.Выполнить().Выбрать(); Сообщить(Данные.Получатель); КонецФункции А в модуле формы Процедура ПечатьНажатие(Элемент) ПолучитьДанные(); КонецПроцедуры Просто тогда возникает ошибка о том, что Процедура или функция с указанным именем не определена (ПолучитьДанные) <<?>>ПолучитьДанные(); (Проверка: Толстый клиент (обычное приложение)) |
|||
24
Torquader
22.02.14
✎
20:35
|
Имя модуля перед именем процедуры - это раз.
Во-вторых, как процедура узнает, что такое "ЭтотОбъект.Ссылка" - ? |
|||
25
msk-07
22.02.14
✎
20:40
|
(24)
Я просто не селен во всех этих тонкостях, а разве надо писать перед функцией в форме, модель объекта? то есть я же в самам документе описываю функцию ПолучитьДанные() |
|||
26
msk-07
22.02.14
✎
20:56
|
Я просто не селен во всех этих тонкостях, а разве надо писать перед функцией в форме, модель объекта? то есть я же в самом документе описываю функцию ПолучитьДанные()
|
|||
27
Torquader
22.02.14
✎
20:57
|
Если функция в модуле документа, то к ней через ДокументОбъект нужно обращаться - то есть или передавать объект или получать объект из ссылки.
|
|||
28
msk-07
22.02.14
✎
21:07
|
ага, с этим разобрался, а вот с остальным не понятно,у меня так данные и не выводятся...Наверное я как то не так обращаюсь через ссылку
|
|||
29
msk-07
22.02.14
✎
21:08
|
все таки оставил вот так Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка)
|
|||
30
Torquader
22.02.14
✎
21:14
|
Есть такая вещь, как конструктор запроса - в ней его легко построить.
Здесь же желательно перед полями указать откуда их берут. То есть вместо Номер написать ЗаказПоставщику.Номер - должно помочь. |
|||
31
msk-07
22.02.14
✎
21:23
|
К сожалению не помогло...
|
|||
32
zladenuw
22.02.14
✎
21:28
|
читай книгу про УФ
|
|||
33
msk-07
22.02.14
✎
21:32
|
Но так не правильно, да?
Запрос.УстановитьПараметр("ТекущийДокумент",ЭтотОбъект.Ссылка); |
|||
34
Torquader
22.02.14
✎
21:32
|
Я даже и не знаю, что ещё сказать - "отладчик вам в помощь".
|
|||
35
msk-07
22.02.14
✎
21:33
|
То есть так нельзя получить данные из текущего документа в модуле самого документа?
|
|||
36
Torquader
22.02.14
✎
21:33
|
(35) Ну, а что нельзя например ЭтотОбъект.Номер ?
|
|||
37
Torquader
22.02.14
✎
21:34
|
У объекта, в модуле которого вы есть - все поля документа доступны.
|
|||
38
msk-07
22.02.14
✎
21:39
|
Пробовал вот так вот сделать
Функция ПолучитьДанные() Экспорт Данные = Контрагент.Наименование; КонецФункции Строка пустая.. |
|||
39
Torquader
22.02.14
✎
21:41
|
Функция ПолучитьДанные в модуле документа ?
|
|||
40
msk-07
22.02.14
✎
21:41
|
Да
|
|||
41
Torquader
22.02.14
✎
21:44
|
(40) Тогда точку останова на функцию и смотреть переменные - может быть - так станет яснее.
Например, что в функции слово Возврат пишут. |
|||
42
msk-07
22.02.14
✎
21:47
|
Контрагент.Наименование "" Строка
вот что дала отладка. Очень все странно. |
|||
43
msk-07
22.02.14
✎
21:57
|
Даже вот так вот попробовал в отладчике
ЭтотОбъект.Ссылка.Контрагент.Наименование "" Строка |
|||
44
msk-07
22.02.14
✎
21:57
|
Все время пустота
|
|||
45
zladenuw
22.02.14
✎
22:02
|
а в документе заполнено ?
|
|||
46
zladenuw
22.02.14
✎
22:02
|
ты точно в модуле документа вызываешь
|
|||
47
msk-07
22.02.14
✎
22:04
|
Да, точно в документе и точно заполнено. единственно нужно ли Функция ПолучитьДанные() Экспорт
Экспорт писать? в принципе же это уже на другое влияет? |
|||
48
msk-07
22.02.14
✎
22:05
|
В модуле объекта если быть точнее я описываю эту функцию.
|
|||
49
Torquader
22.02.14
✎
22:09
|
Точно не в модуле менеджера ?
|
|||
50
Torquader
22.02.14
✎
22:10
|
Ставишь точку останова и смотришь в отладчике какой тип имеет ЭтотОбъект.
|
|||
51
msk-07
22.02.14
✎
22:11
|
Да я уже вот так написал.
Функция ПолучитьДанные() Экспорт Данные = ЭтотОбъект.Номер; Возврат Данные ; КонецФункции |
|||
52
Torquader
22.02.14
✎
22:12
|
Потом, документ как из обработки получаем ?
|
|||
53
msk-07
22.02.14
✎
22:13
|
(50)
выражение тип ЭтотОбъект ДокументОбъект.ЗаказПоставщику |
|||
54
Torquader
22.02.14
✎
22:15
|
(53) А что показывает ЭтотОбъект.Дата ?
Есть подозрение, что вы к новому документу обращаетесь. |
|||
55
Torquader
22.02.14
✎
22:17
|
Как вы из обработки вызываете процедуру в модуле документа ?
Показывайте. |
|||
56
msk-07
22.02.14
✎
22:19
|
Точно
вот что дала дата ЭтотОбъект.Ссылка.Дата 01.01.0001 0:00:00 Дата |
|||
57
Torquader
22.02.14
✎
22:20
|
(56) Ай,Ай,Ай, Документ-то по дороге потеряй!!!
|
|||
58
msk-07
22.02.14
✎
22:21
|
(57) не понял...
|
|||
59
Torquader
22.02.14
✎
22:22
|
(58) Вы документ в обработке откуда взяли, чтобы его функцию вызвать ?
|
|||
60
msk-07
22.02.14
✎
22:24
|
Получается не от куда.
То есть я в модуле объекта пишу Функция ПолучитьДанные() Экспорт Данные = ЭтотОбъект.Ссылка.Дата; Возврат Данные ; КонецФункции и все |
|||
61
Torquader
22.02.14
✎
22:24
|
(60) Здесь всё правильно.
Вот где вы функцию "ПолучитьДанные" вызываете ? |
|||
62
msk-07
22.02.14
✎
22:25
|
В новой форме.
Процедура ПечатьНажатие(Элемент) ДокументОбъект.ПолучитьДанные(); КонецПроцедуры |
|||
63
Torquader
22.02.14
✎
22:27
|
Новая форма - это форма документа ?
|
|||
64
msk-07
22.02.14
✎
22:27
|
и здесь посмотрев в отладчике он выдает
ДокументОбъект.ПолучитьДанные() 01.01.0001 0:00:00 Дата |
|||
65
msk-07
22.02.14
✎
22:28
|
Да другая форма уже у заполненного документа.
|
|||
66
Torquader
22.02.14
✎
22:28
|
(64) Ответь на (63), то, что будет (64) никто и не сомневается.
|
|||
67
Torquader
22.02.14
✎
22:28
|
(65) Как ты её открываешь - уверен, что ты открываешь форму и создаёшь новый документ.
|
|||
68
Torquader
22.02.14
✎
22:30
|
Да я уже в (0) вижу - вы создаёте новый документ.
Нужно открывать так: лфНовая=ЭтотОбъект.ПолучитьФорму("НоваяФормаДокумента"); лфНовая.Открыть(); |
|||
69
msk-07
22.02.14
✎
22:31
|
Блин....А как проверить..Я тупо создал форму, на сделал кнопку Печать и пока к ней прицепил процедуру
Процедура ПечатьНажатие(Элемент) ДокументОбъект.ПолучитьДанные(); КонецПроцедуры |
|||
70
Torquader
22.02.14
✎
22:31
|
(69) В форме всё правильно, с кнопкой тоже, но открыта она неправильно.
|
|||
71
msk-07
22.02.14
✎
22:31
|
(68) Это где такое описать?
|
|||
72
Torquader
22.02.14
✎
22:33
|
(71) Там где форму открываешь, наверное.
|
|||
73
msk-07
22.02.14
✎
22:35
|
Новую форму? или старую?
|
|||
74
Torquader
22.02.14
✎
22:36
|
(73) Новую, конечно, старую-то до тебя открыли.
|
|||
75
msk-07
22.02.14
✎
22:38
|
Я в модуле формы написал следующее
Процедура ПечатьНажатие(Элемент) ДокументОбъект.ПолучитьДанные(); КонецПроцедуры Процедура ПриОткрытии() лфНовая=ДокументОбъект.ПолучитьФорму("ФормаСчетЗаказа"); лфНовая.Открыть(); КонецПроцедуры И теперь {Документ.ЗаказПоставщику.Форма.ФормаСчетЗаказа.Форма(8)}: Ошибка при вызове метода контекста (ПолучитьФорму) лфНовая=ДокументОбъект.ПолучитьФорму("ФормаСчетЗаказа"); по причине: Документ не выбран |
|||
76
Torquader
22.02.14
✎
22:38
|
То есть получать форму для открытия нужно у нашего документа, чтобы она была с ним связана.
Когда мы просто получаем форму - система автоматом к ней создаёт новый документ, что у вас и происходит. |
|||
77
Torquader
22.02.14
✎
22:38
|
При открытии одной формы пытаться открыть другую - зачем ?
|
|||
78
Torquader
22.02.14
✎
22:39
|
ФормаСчетаЗаказа как открывалась раньше ?
|
|||
79
Torquader
22.02.14
✎
22:41
|
Просто нужно понимание, что есть объект, который представляет документ со всеми его данными и формами, а есть форма - у которой модуль формы и элементы управления, но они ссылаются на документОбъект.
|
|||
80
zladenuw
22.02.14
✎
22:46
|
(79) я думаю. этого нет
|
|||
81
Torquader
22.02.14
✎
22:48
|
(80) Чего нет ?
|
|||
82
msk-07
22.02.14
✎
22:49
|
Подправил, так
В основной форме при нажатие на кнопку написал Процедура Кнопка1Нажатие(Элемент) Форма=ДокументОбъект.ПолучитьФорму("ФормаСчетЗаказа"); Форма.Открыть(); КонецПроцедуры В модуле документа Функция ПолучитьДанные() Экспорт Данные = ЭтотОбъект.Ссылка.Дата; Возврат Данные ; КонецФункции В модуле новой формы Процедура ПечатьНажатие(Элемент) ДокументОбъект.ПолучитьДанные(); КонецПроцедуры А при отладки все равно ЭтотОбъект.Ссылка.Дата 01.01.0001 0:00:00 Дата |
|||
83
Torquader
22.02.14
✎
22:51
|
Теперь вытираем Ссылка так как у вас, наверняка, он ещё не сохранён.
|
|||
84
Torquader
22.02.14
✎
22:51
|
ЭтотОбъект.Дата - что показывает ?
|
|||
85
Torquader
22.02.14
✎
22:52
|
Ссылку предлагали использовать так как в любое место можно передать ссылку на запись в базе с данными документа, но в данном случае, она не нужна.
|
|||
86
msk-07
22.02.14
✎
22:57
|
ЭтотОбъект.Дата 01.01.0001 0:00:00 Дата
|
|||
87
msk-07
22.02.14
✎
22:58
|
Даже вот так
Функция ПолучитьДанные() Экспорт Данные = Дата; Возврат Данные ; КонецФункции Дата 01.01.0001 0:00:00 Дата |
|||
88
Torquader
22.02.14
✎
23:03
|
Процедура Кнопка1Нажатие(Элемент)
Форма=ЭтотОбъект.ПолучитьФорму("ФормаСчетЗаказа"); Форма.Открыть(); КонецПроцедуры |
|||
89
Torquader
22.02.14
✎
23:04
|
И здесь же вставить Сообщить(ЭтотОбъект.Дата)
|
|||
90
b159263
22.02.14
✎
23:04
|
(0) Осуществляй обмен данными через временное хранилище. А если есть возможность используй доступные параметры расширения формы.
|
|||
91
msk-07
22.02.14
✎
23:06
|
вот все верно берет что нужноо
а дальше дату обнуляет |
|||
92
Torquader
22.02.14
✎
23:12
|
Знаешь - у меня всё это работает и данные документа в новой форме доступны.
Смотри: Есть основная форма документа (назовём её ФормаОс) Есть дополнительная форма документа (пусть будет ФормаДоп) В основной форме есть кнопка "ОткрытьВторую" В процедуре Процедура ОсновныеДействияФормыДругаяФорма(Кнопка) // Вставить содержимое обработчика. лФорма=ЭтотОбъект.ПолучитьФорму("ФормаДокумента1"); лФорма.Открыть(); лФорма=НЕОПРЕДЕЛЕНО; ЭтаФорма.Закрыть(); КонецПроцедуры При нажатии на кнопку появляется новая форма документа, а старая закрывается, причём в новой данные документа, даже не сохранённые. |
|||
93
Torquader
22.02.14
✎
23:12
|
У вас режим обычный или управляемое приложение ?
|
|||
94
Torquader
22.02.14
✎
23:17
|
Кстати, самый главный вопрос - зачем вообще мы лезем в модуль документа, если у нас форма его самого - в этой форме через ЭтотОбъект всё доступно.
|
|||
95
Torquader
22.02.14
✎
23:18
|
Процедура ПечатьНажатие(Элемент)
Сообщить(ЭтотОбъект.Дата); КонецПроцедуры Что если так ? |
|||
96
msk-07
22.02.14
✎
23:18
|
Режим обычный
|
|||
97
Torquader
22.02.14
✎
23:19
|
Тогда открываешь как в (92)
И в ней самой через ЭтотОбъект получаешь все данные. |
|||
98
msk-07
22.02.14
✎
23:21
|
Скажи у тебя же вот так все?
В модуле основной формы Процедура Кнопка1Нажатие(Элемент) лФорма=ЭтотОбъект.ПолучитьФорму("ФормаСчетЗаказа"); лФорма.Открыть(); лФорма=НЕОПРЕДЕЛЕНО; ЭтаФорма.Закрыть(); КонецПроцедуры В модуле документа Функция ПолучитьДанные() Экспорт Данные = ЭтотОбъект.Дата; Возврат Данные ; КонецФункции в модуле вспомогательной формы Процедура ПечатьНажатие(Элемент) ДокументОбъект.ПолучитьДанные(); КонецПроцедуры |
|||
99
Torquader
22.02.14
✎
23:22
|
В модуле вспомогательной формы документа
Процедура Нажатие(Элемент) Сообщить(ЭтотОбъект.Дата); КонецПроцедуры Показывает дату. |
|||
100
Torquader
22.02.14
✎
23:23
|
Функция "ПолучитьДанные" в данном случае нафиг не нужна - она была бы нужна, если бы вспомогательная форма была бы не формой документа, а формой обработки.
|
|||
101
msk-07
22.02.14
✎
23:24
|
а мне выдает ошибку
{Документ.ЗаказПоставщику.Форма.ФормаСчетЗаказа.Форма(5,10)}: Переменная не определена (ЭтотОбъект) Сообщить(<<?>>ЭтотОбъект.Дата); (Проверка: Толстый клиент (обычное приложение)) |
|||
102
msk-07
22.02.14
✎
23:24
|
если
Процедура ПечатьНажатие(Элемент) //ДокументОбъект.ПолучитьДанные(); Сообщить(ЭтотОбъект.Дата); КонецПроцедуры |
|||
103
msk-07
22.02.14
✎
23:26
|
а если вот так
Процедура ПечатьНажатие(Элемент) //ДокументОбъект.ПолучитьДанные(); Сообщить(ДокументОбъект.ЭтотОбъект.Дата); КонецПроцедуры то 01.01.0001 0:00:00 |
|||
104
Torquader
22.02.14
✎
23:27
|
Поди у вас дополнительная форма документа - в ней просто этот объект не определён.
Нужно из неё делать "основную форму". |
|||
105
Torquader
22.02.14
✎
23:28
|
В дополнительную форму нужно при открытии передавать ДокументОбъект, чтобы им там пользоваться.
|
|||
106
Torquader
22.02.14
✎
23:29
|
То есть в модуле формы определить переменную (Экспорт), которую при открытии установить равной ЭтотОбъект.
|
|||
107
Torquader
22.02.14
✎
23:30
|
В общем, я - спать.
Удачи и успехов. |
|||
108
msk-07
22.02.14
✎
23:31
|
(107) спасибо огромное!!!!
|
|||
109
msk-07
23.02.14
✎
01:07
|
(106)
Подскажи пожалуйста, в какой именно форме эту переменную определять в основной или дополнительной? |
|||
110
Torquader
23.02.14
✎
13:20
|
(109) В новой форме переменная Экспорт.
В старой - не забыть ей присвоить ЭтотОбъект. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |