Имя: Пароль:
1C
1С v8
Печатная форма с информацией из разных документов
,
0 keramik
 
05.02.15
15:52
Синуация следующая, создаю форму для печати, основу собрал, но необходимо в ней вывести поля, которые находятся не в текущем документе, а в другом. Дополнил процедуру таким кодом:
Процедура Печать(Элемент)
Запрос = НовыйЗапрос;
Запрос.Текст =
"ВЫБРАТЬ
| Автомобили.Ссылка КАК АвтомобилиСсылка,
| Автомобили.VIN КАК VINСтрока,
| Автомобили.ГосНомер КАК ГосНомер Строка,
| Автомобили.Мощность КАК АМощностьСтрока
|ИЗ
| Справочник.Автомобили КАК Автомобили";
Выборка = Запрос.Выполнить().Выбрать();
//В области "Шапка" выводится информация из запроса
Шапка = Макет.ПолучитьОбласть("Шапка");
Шапка.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Шапка);
........
КонецПроцедуры

Но поля пустые, информация не выбирается...
1 Kondarat
 
05.02.15
15:55
Выборка.Следующий()?
2 keramik
 
05.02.15
16:19
Я скопировал из автоматически созданного для раздела "Работы" и изменил:

ВыборкаШапка = Выборка.Выбрать();
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
Пока ВыборкаШапка.Следующий() Цикл
  ОбластьШапка.Параметры.Заполнить(ВыборкаШапка);
  ТабДок.Вывести(ОбластьШапка, ВыборкаШапка.Уровень());
КонецЦикла;
3 Serg_1960
 
05.02.15
16:24
...ВыборкаШапка.Следующий()...
4 keramik
 
05.02.15
16:26
Не понимаю, что там дописывать надо?
5 ColonelAp4u
 
05.02.15
16:33
(4) а в результат запроса в отладчике смотрел?
6 Serg_1960
 
05.02.15
16:35
Упс, сорри, более полный ответ :)

Запрос возвращает все записи из справочника Автомобили (т.е возможны варианты: нет записей, одна запись, много записей)

Вариант алгоритма перебора всех записей:

...
Выборка = Запрос.Выполнить().Выбрать();
//В области "Шапка" выводится информация из запроса
Пока Выборка.Следующий Цикл
   Шапка = Макет.ПолучитьОбласть("Шапка");
   Шапка.Параметры.Заполнить(Выборка);
   ТабДок.Вывести(Шапка);
КонецЦикла;
...
7 Serg_1960
 
05.02.15
16:36
(6) "Выборка.Следующий" --> "Выборка.Следующий()"
8 PR
 
05.02.15
16:39
Вангую тысячу постов ветке.
Поскольку соблюдено правило, в (0) ответ, в (2) и (4) игнорирование ответа и непонимание, а че, собсно, нужно сделать.

Вообще, странно, когда человек ни книжки читать не хочет, ни типовые смотреть, ни ответы на свои вопросы читать.
Ну или не может. Тогда печально.
9 keramik
 
05.02.15
16:45
Для всех полей есть данные, а для "Шапка" только "ТабличныйДокумент" пишет отладчик.
Значит что-то не выбирается :(
10 salvator
 
05.02.15
16:53
(6) Получать каждый раз область в цикле? Ммм...
11 ColonelAp4u
 
05.02.15
16:56
(9) в цикле данные а шапку потом заполни по этим данным
12 anatoly
 
05.02.15
16:57
а в Шапке точно все параметры поименно с полями выборки совпадают?
13 salvator
 
05.02.15
16:59
(0) "но необходимо в ней вывести поля, которые находятся не в текущем документе, а в другом"
А где ты выбираешь именно "другой документ", я чет не понял?
14 keramik
 
05.02.15
17:02
(13) Из документа "Работы" вызываю форму для распечатки заказанных работ. Это работает.
Необходимо добавить в распечатку информацию об автомобиле, которая хранится в справочнике "Автомобили".  
Пробую селектом выбрать данные из справочника и запихнуть их в форму печати. Это не работает, потому что не знаю как из туда передать.
15 salvator
 
05.02.15
17:08
(14) "Автомобиль" присутствует в готовом отчете?
16 keramik
 
05.02.15
17:11
В документе есть поле, которое выводит информацию о номере, марке и моделе автомобиля. В него информация из справочника "Автомобиль" поступает.

Я вот думаю, что возможно в селекте не указано по какому параметру отбирать этот самый автомобиль. Т.е. как показать, что надо именно ВАЗ, а не МАЗ брать.
17 salvator
 
05.02.15
17:15
(16) Умеешь ты запутать. Сначала сформулируй четко: что тебе надо. А то начал с печатной формы, закончил отбором данных.
18 keramik
 
05.02.15
17:25
(17)
Мне надо следующее:
Печатная форма, в которой выводится информация:
1. работы, которые надо провести
2. автомобиль, который будут ремонтировать.

Первая часть работает. Информация берётся из документа, к которому печатную форму приделываю.
Вторая часть не работает, информация находится в справочнике "Автомобиль", как её оттуда вытащить не знаю.

Как вариант - создать в документе несколько скрытых полей, в которые будет переноситься информация из справочника "Автомобиль", и из них уже брать данные для распечатки. Но по-моему это несколько кривой вариант.
19 salvator
 
05.02.15
17:29
(18) Прикрути к исходному запросу левым соединением справочник и выдерни из него данные.
20 salvator
 
05.02.15
17:29
Дай-ка полностью код, который есть сейчас.
21 keramik
 
05.02.15
17:30
Через часа два дома буду, скину.
22 keramik
 
06.02.15
00:54
Вот процедура, которая выводит печатную форму:
Процедура Print(Элемент)
    ТабДок = Новый ТабличныйДокумент;
    Макет = Документы.АС_ЗаказНаряд.ПолучитьМакет("Print");
    // Заголовок
    Область = Макет.ПолучитьОбласть("Заголовок");
    Область.Параметры.Заполнить(ЭтотОбъект);
    ТабДок.Вывести(Область);
    // Шапка
    Шапка = Макет.ПолучитьОбласть("Шапка");
    Шапка.Параметры.Заполнить(ЭтотОбъект);
    ТабДок.Вывести(Шапка);
    //Перевозчик
    Перевозчик = Макет.ПолучитьОбласть("Перевозчик");
    Перевозчик.Параметры.Заполнить(ЭтотОбъект);
    ТабДок.Вывести(Перевозчик);

    // Товары
    Область = Макет.ПолучитьОбласть("ТоварыШапка");
    ТабДок.Вывести(Область);
    ОбластьТовары = Макет.ПолучитьОбласть("Товары");
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        ОбластьТовары.Параметры.Заполнить(ТекСтрокаТовары);
        ТабДок.Вывести(ОбластьТовары);
    КонецЦикла;
    // Работы
    Область = Макет.ПолучитьОбласть("РаботыШапка");
    ТабДок.Вывести(Область);
    ОбластьРаботы = Макет.ПолучитьОбласть("Работы");
    Для Каждого ТекСтрокаРаботы Из Работы Цикл
        ОбластьРаботы.Параметры.Заполнить(ТекСтрокаРаботы);
        ТабДок.Вывести(ОбластьРаботы);
    КонецЦикла;
    // Подвал
    Подвал = Макет.ПолучитьОбласть("Подвал");
    Подвал.Параметры.Заполнить(ЭтотОбъект);
    ТабДок.Вывести(Подвал);

    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Истина;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
КонецПроцедуры

Селекта с информацией об автомобиле тут нет.
23 keramik
 
06.02.15
00:58
Сам селект из справочника "Автомобили" выглядит так:
Запрос = НовыйЗапрос;
Запрос.Текст =
"ВЫБРАТЬ
| Автомобили.Ссылка КАК АвтомобилиСсылка,
| Автомобили.VIN КАК VINСтрока,
| Автомобили.ГосНомер КАК ГосНомер Строка,
| Автомобили.Мощность КАК АМощностьСтрока
|ИЗ
| Справочник.Автомобили КАК Автомобили";
Выборка = Запрос.Выполнить().Выбрать();
24 probably
 
06.02.15
01:24
(23) ты не понимаешь, что этим запросом выбираешь из справочника ВСЕ автомобили?
25 probably
 
06.02.15
01:26
по опыту работы с автосервисом предположу, что

Шапка.Параметры.Заполнить(ЭтотОбъект.Автомобиль);
26 User_Agronom
 
06.02.15
01:45
(18) ...Как вариант - создать в документе несколько скрытых полей, в которые будет переноситься информация из справочника "Автомобиль", и из них уже брать данные для распечатки. Но по-моему это несколько кривой вариант...

Дублирование информации сыграет потом очень злую шутку. Вообще не вариант.

Я бы предложил ТС сначала покурить мануал создания печатных форм.

Уяснить что такое макет, как работать с областью, как заполнять параметры макета и т.д.

Если что продам СП дороже всех))
27 keramik
 
06.02.15
08:43
(24) Походу да. Все идут в выборку.
(25) Попробую так, спасибо.
28 keramik
 
06.02.15
09:02
(25) Хо-хо-хо, уважаемый probably, Ваш опыт подсказал верное решение. Данные выбираются из справочника и переносятся в форму.
Спасибо большое.
29 keramik
 
06.02.15
20:04
Ещё вопрос, как в печатную форму вывести вверху страницы кнопки "На принтер", "Сохранить PDF" и т.д?
Пока не врубился.