Как вывести несколько документов на печать?

1. Ольга7 29.02.12 08:29 Сейчас в теме
Доброе время, в документе ТЧ имеет реквизит типа документ со ссылкой на другой документ1. На форму документа добавила ТЗ в которую вывожу ТЧ документа1 по ссылке. таких документов1 может быть несколько, и у них ТЧ разные, как сделать чтоб выбирись все ТЧ документов1 котоые я выбираю? Пытаюсь делать через запрос, т.к нужно еще и вывести остаток то товару
СпНаименования=СоздатьОбъект("СписокЗначений");
ВыгрузитьТабличнуюЧасть(СпНаименования,"Наименование,Цвет" ); 
ВыбратьСтроки();
Пока ПолучитьСтроку()>0 Цикл      
     Сообщить(Таб_РЛ.Наименование);
КонецЦикла; 
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса=
    "
   |Материал = Регистр.ОстаткиМатериалов.Материал;
   |Цвет = Регистр.ОстаткиМатериалов.ЦветТкани;
   |Количество = Регистр.ОстаткиМатериалов.Количество;
   |Функция КоличествоКонОст = КонОст(Количество); 
   |Группировка Материал  ;
   |Группировка Цвет без групп  ;   
   |Условие (Материал в СпНаименования);  
   |Условие (Цвет в СпНаименования);       
   |";
Показать

ну выводятся только строки активного документа, в чем ошибка?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. mihenius 83 29.02.12 10:31 Сейчас в теме
(1) в задаче одно, а в коде совершенно другое ...
И каким образом этот запрос относится к задаче?

Прочитайте тех. задание.
Составьте алгоритм решения на листочке.

Потом пробуйте писать.
Если не получается напишите "алгоритм" тут.
3. Notorius 29.02.12 10:41 Сейчас в теме
mihenius ты рфигеть как помог
4. nice 29.02.12 10:43 Сейчас в теме
Посмотрите внимательно Ваш запрос не обращается к табличной части документа, а просто выбирает остатки из регистра "ОстаткиМатериала". Нужно целиком переписывать запрос, обращаясь не к регистру, а к табличной части документа

Запрос = "Обрабатывать Все;
Период с (ДатаДок) по (ДатаДок);
Док = Документ.ИмяДокумента.ТекущийДокумент;
Наименование = Документ.ИмяДокумента.Материал.Наименование;
Количество = Документ.ИмяДокумента.Количество;
Условие(Дов в СписокВашихДокументов);
Группировка Док;
Группировка Материал;";
5. dusha0020 1118 29.02.12 10:45 Сейчас в теме
Вообще ничего не понял... Задача мало понятна. Код вообще к чему и откуда? Зачем запрос для остатка товаров, нельзя было методом Остаток() воспользоваться? Для чего вообще этот запрос предназначен? Где сама процедура заполнения таблицы значений? Ну и наконец главное: зачем оно вам нужно? Если пойму главное может и помогу чем.
P.S. Кто Вас научил выгружать 2 колонки ТЧ в СписокЗначений?
7. Ольга7 29.02.12 11:06 Сейчас в теме
(5) функция заполнения тз
Перем ТекСтрока;
Функция ОтобразитьРЛ()
Если ТекСтрока=НомерСтроки Тогда
Возврат "";
КонецЕсли;
ТекСтрока=НомерСтроки;
Если ПустоеЗначение(РЛ)=1 Тогда
Таб_РЛ.УдалитьСтроки();
Возврат "";
КонецЕсли;
РЛ.ВыгрузитьТабличнуюЧасть(Таб_РЛ);
КонецФункции
9. mihenius 83 29.02.12 11:33 Сейчас в теме
(7) Еще раз прочитайте (2) и (5)

Объясните саму задачу.

Ладно, попробую поработать телепатом.

1) Вы хотите сделать 2-ую табличную часть, в кот. должны быть видны все ТЧ всех документов
Тут сразу наводящий вопрос. В ТЗ должны отображаться строки в каком порядке? В таком же как и в подчиненных документах?
Если не обязательно а таком же порядке, то ТЗ можно свернуть по реквизитам. Этим мы уберем лишние строки.
Смотрим Свернуть()

2) А сама задача решается легко. На ТЗ вешаем функцию с выборкой по строкам.

А) А в каждой из строк делаем выборку по строкам подчиненного документа. При этом заполняем ТЗ на форме.

Б) Есть и другой вариант. Методом ВыгрузитьтабличнуюЧасть() из подчиненного дока заполняем промежуточную ТЗ, а ТЗ на форме заполняем след. образом:
http://www.forum.mista.ru/topic.php?id=6488
http://www.kb.mista.ru/article.php?id=140

А уже дальше ищите запросом или еще как остатки и прочую информацию

ПС: (3) Я никогда не даю готового решения. А сам механизм расписал подробно.
(А вот кнопка "Это спам" уже есть)
Лучше дать удочку и научить ей пользоваться, чем кормить рыбой.
11. Ольга7 29.02.12 11:40 Сейчас в теме
(9)
Вы хотите сделать 2-ую табличную часть, в кот. должны быть видны все ТЧ всех документов

не совсем так,у меня во второй ТЧ отображаются строки выбранного документа, одно а не все
12. mihenius 83 29.02.12 11:45 Сейчас в теме
(11) ну вот теперь попробуйте заново сформулировать задачу.
А не "непонятно что" из (1)

Попробую сам.
Если курсор стоит в строке ТЧ, то в ТЗ должны быть строки из документа этой строки?
Правильно?

Или еще как-то по другому?

Давайте не будем из вас "клещами" доставать информацию ...
13. Ольга7 29.02.12 11:47 Сейчас в теме
15. mihenius 83 29.02.12 12:40 Сейчас в теме
(13)

На ТЗ вешайте функцию.
Если док из ТЧ выбран, выгружаем ТЧ этого дока в ТЗ. При выгрузке ТЗ, сама очистится и заполнится данными.
А остаток можно без запроса взять из БухИтогов.
Если на текущий момент, то будет работать достаточно быстро.
10. dusha0020 1118 29.02.12 11:37 Сейчас в теме
(7) Ольга7, Нет ошибки. Код действительно выводит только табличную часть текущего документа. Метод ВыгрузитьТабличнуюЧасть() выгружает в таблицу значений с заменой существующего содержимого, то есть прежние данные из Таб_РЛ удаляются.
И вообще в (1) указано, что ТЧ у документов РЛ могут быть разные. Если по структуре данных, то как вы планируете их засунуть в одну общую ТЗ? А если Вам нужно добавлять в Таб_РЛ при активизации новой строки, то код нужно немножко усложнить.

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


Процедура ДобавитьВтз и делает ДОБАВЛЕНИЕ, а не замену для Таб_РЛ
16. dusha0020 1118 29.02.12 13:23 Сейчас в теме
(7) Ольга7, Уточню. В ТЗ на форме при смене строки табличной части у Вас выводится только одна строка документа из выбранной строки табличной части, даже если в нем 2 и т.д. строк? И это функцией, указанной в (7)? И еще вопрос где активируется эта функция (из какого места)?
17. Ольга7 29.02.12 15:19 Сейчас в теме
(16) функция повешена на столбец табличной части где выбирается документ,и выводит она все строки выбранного документа
6. Maxxi 29.02.12 11:02 Сейчас в теме
нужно просто запросом выбрать все документы написать функцию для печати и в параметрах указать сам документ и потом через выборку вызывать эту функцию
8. MultiGenius 29.02.12 11:29 Сейчас в теме
На сколько мне помнится, в типовых конфигурациях есть групповая обработка документов, там можно распечатать несколько документов сразу, причем даже разных типов, зачем еще что-то писать ? Если конечно нет задачи, распечатать как агрегированный документ.

В приведенном вами коде действительно выводятся только строки текущего документа, так как
ВыбратьСтроки();
Пока ПолучитьСтроку()>0 Цикл
Сообщить(Таб_РЛ.Наименование);
КонецЦикла;

команда ВыбратьСтроки(); выбирает из текущего документа. Если вы хотите подобным образом распечатать несколько, то вам надо что-то типа Документ = ПолучитьДокумент(Ссылка); Документ.ВыбратьСтроки();
14. profych1 29.02.12 12:32 Сейчас в теме
да согласен, информации немного. Пользуйтесь групповой обработкой документов и печатайте
18. dusha0020 1118 29.02.12 15:50 Сейчас в теме
Спасибо. Значит у Вас все работает, как я вопрос понял.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот