Доброе время, в документе ТЧ имеет реквизит типа документ со ссылкой на другой документ1. На форму документа добавила ТЗ в которую вывожу ТЧ документа1 по ссылке. таких документов1 может быть несколько, и у них ТЧ разные, как сделать чтоб выбирись все ТЧ документов1 котоые я выбираю? Пытаюсь делать через запрос, т.к нужно еще и вывести остаток то товару
СпНаименования=СоздатьОбъект("СписокЗначений");
ВыгрузитьТабличнуюЧасть(СпНаименования,"Наименование,Цвет" );
ВыбратьСтроки();
Пока ПолучитьСтроку()>0 Цикл
Сообщить(Таб_РЛ.Наименование);
КонецЦикла;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса=
"
|Материал = Регистр.ОстаткиМатериалов.Материал;
|Цвет = Регистр.ОстаткиМатериалов.ЦветТкани;
|Количество = Регистр.ОстаткиМатериалов.Количество;
|Функция КоличествоКонОст = КонОст(Количество);
|Группировка Материал ;
|Группировка Цвет без групп ;
|Условие (Материал в СпНаименования);
|Условие (Цвет в СпНаименования);
|";
Показать
ну выводятся только строки активного документа, в чем ошибка?
Посмотрите внимательно Ваш запрос не обращается к табличной части документа, а просто выбирает остатки из регистра "ОстаткиМатериала". Нужно целиком переписывать запрос, обращаясь не к регистру, а к табличной части документа
Запрос = "Обрабатывать Все;
Период с (ДатаДок) по (ДатаДок);
Док = Документ.ИмяДокумента.ТекущийДокумент;
Наименование = Документ.ИмяДокумента.Материал.Наименование;
Количество = Документ.ИмяДокумента.Количество;
Условие(Дов в СписокВашихДокументов);
Группировка Док;
Группировка Материал;";
Вообще ничего не понял... Задача мало понятна. Код вообще к чему и откуда? Зачем запрос для остатка товаров, нельзя было методом Остаток() воспользоваться? Для чего вообще этот запрос предназначен? Где сама процедура заполнения таблицы значений? Ну и наконец главное: зачем оно вам нужно? Если пойму главное может и помогу чем.
P.S. Кто Вас научил выгружать 2 колонки ТЧ в СписокЗначений?
(5) функция заполнения тз
Перем ТекСтрока;
Функция ОтобразитьРЛ()
Если ТекСтрока=НомерСтроки Тогда
Возврат "";
КонецЕсли;
ТекСтрока=НомерСтроки;
Если ПустоеЗначение(РЛ)=1 Тогда
Таб_РЛ.УдалитьСтроки();
Возврат "";
КонецЕсли;
РЛ.ВыгрузитьТабличнуюЧасть(Таб_РЛ);
КонецФункции
1) Вы хотите сделать 2-ую табличную часть, в кот. должны быть видны все ТЧ всех документов
Тут сразу наводящий вопрос. В ТЗ должны отображаться строки в каком порядке? В таком же как и в подчиненных документах?
Если не обязательно а таком же порядке, то ТЗ можно свернуть по реквизитам. Этим мы уберем лишние строки.
Смотрим Свернуть()
2) А сама задача решается легко. На ТЗ вешаем функцию с выборкой по строкам.
А) А в каждой из строк делаем выборку по строкам подчиненного документа. При этом заполняем ТЗ на форме.
А уже дальше ищите запросом или еще как остатки и прочую информацию
ПС: (3) Я никогда не даю готового решения. А сам механизм расписал подробно.
(А вот кнопка "Это спам" уже есть)
Лучше дать удочку и научить ей пользоваться, чем кормить рыбой.
На ТЗ вешайте функцию.
Если док из ТЧ выбран, выгружаем ТЧ этого дока в ТЗ. При выгрузке ТЗ, сама очистится и заполнится данными.
А остаток можно без запроса взять из БухИтогов.
Если на текущий момент, то будет работать достаточно быстро.
(7) Ольга7, Нет ошибки. Код действительно выводит только табличную часть текущего документа. Метод ВыгрузитьТабличнуюЧасть() выгружает в таблицу значений с заменой существующего содержимого, то есть прежние данные из Таб_РЛ удаляются.
И вообще в (1) указано, что ТЧ у документов РЛ могут быть разные. Если по структуре данных, то как вы планируете их засунуть в одну общую ТЗ? А если Вам нужно добавлять в Таб_РЛ при активизации новой строки, то код нужно немножко усложнить.
Перем ТекСтрока;
//*****************************************************
Процедура ДобавитьВтз(тзИст,тзПриемник,нач,кон) Экспорт
Для ф=нач По кон Цикл
тзПриемник.НоваяСтрока();
стрПрием = тзПриемник.КоличествоСтрок();
Для ы = 1 По тзПриемник.КоличествоКолонок() Цикл
темп = тзИст.ПолучитьЗначение(ф,ы);
тзПриемник.УстановитьЗначение(стрПрием,ы,темп);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
//******************************************************
Функция ОтобразитьРЛ()
Если ТекСтрока=НомерСтроки Тогда
Возврат "";
КонецЕсли;
ТекСтрока=НомерСтроки;
Если ПустоеЗначение(РЛ)=1 Тогда
Таб_РЛ.УдалитьСтроки();
Возврат "";
КонецЕсли;
тВрем = СоздатьОбъект("ТаблицаЗначений");
РЛ.ВыгрузитьТабличнуюЧасть(тВрем);
ДобавитьВтз(тВрем,Таб_РЛ,1,тВрем.КоличествоСтрок());
КонецФункции
Показать
Процедура ДобавитьВтз и делает ДОБАВЛЕНИЕ, а не замену для Таб_РЛ
(7) Ольга7, Уточню. В ТЗ на форме при смене строки табличной части у Вас выводится только одна строка документа из выбранной строки табличной части, даже если в нем 2 и т.д. строк? И это функцией, указанной в (7)? И еще вопрос где активируется эта функция (из какого места)?
На сколько мне помнится, в типовых конфигурациях есть групповая обработка документов, там можно распечатать несколько документов сразу, причем даже разных типов, зачем еще что-то писать ? Если конечно нет задачи, распечатать как агрегированный документ.
В приведенном вами коде действительно выводятся только строки текущего документа, так как
ВыбратьСтроки();
Пока ПолучитьСтроку()>0 Цикл
Сообщить(Таб_РЛ.Наименование);
КонецЦикла;
команда ВыбратьСтроки(); выбирает из текущего документа. Если вы хотите подобным образом распечатать несколько, то вам надо что-то типа Документ = ПолучитьДокумент(Ссылка); Документ.ВыбратьСтроки();