Имя: Пароль:
1C
1С v8
Данные из одной формы в другую
,
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) В новой форме переменная Экспорт.
В старой - не забыть ей присвоить ЭтотОбъект.