Имя: Пароль:
1C
 
Управляемые приложения
0 din107
 
28.12.10
20:15
Добрый вечер!

Подскажите, пожалуйста. Делаю внешнюю печатную форму для УНФ
Написал след код:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
   Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЗапросПоставщику") Тогда
       УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ЗапросПоставщику", "Запрос поставщику", СформироватьПечатнуюФорму("ЗапросПоставщику", МассивОбъектов, ОбъектыПечати));
   КонецЕсли;
КонецПроцедуры // Печать()

Функция СформироватьПечатнуюФорму(Тип, МассивОбъектов, ОбъектыПечати)
   
   // Создаем новый табличный документ для данных расходной накладной
   ТабДок = Новый ТабличныйДокумент;
   ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РТиУ_ЗапросКлиента";

   // Получаем макет, доступный для понимания работником склада
   Макет = ЭтотОбъект.ПолучитьМакет("ЗапросПоставщику");
   ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

   МассивАдресов = МассивОбъектов[0].Организация.КонтактнаяИнформация;
   ОбластьШапка.Параметры.Организация =  МассивОбъектов[0].Организация.НаименованиеПолноеИностранное;
......
КонецФункции

Как мне сделать, чтобы до момента формирования печатной формы можно бы было вывести список, где пользователь мог бы выбрать конкретное значение, а дальше уже из того, что пользователь выбрал формировалась бы печатная форма. Суть вопроса: Как сделать форму списка???
1 Dem1urg
 
28.12.10
20:18
УправляемаяФорма (ManagedForm)
ВыбратьИзСписка (ChooseFromList)
Синтаксис:

ВыбратьИзСписка(<СписокЗначений>, <ЭлементФормы>, <НачальноеЗначение>)
Параметры:

<СписокЗначений> (обязательный)

Тип: СписокЗначений. Список значений, содержащий значения, из которых будет осуществляться выбор.
<ЭлементФормы> (необязательный)

Тип: ГруппаФормы; ТаблицаФормы; ПолеФормы; КнопкаФормы. Элемент формы, около которого будет открыт выпадающий список. Для некоторых элементов выпадающий список будет показан около активной области.
Если не указан, то будет выбран активный элемент формы.
Примечание: В качестве этого параметра нельзя указывать кнопки, расположенные в командной панели или подменю.
<НачальноеЗначение> (необязательный)

Тип: Число; ЭлементСпискаЗначений. Задает начальный элемент, который будет активным при открытии списка.
Если параметр не указан, в списке не будет выбрано начальное значение.
Возвращаемое значение:

Тип: ЭлементСпискаЗначений; Неопределено. Выбранный элемент списка или Неопределено, если пользователь отказался от выбора.
Описание:

Вызывает выпадающий список для выбора значения. Набор значений для выбора задается списком значений. Выпадающий список будет расположен около переданного элемента формы или около его активной области.
2 din107
 
28.12.10
20:22
Пробовал, возникает след ошибка: Процедура или функция с указанным именем не определена (ВыбратьИзСписка)
3 Dem1urg
 
28.12.10
20:30
Форма точно управляемая?
Телепаты в отпуске, код в студию.
4 din107
 
28.12.10
22:10
Функция СформироватьПечатнуюФорму(Тип, МассивОбъектов, ОбъектыПечати)
   Поставщики = ПолучитьЗначениеЗапаса(МассивОбъектов[0]);
   СписокПоставщиков = Новый СписокЗначений;
   Для каждого СтрокаПоставщики Из Поставщики Цикл
       СписокПоставщиков.Добавить(СтрокаПоставщики.НоменклатураПоставщик);
   КонецЦикла;
   
   Вид = ВыбратьИзСписка(СписокПоставщиков);

   // Создаем новый табличный документ для данных расходной накладной
   ТабДок = Новый ТабличныйДокумент;
   ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РТиУ_ЗапросКлиента";

   // Получаем макет, доступный для понимания работником склада
   Макет = ЭтотОбъект.ПолучитьМакет("ЗапросПоставщику");
   ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

   МассивАдресов = МассивОбъектов[0].Организация.КонтактнаяИнформация;
   ОбластьШапка.Параметры.Организация =  МассивОбъектов[0].Организация.НаименованиеПолноеИностранное;
   
   Для каждого ЗначенияАдреса Из МассивАдресов Цикл
       Если ЗначенияАдреса.Вид.Наименование = "Иностранный адрес" Тогда
           ОбластьШапка.Параметры.Адрес = ЗначенияАдреса.Представление;
       КонецЕсли;
       
       Если ЗначенияАдреса.Вид.Наименование = "Телефон" Тогда
           ОбластьШапка.Параметры.Тел = "Тел. " + ЗначенияАдреса.Представление;
       КонецЕсли;
       
       Если ЗначенияАдреса.Вид.Наименование = "Факс" Тогда
           ОбластьШапка.Параметры.факс = "Факс. " + ЗначенияАдреса.Представление;
       КонецЕсли;
       
       Если ЗначенияАдреса.Вид.Наименование = "Email" Тогда
           ОбластьШапка.Параметры.e_mail = "e-mail " + ЗначенияАдреса.Представление;
       КонецЕсли;
       
       Если ЗначенияАдреса.Вид.Наименование = "Сайт Организации" Тогда
           ОбластьШапка.Параметры.сайт = ЗначенияАдреса.Представление;
       КонецЕсли;
   КонецЦикла;
   
   ТабДок.Вывести(ОбластьШапка);
   
   ОбластьРеквизитыШапки = Макет.ПолучитьОбласть("РеквизитыШапки");
   ОбластьРеквизитыШапки.Параметры.Проект = МассивОбъектов[0].Номер;
   ОбластьРеквизитыШапки.Параметры.Дата = Формат(Дата(МассивОбъектов[0].Дата), "ДФ=dd.MM.yyyy");
   ДатаОтгрузки = Дата(1,1,1);
   Для каждого СтрокаЗапаса Из МассивОбъектов[0].Запасы Цикл
       Если ДатаОтгрузки < СтрокаЗапаса.ДатаОтгрузки Тогда
           ДатаОтгрузки = СтрокаЗапаса.ДатаОтгрузки;
       КонецЕсли;
   КонецЦикла;
   ОбластьРеквизитыШапки.Параметры.Неделя = "Woche: KW " + Формат(Год(ДатаОтгрузки),"ЧГ=0") +" " + НеделяГода(ДатаОтгрузки);
   ОбластьРеквизитыШапки.Параметры.ДатаОтгрузки = "Datum: " + Формат(ДатаОтгрузки, "ДФ=dd.MM.yyyy");
   ОбластьРеквизитыШапки.Параметры.ИностранныйКонтрагент = МассивОбъектов[0].Запасы[0].Поставщик;
   
   ТабДок.Вывести(ОбластьРеквизитыШапки);
   
   ОбластьШапкаТЧ = Макет.ПолучитьОбласть("ШапкаТЧ");
   ТабДок.Вывести(ОбластьШапкаТЧ);
   
   ОбластьПустаяСтрока = Макет.ПолучитьОбласть("ПустаяСтрока");
   ТабДок.Вывести(ОбластьПустаяСтрока);
   
   ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");

   Для каждого СтрокаЗапаса Из МассивОбъектов[0].Запасы Цикл
       //Если СтрокаЗапаса.ЕдиницаИзмерения = НЕОПРЕДЕЛЕНО Тогда
       //    Сообщить("Для строки №" + СтрокаЗапаса.НомерСтроки + " не заполнено поле """"Единица измерения""");
       //    Возврат;
       //КонецЕсли;
       
       ОбластьНоменклатура.Параметры.Поз = СтрокаЗапаса.НомерСтроки;
       ОбластьНоменклатура.Параметры.Наименование = СтрокаЗапаса.Номенклатура.НаименованиеИностранное;
       ОбластьНоменклатура.Параметры.Кол = Строка(СтрокаЗапаса.Количество) +" " +Строка(СтрокаЗапаса.Номенклатура.ЕдиницаИзмерения.МеждународноеСокращение);
       Если НЕ ТабДок.ПроверитьВывод(ОбластьНоменклатура) Тогда
           ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
           ТабДок.Вывести(ОбластьШапкаТЧ);
       КонецЕсли;
       ТабДок.Вывести(ОбластьНоменклатура);
   КонецЦикла;
   
   ОбластьИтого = Макет.ПолучитьОбласть("Итого");
   ОбластьИтого.Параметры.ИтогСумма = МассивОбъектов[0].Запасы.Итог("Количество");
   ТабДок.Вывести(ОбластьИтого);
   
   ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
   ОбластьПодвал.Параметры.МенеджерПроекта = "";
   ТабДок.Вывести(ОбластьПодвал);
   ТабДок.АвтоМасштаб = Истина;
   ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область("Шапка");
   //// Добавляем нижний колонтитул для вывода на печать
   //ТабДок.НижнийКолонтитул.Выводить = Истина;
   //ТабДок.НижнийКолонтитул.НачальнаяСтраница = 1;
   //ТабДок.НижнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
   //ТабДок.НижнийКолонтитул.ТекстСправа = "[&НомерСтраницы] из [&СтраницВсего] стр.";
   //
   Возврат ТабДок;

КонецФункции // Создать Табличный Документ Печать Расходной Накладной
5 din107
 
29.12.10
10:13
ап?
6 din107
 
29.12.10
11:12
ап
7 din107
 
29.12.10
12:42
ап
8 Dem1urg
 
29.12.10
12:53
(4) Функция где выполняется? Директива компиляции у неё какая?
9 din107
 
29.12.10
14:36
(8) у неё сейчас ничего не стоит
10 Ц_У
 
29.12.10
14:39
(9) Значит &НаСервере
11 din107
 
29.12.10
14:40
(10) Ну, согласен
12 Origin
 
29.12.10
14:44
тебе намекают, что на сервере не видно этой функции она интерфейсная
13 din107
 
29.12.10
14:46
Как же тогда лучше поступить?
14 Dem1urg
 
29.12.10
15:02
(13) Написать перед объявлением функции строчку &НаКлиенте
15 din107
 
29.12.10
15:40
Написал:

&НаКлиенте
Функция СформироватьПечатнуюФорму(Тип, МассивОбъектов, ОбъектыПечати)
   Поставщики = ПолучитьЗначениеЗапаса(МассивОбъектов[0]);
   СписокПоставщиков = Новый СписокЗначений;
   Для каждого СтрокаПоставщики Из Поставщики Цикл
       СписокПоставщиков.Добавить(СтрокаПоставщики.НоменклатураПоставщик);
   КонецЦикла;
......

Только теперь выскакивает ошибка

ВнешняяОбработка.ЗапросПоставщику.МодульОбъекта(72,120)}: Процедура или функция с указанным именем не определена (СформироватьПечатнуюФорму)
       УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ЗапросПоставщику", "Запрос поставщику", <<?>>СформироватьПечатнуюФорму("ЗапросПоставщику", МассивОбъектов, ОбъектыПечати)); (Проверка: Сервер)
16 Dem1urg
 
29.12.10
22:02
Читать документацию и учить матчасть не предлагать?
Делай

&НаСервере
Функция СформироватьПечатнуюФорму(Тип, МассивОбъектов, ОбъектыПечати)

А там где идет вызов этой функции (УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию) перед вызовом на клиенте сделай выбор из списка и результат выбора передай в функцию
17 din107
 
29.12.10
23:28
Я попробовал сделать вот так:

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
   
   Поставщик = ПолучитьЗначениеПоставщика(МассивОбъектов[0]);
   
   Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЗапросПоставщику") Тогда
       УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ЗапросПоставщику", "Запрос поставщику", СформироватьПечатнуюФорму("ЗапросПоставщику", МассивОбъектов, ОбъектыПечати));
   КонецЕсли;
КонецПроцедуры // Печать()

&НаКлиенте
Функция ПолучитьЗначениеПоставщика(ЗаказПокупателя)
   Запрос = Новый Запрос;
   Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
   Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
                  |    ЗаказПокупателяЗапасы.Номенклатура.Поставщик КАК НоменклатураПоставщик
                  |ИЗ
                  |    Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы
                  |ГДЕ
                  |    ЗаказПокупателяЗапасы.Ссылка = &Ссылка";
   Запрос.УстановитьПараметр("Ссылка", ЗаказПокупателя);              
   //тЗапасы = ТЧ.Запасы.Выгрузить();              
   //Запрос.УстановитьПараметр("ТЗВрем",тЗапасы);
   
   Поставщики = Запрос.Выполнить().Выгрузить();
   СписокПоставщиков = Новый СписокЗначений;
   Для каждого СтрокаПоставщики Из Поставщики Цикл
       СписокПоставщиков.Добавить(СтрокаПоставщики.НоменклатураПоставщик);
   КонецЦикла;
   
   Вид = ВыбратьИзСписка(СписокПоставщиков);

КонецФункции

В рез-те вылетает ошибка, что
{ВнешняяОбработка.ЗапросПоставщику.МодульОбъекта(86,14)}: Процедура или функция с указанным именем не определена (ПолучитьЗначениеЗапаса)
   Поставщик = <<?>>ПолучитьЗначениеЗапаса(МассивОбъектов[0]); (Проверка: Сервер)

из-зи того, чт на сервере он не может найти указанную функцию
18 din107
 
29.12.10
23:31
+ (17)
а точнее вот такая:

{ВнешняяОбработка.ЗапросПоставщику.МодульОбъекта(86,14)}: Процедура или функция с указанным именем не определена (ПолучитьЗначениеПоставщика)
   Поставщик = <<?>>ПолучитьЗначениеПоставщика(МассивОбъектов[0]); (Проверка: Сервер)
19 Dem1urg
 
30.12.10
10:05
Вызов Сервера из Клиента возможен. Обратный - нет.
20 Mitriy
 
30.12.10
10:21
мля... и тут все пьяные...