Общаят форма и макет документа

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

#1
Здравствуйте...
Типовая конфигурация Бухгалтерия 8
Создан дополнительный макет АктПриемаПередачиПрав в документе РеализацияТоваровУслуг,
сейчас необходимо чтобы при выборе этой печатной формы, открывалась сначала форма из Общих форм, на которой будут дополнительные данные для этой печатной формы, которых нет в этом документе. И после введения данных, уже выводилась печатная форма с всеми данными... то есть данными из Макета и из Общей формы.

Вопрос в чем... общая форма открывается,
а вот как из общей формы вывести макет документа не знаю... да и так чтоб еще и подцепил дополнительные данные из это формы. Подскажите пожалуйста =)
 
R

Roman

#2
Здравствуйте...
Типовая конфигурация Бухгалтерия 8
Создан дополнительный макет АктПриемаПередачиПрав в документе РеализацияТоваровУслуг,
сейчас необходимо чтобы при выборе этой печатной формы, открывалась сначала форма из Общих форм, на которой будут дополнительные данные для этой печатной формы, которых нет в этом документе. И после введения данных, уже выводилась печатная форма с всеми данными... то есть данными из Макета и из Общей формы.

Вопрос в чем... общая форма открывается,
а вот как из общей формы вывести макет документа не знаю... да и так чтоб еще и подцепил дополнительные данные из это формы. Подскажите пожалуйста =)
А по чему бы не попробовать в сами ячейки макета, там где надо чтоб значение подставлялось, написать процедуру или ссылку на необходимый объект.
 

Darlock

Well-known member
04.01.2008
560
1
#3
Код:
Функция Печать(.....)
<...>

ОбщФорма = ПолучитьОбщуюФорму(ИмяФормы);
ДопПараметры = ОбщФорма.ОткрытьМодально();

<...>
КонецФункции

МодульФормы

Процедура ПриЗакрытии()

ДопПараметры = Новый Структура();

ДопПараметры.Вставить(ИмяРеквизита, ЗначениеРеквизита);
...

Закрыть(ДопПараметры);
КонецПроцедуры

В общей форме заполнение структуры и передачи его обратно в печать можно использовать цикл, тогда код немного изменится. Это как вариант, дальше от религии зависит.

Добавлено:
А по чему бы не попробовать в сами ячейки макета, там где надо чтоб значение подставлялось, написать процедуру или ссылку на необходимый объект.
Это не 7.7 и в макет вызов процедуры/функции не впишешь.
 
G

Guest

#4
Код:
Функция Печать(.....)
<...>

ОбщФорма = ПолучитьОбщуюФорму(ИмяФормы);
ДопПараметры = ОбщФорма.ОткрытьМодально();

<...>
КонецФункции

МодульФормы

Процедура ПриЗакрытии()

ДопПараметры = Новый Структура();

ДопПараметры.Вставить(ИмяРеквизита, ЗначениеРеквизита);
...

Закрыть(ДопПараметры);
КонецПроцедуры

В общей форме заполнение структуры и передачи его обратно в печать можно использовать цикл, тогда код немного изменится. Это как вариант, дальше от религии зависит.

Добавлено:

Это не 7.7 и в макет вызов процедуры/функции не впишешь.

А можно еще чуть разжевать... для особо одаренных) меня то есть. С открытием всё замечательно выходит.Спасибо.
А вот хотелось бы чуть по точнее о том как дополнительные данные из общей формы передать в макет....
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#5
как дополнительные данные из общей формы передать в макет....
на форме есть переменные, и им уже присвоенно значение. соотвественно в макете есть тоже переменные (параметры). вот и нужно сделать переприсвоение типа:
макет.параметр.названиепараметра = форма.реквизит
 
G

Guest

#6
на форме есть переменные, и им уже присвоенно значение. соотвественно в макете есть тоже переменные (параметры). вот и нужно сделать переприсвоение типа:
макет.параметр.названиепараметра = форма.реквизит
Это в процедуре печати макета документа... ?
 

Darlock

Well-known member
04.01.2008
560
1
#7
Да. Вызов делается в процедуре печати.

Добавлено: Я делал так (обработчик не "ПриЗакрытии", просто кнопка на форме):

А это пишется в форме которую открывали:
Код:
Закрыть(ТекстОбработки);
Добавлено: А ТекстОбработки - просто строка, которая возвращалась в переменную открывающую модальную форму "ДопПараметры = Форма.ОткрытьМодально();"

Добавлено:
на форме есть переменные, и им уже присвоенно значение. соотвественно в макете есть тоже переменные (параметры). вот и нужно сделать переприсвоение типа:
макет.параметр.названиепараметра = форма.реквизит
Если вызов печати из модуля формы, то у вас будет возможность получить значения реквизитов формы. Если же печать из модуля объекта, то варианта 2:
1) никак, там доступны только реквизиты объекта - без вызова печати из модуля формы и передачи параметра "ЭтаФорма";

Модуль объекта:

Код:
Функция Печать() Экспорт
<...>
КонецФункции
Модуль формы:

Код:
Процедура КнопкаПечатьНажатие(Элемент)

Печать();

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

2) В функцию печати передать параметр "ЭтаФорма" и тогда реквизиты формы будут доступны в модуле объекта (не рекомендуется делать!)

Модуль объекта:

Код:
Функция Печать(Форма) Экспорт
<...>
КонецФункции
Модуль формы:

Код:
Процедура КнопкаПечатьНажатие(Элемент)

Печать(ЭтаФорма);

КонецПроцедуры;
P.S. не рекомендуется делать потому, что передача формы как параметра - тяжеловато отражается на производительности системы.
P.P.S. Количество параметров функции "Печать()" взял равное 0 для наглядности примера.
 
G

Guest

#8
Да. Вызов делается в процедуре печати.

Добавлено: Я делал так (обработчик не "ПриЗакрытии", просто кнопка на форме):

А это пишется в форме которую открывали:
Код:
Закрыть(ТекстОбработки);
Добавлено: А ТекстОбработки - просто строка, которая возвращалась в переменную открывающую модальную форму "ДопПараметры = Форма.ОткрытьМодально();"

Добавлено:

Если вызов печати из модуля формы, то у вас будет возможность получить значения реквизитов формы. Если же печать из модуля объекта, то варианта 2:
1) никак, там доступны только реквизиты объекта - без вызова печати из модуля формы и передачи параметра "ЭтаФорма";

Модуль объекта:

Код:
Функция Печать() Экспорт
<...>
КонецФункции
Модуль формы:

Код:
Процедура КнопкаПечатьНажатие(Элемент)

Печать();

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

2) В функцию печати передать параметр "ЭтаФорма" и тогда реквизиты формы будут доступны в модуле объекта (не рекомендуется делать!)

Модуль объекта:

Код:
Функция Печать(Форма) Экспорт
<...>
КонецФункции
Модуль формы:

Код:
Процедура КнопкаПечатьНажатие(Элемент)

Печать(ЭтаФорма);

КонецПроцедуры;
P.S. не рекомендуется делать потому, что передача формы как параметра - тяжеловато отражается на производительности системы.
P.P.S. Количество параметров функции "Печать()" взял равное 0 для наглядности примера.

То есть? Если процедура печать из модуля объекта... то два варианта: никак и не рекомендуется...
Получается надо делать процедуру печать из общей формы, в которой дполнительные данные?
 

Darlock

Well-known member
04.01.2008
560
1
#9
"Не рекомендуется" не значит запрещено. Общую форму можно вызывать откуда угодно, в вашем случае из модуля объекта (вы же ее вызываете, а не передаете). В функции печати обращаетесь к общей форме, в которой все необходимые вам реквизиты есть. Заполняете структуру, как я предлагал, можно в цикле обойти все реквизиты, можно по именам заполнить - не суть важно. потом закрываете форму программно "Закрыть(ДопПараметры)". При закрытии формы ваши ДопПараметры передадутся обратно в фунцию печати (при условии, что вы открывали форму модально ("ДопПараметры = ОбщаяФорма.ОткрытьМодально()"); и работаете уже с переменной ДопПараметры в функции печати, как со структурой.

Можно использовать не структуру, а таблицу значений, массив, соответствие, все что угодно.
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#10
"Не рекомендуется" не значит запрещено.
В конкретном данном случае - да. А в общих случаях (особенно, при общении с государственными органами) именно так и следует расценивать "не рекомендуется".
 

Darlock

Well-known member
04.01.2008
560
1
#11
В конкретном данном случае - да. А в общих случаях (особенно, при общении с государственными органами) именно так и следует расценивать "не рекомендуется".
В данном случае происходит получение формы из модуля объекта, а не передача формы в модуль объекта как параметра. Первое - вполне нормально и допустимо, второе - не рекомендуется делать.
 
Статус
Закрыто для дальнейших ответов.