Имя: Пароль:
1C
1С v8
Печать бланков элементов справочника
0 VenedPS
 
08.07.14
12:23
Добрый день.
Подскажите как реализовать печать бланков элементов из справочника. Например, мне нужно выбрать из справочника некоторое количество единиц номенклатуры  и распечатать их разместив данные в бланк по макету.  
Как такое можно реализовать?

На ум пока пришло только создать документ с таб частью куда по кнопке добавляем единицы номенклатуры и указываем количество бланков. По кнопке печать внутренним запросом считываю данные из таблицы а внешним ищу данные в справочнике приравнивая их к названиям с внутреннего запроса. Но мне кажется что это дико и коряво)

Заранее благодарю за помощь
1 Wobland
 
08.07.14
12:24
обходишь свою ТЧ и выводишь данные в ТабДокумент
2 Бешеная Нога
 
08.07.14
12:25
Обработка с табличной частью, где указываешь список номенклатуры. Печатаешь.
3 VenedPS
 
08.07.14
12:33
Спасибо. А не подскажете где можно почитать/посмотреть как работать с обработками и сделать что-то подобное? С таким еще не сталкивался просто.
4 VenedPS
 
08.07.14
14:43
В обработке делаю запрос, но вот вопрос - как обратится к данным ТЧ обработки?
5 Wobland
 
08.07.14
14:45
(4) обратиться к ТЧ прямо в запросе
6 VenedPS
 
08.07.14
14:53
В обработке есть таб часть Список куда по кнопке добавляю нужные позиции из Справочника ГотоваяПродукция. В запросе внутренний запрос считывает дынные с таб части обработки - Список. Но ругается на меня программа что такой таблицы нет. Да и в конструкторе запросов нету обработок и отчетов.


"ВЫБРАТЬ
|    ТабДок.Ссылка.Наименование КАК Артикль,
|    ТабДок.Ссылка.Название КАК Название,
|    ТабДок.КодКомпонента,
|    ТабДок.КодКомпонента,
|    ТабДок.БазисКолич КАК КоличДет,
|    ТабДок.Инд
| ИЗ
|    Справочник.ГотоваяПродукция.ТабДок КАК ТабДок,
|       (Выбрать
|           Артикль,
|        Количество
|       ИЗ
|        Обработка.НапечататьКартыБрака.Список) КАК Выб
|ГДЕ
|    ТабДок.Ссылка.Наименование = Выб.Артикль";
7 Wobland
 
08.07.14
14:54
а не выйдет запросить что-нибудь у обработки
8 Wobland
 
08.07.14
14:55
на всякий случай даю справку: артикль - одна из служебных частей речи, используемая в составе именной группы (словосочетания, в котором главное слово — существительное или его грамматический аналог) для выражения ряда языковых значений
9 Megas
 
08.07.14
14:58
По сути тебе запрос не нужен.
10 VenedPS
 
08.07.14
15:00
а как тогда без запроса можно?
11 Wobland
 
08.07.14
15:00
(10) выборкой
12 Megas
 
08.07.14
15:01
Для каждого СтрокаТч из  ТЧ_обработки цикл


КонецЦикла;
13 VenedPS
 
08.07.14
15:04
Спасибо, сейчас попробую
14 Megas
 
08.07.14
15:05
Если очень хочется то можно и запросом обратиться к ТЧ обработки.


Это так на будущее

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


&НаКлиенте
Процедура Печать(Команда)
    ТабДок = Новый ТабличныйДокумент;
    НомерДок = Объект.Номер;
    СформироватьПечать(ТабДок, НомерДок);
    ТабДок.Показать ();
КонецПроцедуры

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

    Пока Выборка1.Следующий() Цикл
            Количество = Выборка1.Количество;
            КолПеч = 0;
            Пока Количество > КолПеч Цикл
                
                    ТабДок.Вывести(ОблЗаголовок);
                    Шапка.Параметры.Артикль = Выборка1.Артикль;
                    Шапка.Параметры.Название = Выборка1.Название;
                    Артикль = Выборка1.Артикль;
                    ТабДок.Вывести(Шапка);
                    ТабДок.Вывести(ТабДокШапка);
                    
                    Запрос = Новый Запрос;
                    Запрос.Текст =
                                        
                    "ВЫБРАТЬ
                    |    ГотоваяПродукцияТабДок.Ссылка.Наименование,
                    |    ГотоваяПродукцияТабДок.НомерСтроки,
                    |    ГотоваяПродукцияТабДок.НазваниеКомпонента,
                    |    ГотоваяПродукцияТабДок.КодКомпонента,
                    |    ГотоваяПродукцияТабДок.БазисКолич,
                    |    ГотоваяПродукцияТабДок.Инд
                    |ИЗ
                    |    Справочник.ГотоваяПродукция.ТабДок КАК ГотоваяПродукцияТабДок
                    |ГДЕ
                    |    ГотоваяПродукцияТабДок.Ссылка.Наименование = &Артикль";
                    
                    
                    Запрос.УстановитьПараметр("Артикль", Артикль);
                    
                    Результат = Запрос.Выполнить();
                    Выборка = Результат.Выбрать();
                    Пока Выборка.Следующий() Цикл
                        ТабДокМ.Параметры.Заполнить(Выборка);
                        ТабДок.Вывести(ТабДокМ, Выборка.Уровень());
                    КонецЦикла;
                    ТабДок.Вывести(ТабДокМ);
                    ТабДок.Вывести(Подвал);
            КолПеч = КолПеч+1;        
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
            КонецЦикла;
          
    КонецЦикла;
            
КонецПроцедуры
16 Wobland
 
09.07.14
17:09
поиск документа по номеру, запрос в цикле - всё это несомненно мощь!
17 Крошка Ру
 
09.07.14
17:28
(1)Это так называемое спонтанное программирование, когда данные добываются ровно в том самом месте модуля, где они понадобились и ни строчкой выше!
А строчкой ниже - они отбрасываются как отработавшие своё и износившиеся, и добываются из базы по новой.
18 Крошка Ру
 
09.07.14
17:30
(17) к (16)
19 МойКодУныл
 
09.07.14
17:41
(16) необходимо утилизировать возросшую производительность компьютеров. Если все перестанут писать г-но код, как интел\амд свои новые поделки продавать будет? Все развитие ИТ-индустрии, можно сказать, держится на плечах таких программистов.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший