Имя: Пароль:
1C
1С v8
Отобразить номенклатуру в печатной форме.
,
0 Godunov
 
24.05.16
13:38
Приветствую специалисты по 1С, возник у меня вопрос, как отобразить в печатной форме наименование номенклатуры из (1)заказа покупателя, (2)счёта на оплату покупателю и (3)реализации товаров и услуг в 1С 8.2 УТ 10.3 (у них 3-их почти что общая форма с данными)?
http://savepic.ru/9883852.png

Пишу такой код с запросом:

Макет = ПолучитьМакет("СчетЗаказ");
Запрос = Новый Запрос;    
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    Запрос.Текст = "ВЫБРАТЬ
                   |    Номенклатура.Наименование
                   |ИЗ
                   |    Справочник.Номенклатура КАК Номенклатура";
    Результат = Запрос.Выполнить();    
    Выборка = Результат.Выбрать();    
    Выборка = Запрос.Выполнить().Выбрать();
    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("СчетЗаказ");
    ОбластьМакета = Макет.ПолучитьОбласть("Строка");    
    Пока Выборка.Следующий() Цикл    
        ОбластьМакета.Параметры.Заполнить(Выборка);
        ОбластьМакета.Параметры.Наименование = Результат;
        ТабДок.Вывести(ОбластьМакета);        
    КонецЦикла;        
    ТабДок.Показать();    

Но он ничего не выводит...

А если так:

ОбластьМакета = Макет.ПолучитьОбласть("Строка");
    ОбластьМакета.Параметры.Наименование = СсылкаНаОбъект.Номенклатура;    
    ТабДокумент.Вывести(ОбластьМакета);

То пишет ошибку: Не удалось сформировать внешнюю печатную форму!
Поле объекта не обнаружено (Номенклатура)

Есть у кого какие мысли на это счёт. Сам новичок в 1С.
1 1Сергей
 
24.05.16
13:40
ОбластьМакета.Параметры.Наименование = Результат;

Это пять.

Посмотри как сделано в типовых
2 Jonny_Khomich
 
24.05.16
13:44
ОбластьМакета.Параметры.Наименование = Результат; - убери, может быть заработает
3 Любопытная
 
24.05.16
13:46
Мне прям нравится :)
(0) Выбирать номенклатуру надо из табличной части документа, а не из справочника.
4 Godunov
 
24.05.16
13:59
(2) Заработало, но не так как мне надо, вывело отдельно таблицу с указанием всех позиций номенклатуры из базы...
А хочу получить именно данные номенклатуры из текущего заказа...
5 polosov
 
24.05.16
14:01
(3) Из РН надо выбирать. Из документа это не путь настоящего джидая.
6 Strogg
 
24.05.16
14:01
(4) тыж сам запрос нарисовал где выбираешь из справочника...
и скажи-ка, где у тебя работает параметр запроса "ТекущийДокумент"?
7 sitex
 
naïve
24.05.16
14:07
(1) + одна байка в бане под пиво В пятницу)
8 Godunov
 
24.05.16
14:10
(6) неправильный запрос у меня, понемногу допираю суть, переделываю...
9 Strogg
 
24.05.16
14:12
(8) воот. т.е. для ВПФ надо перебирать ту тч СсылкиНаОбъект, которую, собственно, и хочешь распечатать.
10 Godunov
 
24.05.16
14:59
(9) А без запроса получится?

Если так пишу:

ОбластьМакета = Макет.ПолучитьОбласть("Строка");    
    ТабДок = Новый ТабличныйДокумент;
    Выборка = Документы.ЗаказПокупателя.Выбрать();
    Пока Выборка.Следующий() Цикл
    ОбластьМакета.Параметры.Наименование = Выборка.Номенклатура;
    ТабДокумент.Вывести(ОбластьМакета);
    КонецЦикла;

Пишется: Не удалось сформировать внешнюю печатную форму!
Поле объекта не обнаружено (Номенклатура)

Или всё таки лучше запросом?
11 mTema32
 
24.05.16
15:03
(10) У тебя список номенклатуры скорее всего в табличной части заказа Номенклатура. Вот в цикле и перебери эту ТЧ.
типо так:
Для Каждого ТекНоменклатура Из ЭтотОбъект.Номенклатура Цикл
//тут обработка
КонецЦикла;

Можно и запросом. Только запрос делай к ТЧ твоего документа.
12 Godunov
 
24.05.16
15:07
(11) Понял, попробую...
13 Godunov
 
27.05.16
12:14
Что-то я завис по этой задаче, сделал запрос через конструктор, но когда нажимаю "Печать" для отображения в печатной форме, выводит только одну позицию номенклатуры из двух в отдельную таблицу…
http://savepic.ru/9868022.png
http://savepic.ru/9842422.png

Код такой:

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

Что не так делаю?
14 Любопытная
 
27.05.16
12:18
(13) У тебя в ТЧ 2 строки.
    Выборка = Запрос.Выполнить().Выбрать();        
Вот тут ты запрос выполнил и выборку выбрал.

    Выборка.Следующий();        
Вот тут выборку открыл и зашел в первую запись выборки

    Пока Выборка.Следующий() Цикл    
Вот тут ты шагнул на следующую запись выборки, при этом предыдущую в макет не вывел.

Всё, выборка кончилась.

Убери Выборка.Следующий(); после выполнения запроса)
15 Godunov
 
27.05.16
12:24
(14) Убрал, но теперь он вывел две нужные позиции номенклатуры в ту же самую отдельную таблицу, но никак в нужный мне макет...
http://savepic.ru/9878024.png
Подскажете, как вывести в макет?
http://savepic.ru/9866760.png
16 Любопытная
 
27.05.16
12:25
(15) Ну так остальные области макета тоже нужно выводить.
17 Godunov
 
27.05.16
12:30
(16) Я хочу для начала вывести номенклатуру, чтобы в дальнейшем переделать макет для остальных данных на вывод. Поэтому в коде только прописал...
ОбластьМакета.Параметры.Товар = Выборка.Наименование;
18 Любопытная
 
27.05.16
12:32
(17) Ну вот что написал, то и вывелось. В чем вопрос?
19 hhhh
 
27.05.16
12:33
(17) ну, то что прописал, то и вывелось. Что тебе не нравится? Если другие части макета пропишешь, тогда они выведутся.
20 Godunov
 
27.05.16
12:35
(18) Но он вывел в отдельную таблицу, а надо сюда, где показано красной линией.
http://savepic.ru/9861643.png
21 Любопытная
 
27.05.16
12:36
(20) А ты эту область (которая над красной линией) вывел?
22 Любопытная
 
27.05.16
12:37
ТабДок = Новый ТабличныйДокумент;  - создал новую таблицу    
    Макет = ПолучитьМакет("СчетЗаказ");        
        
    Пока Выборка.Следующий() Цикл    
        ОбластьМакета = Макет.ПолучитьОбласть("Строка");
        ОбластьМакета.Параметры.Товар = Выборка.Наименование;    
        ТабДок.Вывести(ОбластьМакета); - вывел в таблицу сформированную область
    КонецЦикла;            
    ТабДок.Показать(); - показал таблицу    

Всё остальное где-то в другом месте
23 Godunov
 
27.05.16
12:37
(21) Да, вот тут код:

ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ТабДокумент.Вывести(ОбластьМакета);
    
    //////////////////////////////////////////////////////////////    
    Запрос = Новый Запрос;            
    Запрос.УстановитьПараметр("Наименование", СсылкаНаОбъект);
    Запрос.Текст = "ВЫБРАТЬ
                   |    РеализацияТоваровУслугТовары.Номенклатура.Наименование КАК Наименование
                   |ИЗ
                   |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
                   |ГДЕ
                   |    РеализацияТоваровУслугТовары.Ссылка = &Наименование
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    РеализацияТоваровУслугТовары.Номенклатура.Наименование";
    Выборка = Запрос.Выполнить().Выбрать();        
    //Выборка.Следующий();        
        
    ТабДок = Новый ТабличныйДокумент;        
    Макет = ПолучитьМакет("СчетЗаказ");        
        
    Пока Выборка.Следующий() Цикл    
        ОбластьМакета = Макет.ПолучитьОбласть("Строка");
        ОбластьМакета.Параметры.Товар = Выборка.Наименование;    
        ТабДок.Вывести(ОбластьМакета);        
    КонецЦикла;            
    ТабДок.Показать();
24 hhhh
 
27.05.16
12:40
(23) где тут ты выводишь ту область?
25 Любопытная
 
27.05.16
12:41
И в чем вопрос?
Выводи свою номенклатуру не в новый таб. документ, а в тот, в который до этого выводил.
26 Любопытная
 
27.05.16
12:41
Как вообще можно не понимать таких вещей?
27 Godunov
 
27.05.16
12:43
(24) ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ТабДокумент.Вывести(ОбластьМакета);

http://savepic.ru/9866760.png
ШапкаТаблицы
28 Любопытная
 
27.05.16
12:44
(27) Ну и?
29 hhhh
 
27.05.16
12:44
(27) в ТабДок где это выводишь?
30 Godunov
 
27.05.16
12:46
(26) В 1С я пока полный ноль, изучаю с азов так сказать, чего-то не понимаю, учусь, поэтому возникают вопросы, которые для вас кажутся простыми...
31 hhhh
 
27.05.16
12:47
(30) ну вот ты создал 2 таблицы: ТабДокумент и ТабДок. Зачем тебе 2 таблицы? Сделай одну.
32 Любопытная
 
27.05.16
12:51
(30) Да при чем тут азы и "полный ноль". Или вы сами этот код не писали тогда, а просто взяли его непонятно откуда и даже не пытаетесь понять, что происходит.

Вы создали два отдельных табличных документа и в каждый из них выводите разные части макета. А потом удивляетесь, что у вас получается не так, как хочется.
Так сделайте так, как хочется, а не что попало с потолка.
33 GenAcid
 
27.05.16
12:52
ТабДокумент.Показать();
ТабДок.Показать();

А потом думай.
34 Godunov
 
27.05.16
13:00
(31) (32) Благодарю за критику и объяснение, разъяснение, теперь понял суть. Да я взял коды из разных мест, что-то из инета.

Поправил, вот такой код:

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

И результат
http://savepic.ru/9845260.png

Всё получилось, благодарю за помощь и подсказки...))