Имя: Пароль:
1C
 
Как через обработку вывести на печать строки табличной части справочника
0 denzo_z
 
01.10.10
13:58
День добрый! Не получается вывести на печать строки табличной части справочника. Большого опыта в 1С на имею лопачу готовую конфу бухгалтерии и на основе ее делаю свою базу данных.
Задача стоит следующая: Нужно из справочника в котором есть табличная часть с несколькими строками с помощью обработки сделать печать этикеток. Получается сделать только реквизиты справочника, но табличную часть не могу осилить. Подскажите Ради бога!!!!
1 le_
 
01.10.10
14:00
А что именно не получается-то?
Выборку из табличной части сделать?
2 Sammo
 
01.10.10
14:01
Выбрать запросом табличную часть. См. конструктор запроса (отчетов)
3 Дарт Вейдер
 
01.10.10
14:02
Для каждого Стр из ЭлементСправочника.ИмяТаблЧасти цикл
...
//здесь выводишь строки Стр на печать
...
КонецЦикла
4 sash-ml
 
01.10.10
14:02
для каждого строкаТЧ из элементсправочника.ТЧ цикл
Начепятать(строкаТЧ);
конеццикла;

типа того...
5 denzo_z
 
01.10.10
14:02
Вот что я делаю!!!!


Функция ПечатьЦенника() Экспорт
   
   Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|ВидеоАрхивСодержание.НомерСтроки,
|ВидеоАрхивСодержание.Дата,
|ВидеоАрхивСодержание.НаименованиеЗаписи,
|ВидеоАрхивСодержание.Хронометраж
|ИЗ
|Справочник.ВидеоАрхив.Содержание КАК ВидеоАрхивСодержание";

Результат = Запрос.Выполнить().Выбрать();

   
   
   ТабДокумент                     = Новый ТабличныйДокумент;
   ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Ценник";
   Макет                           = ПолучитьМакет("Ценник");
   ОбластьЦенника                  = Макет.ПолучитьОбласть("Строка|Столбец");

   
   ТекСтолбец = 0;
   ТекСтрока  = 0;
     
   Для Каждого СтрокаТаблицы Из Товары Цикл
       Если СтрокаТаблицы.Печать Тогда
           Для Тмп = 1 По СтрокаТаблицы.Количество Цикл
               ОбластьЦенника.Параметры.Заполнить(СтрокаТаблицы);
               ОбластьЦенника.Параметры.Наименование        = СтрокаТаблицы.Наименование.Наименование;
               ОбластьЦенника.Параметры.Шкаф          = СтрокаТаблицы.Наименование.Шкаф;
               ОбластьЦенника.Параметры.Секция          = СтрокаТаблицы.Наименование.Секция;
                               
             Если ТекСтолбец = 0 Тогда
                   
                   ТабДокумент.Вывести(ОбластьЦенника);
                   
                   ТабДокумент.НачатьГруппуСтрок("Содержание",Истина);
                   ОбластьМакета = Макет.ПолучитьОбласть("СтрокаС");
                    Пока Результат.Следующий() Цикл

 ОбластьЦенника.Параметры.ДатаТ          = СтрокаТаблицы.НаименованиеСодержание.Дата;
 ОбластьЦенника.Параметры.ИмяЗаписиТ          = СтрокаТаблицы.НаименованиеСодержание.НаименованиеЗаписи;

                 ТабДокумент.Вывести(ОбластьЦенника);
                 
               КонецЦикла;
                 ТабДокумент.ЗакончитьГруппуСтрок();
                   
               Иначе
                   ТабДокумент.Присоединить(ОбластьЦенника);
               КонецЕсли;

               ТекСтолбец = ТекСтолбец + 1;

               Если ТекСтолбец = 3 Тогда
                   ТекСтрока  = ТекСтрока + 1;
                   ТекСтолбец = 0;
               КонецЕсли;

               Если ТекСтрока = 3 Тогда
                   ТекСтрока = 0;
                   ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
               КонецЕсли;
               
           КонецЦикла;
       КонецЕсли;
   КонецЦикла;

   ТабДокумент.ТолькоПросмотр = Истина;

   Возврат ТабДокумент;

КонецФункции // ПечатьЦенника()
6 ПульсЪ
 
01.10.10
14:04
запросом юзай, и из него выдергивай тч
7 denzo_z
 
01.10.10
14:06
Для начала я форме обработки выбираю какой именно элемент справочника мне нужен, а потом жму печать.
Вот так я выбираю

Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
   
   Если ЗначениеЗаполнено(ЗначениеВыбора) Тогда
       
       Если ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.ВидеоАрхив") Тогда
       
                   
       СтрокаТабличнойЧасти = Товары.Найти(ЗначениеВыбора, "Наименование");
           
           Если СтрокаТабличнойЧасти <> Неопределено Тогда
               
               Предупреждение("Это уже подобрано!", 60);
               
           Иначе
               
               НоваяСтрока = Товары.Добавить();
               НоваяСтрока.Код = ЗначениеВыбора.Код;
               НоваяСтрока.Наименование = ЗначениеВыбора;
               НоваяСтрока.ДатаК = ЗначениеВыбора.Дата_доб;
               НоваяСтрока.ОператорК = ЗначениеВыбора.Оператор;
               НоваяСтрока.СостояниеК = ЗначениеВыбора.Состояние;
               НоваяСтрока.ТипНосителяК = ЗначениеВыбора.Тип_носителя;
               НоваяСтрока.ВидЗаписиК = ЗначениеВыбора.ВидЗаписи;
               НоваяСтрока.ФорматК = ЗначениеВыбора.Формат;                
               НоваяСтрока.Печать = Истина;
               НоваяСтрока.Количество = 1;
                               
           КонецЕсли;
           
       КонецЕсли;
       
       КонецЕсли;

КонецПроцедуры // ОбработкаВыбора()
8 Дарт Вейдер
 
01.10.10
14:16
вот вместо вот этого

                    Пока Результат.Следующий() Цикл

 ОбластьЦенника.Параметры.ДатаТ          = СтрокаТаблицы.НаименованиеСодержание.Дата;
 ОбластьЦенника.Параметры.ИмяЗаписиТ          = СтрокаТаблицы.НаименованиеСодержание.НаименованиеЗаписи;

                  ТабДокумент.Вывести(ОбластьЦенника);
                 
                КонецЦикла;


напиши


Для каждого Стр из СтрокаТаблицы.Наименование.Содержание цикл
 ОбластьЦенника.Параметры.ДатаТ          = Стр.Дата;
 ОбластьЦенника.Параметры.ИмяЗаписиТ          = Стр.НаименованиеЗаписи;

                  ТабДокумент.Вывести(ОбластьЦенника);
КонецЦикла
9 Шапокляк
 
01.10.10
14:20
(5) Извините, а это только я не вижу, где в запросе параметр?
10 denzo_z
 
01.10.10
15:12
Блин таким образом

Для каждого Стр из СтрокаТаблицы.Наименование.Содержание цикл
 ОбластьЦенника.Параметры.ДатаТ          = Стр.Дата;
 ОбластьЦенника.Параметры.ИмяЗаписиТ          = Стр.НаименованиеЗаписи;

                  ТабДокумент.Вывести(ОбластьЦенника);
КонецЦикла

в каждом ценнике печатается по строке табчасти
, а нужно чтобы все строки одного выбранного элемента справочника печатались в одном ценнике
11 denzo_z
 
01.10.10
15:13
Я так понимаю нужно начать группу строк!
12 Дарт Вейдер
 
01.10.10
15:19
(10) ну ты уж сам там с областью то определись..
телепат из меня не очень, но попробуй вот так:

Для каждого Стр из СтрокаТаблицы.Наименование.Содержание цикл
 ОбластьМакета.Параметры.ДатаТ          = Стр.Дата;
 ОбластьМакета.Параметры.ИмяЗаписиТ          = Стр.НаименованиеЗаписи;

 ТабДокумент.Вывести(ОбластьМакета);
КонецЦикла
13 denzo_z
 
01.10.10
16:00
При выборе одного элемента справочника все работает, но как только добавляю второй выдает ошибку
{Обработка.ПечатьЦенников(37)}: Поле объекта не обнаружено (Наименование)
               ОбластьЦенника.Параметры.Наименование        = СтрокаТаблицы.Наименование.Наименование;

Вот код

Функция ПечатьЦенника() Экспорт
   

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

                             
                                                         
                           Если ТекСтолбец = 0 Тогда
                             
                             
                             ТабДокумент.ЗакончитьГруппуСтрок();

                             
               Иначе
                   ТабДокумент.Присоединить(ОбластьЦенника);
               КонецЕсли;

               ТекСтолбец = ТекСтолбец + 1;

               Если ТекСтолбец = 3 Тогда
                   ТекСтрока  = ТекСтрока + 1;
                   ТекСтолбец = 0;
               КонецЕсли;

               Если ТекСтрока = 3 Тогда
                   ТекСтрока = 0;
                   ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
               КонецЕсли;
           //КонецЦикла;
           

           КонецЦикла;
       КонецЕсли;
   КонецЦикла;

   ТабДокумент.ТолькоПросмотр = Истина;

   Возврат ТабДокумент;

КонецФункции // ПечатьЦенника()