Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 04:22

Вывод в печатную форму параметров 1С:Предприятие 8.3

Автор gbvdbf, 03 авг 2023, 13:48

0 Пользователей и 1 гость просматривают эту тему.

gbvdbf

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

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

КонецЦикла;
КонецПроцедуры 

Далее вывод идет: ВывестиИсполнителей(Макет, ТабДок);

Получается то, что на скриншоте
/////////////////////////////////////////////////////////////////////////////
При добавлении в запрос кода, в конечном виде выдает ошибку. (В другом документе с этими дополнениями выдает одного исполнителя, как нужно).

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

Запрос.УстановитьПараметр("Документ", Документ);
Запрос.УстановитьПараметр("ID", ID);

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

КонецЦикла;
КонецПроцедуры

Далее вывод
ВывестиИсполнителей(Макет, Документ, РемонтОборудования.ID, ТабДок);

Ошибка:
{Документ.торо_НарядНаВыполнениеРемонтныхРабот.МодульМенеджера(1530,29)}: Переменная не определена (Документ)
ВывестиИсполнителей(Макет, <<?>>Документ, РемонтОборудования.ID, ТабДок); (Проверка: Сервер)
{Документ.торо_НарядНаВыполнениеРемонтныхРабот.МодульМенеджера(1530,39)}: Переменная не определена (РемонтОборудования)
ВывестиИсполнителей(Макет, Документ, <<?>>РемонтОборудования.ID, ТабДок); (Проверка: Сервер)

Пытался добавлять эти переменные в функции, но пока что результат тот же.

Максим75

gbvdbf,  ВывестиИсполнителей(Макет, Документ, РемонтОборудования.ID, ТабДок);

вот здесь Документ и РемонтОборудования - определены? Выше в процедуре они определяются, что-то им присваивается? Может банально они после вызова процедуры определяются.
В отладчике посмотрите, что этим переменным присваивается. То что нужно?

gbvdbf

Максим75, ВывестиИсполнителей(Макет, Документ, РемонтОборудования.ID, ТабДок); находится в другой процедуре // Документ, РемонтОборудования.ID там не определены, когда им что-то присваиваешь, появляется ошибка переменная не определена.Я так понял дело в запросе и установке параметров для /Документ, РемонтОборудования.ID/, пока не пойму как запрос для них правильный составить.

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

И процедура от этого документа (скидывал уже выше)Процедура ВывестиИсполнителей(Макет, Документ, ID, ТабДок)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| торо_АктОВыполненииЭтапаРаботИсполнителиПоРемонтам.Исполнитель КАК Исполнитель
|ИЗ
| Документ.торо_АктОВыполненииЭтапаРабот.ИсполнителиПоРемонтам КАК торо_АктОВыполненииЭтапаРаботИсполнителиПоРемонтам
|ГДЕ
| торо_АктОВыполненииЭтапаРаботИсполнителиПоРемонтам.Ссылка = &Документ
| И торо_АктОВыполненииЭтапаРаботИсполнителиПоРемонтам.РемонтыОборудования_ID = &ID";

Запрос.УстановитьПараметр("Документ", Документ);
Запрос.УстановитьПараметр("ID", ID);

Выборка = Запрос.Выполнить().Выбрать();
ИсполнительЗаполнен = Ложь;

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

Максим75

gbvdbf, вот в том, что Вы выслали, определяется Документ

Документ = ВыборкаДокументов.Документ;  -  здесь прямое позиционирование на документ в выборке

а вот определяется РемонтОборудования

РемонтОборудования  = ВыборкаРемонтов;  -  а здесь на результат выполнения вложенного запроса. и соответственно у РемонтОборудования есть куча реквизитов, ID один из них. Так что в том, что Вы где-то скопипастили все определяется.

А в Вашем коде скорее всего нет.
Можете дать всю процедуру, где Вы вызываете ВывестиИсполнителей.
Проблема не в процедуре ВывестиИсполнителей, а той процедуре, откуда Вы ее вызываете.

gbvdbf

Максим75, Процедура ВывестиРемонты(Макет, ТабДок, тчРемРаботы, ВыборкаРемонтов, ВыборкаИсполнителейПоРР, ИмяПФ = "")
   
    НайС = тчРемРаботы.НайтиСтроки(Новый Структура("Родитель_ID", ""));
    Дерево = Новый ДеревоЗначений;
    Дерево.Колонки.Добавить("РемонтнаяРабота");
    Дерево.Колонки.Добавить("РемонтыОборудования_ID");
    Дерево.Колонки.Добавить("ID");
    Дерево.Колонки.Добавить("Количество");
    Дерево.Колонки.Добавить("НомерОперацииПоПорядку");
   
    НужноПолучитьНормыЗапчастей = Истина;
   
    // Затраты из сметы
    СтруктураЗатратИзСметы = Новый Структура("РемонтныеРаботыИзСметы, СтруктураТаблиц", Новый Массив, Новый Структура);
    Если ТипЗнч(ВыборкаРемонтов.ДокументИсточник) = Тип("ДокументСсылка.торо_ЗаявкаНаРемонт") Тогда
        СтруктураЗатратИзСметы = ПолучитьНормыЗатратИзСметы(тчРемРаботы, ВыборкаРемонтов, ВыборкаРемонтов.ДокументИсточник);
        НужноПолучитьНормыЗапчастей = Ложь;
    КонецЕсли;
   
    РемонтныеРаботыИзСметы = СтруктураЗатратИзСметы.РемонтныеРаботыИзСметы;
   
    Для каждого текСтрока Из НайС Цикл
        Если Не РемонтныеРаботыИзСметы.Найти(текСтрока.ID) = Неопределено Тогда
            Продолжить;
        КонецЕсли;
        нс = Дерево.Строки.Добавить();
        ЗаполнитьЗначенияСвойств(нс, текСтрока);
        СобратьДерево(нс, тчРемРаботы, РемонтныеРаботыИзСметы);
    КонецЦикла;
   
    торо_ЗаполнениеДокументов20.ПроставитьНомераОпераций(Дерево);
   
    // Затраты из нормативов
    стрЗатрат = торо_Ремонты.ПолучитьНормыЗатратИзВетвиДереваОпераций(Дерево, ВыборкаРемонтов.ДатаНачала, ВыборкаРемонтов.ДатаОкончания, ВыборкаРемонтов.ДатаНачала,,,Истина);
   
    тчМатЗатраты = Новый ТаблицаЗначений;
    тчМатЗатраты.Колонки.Добавить("Наименование");
    тчМатЗатраты.Колонки.Добавить("Характеристика");
    тчМатЗатраты.Колонки.Добавить("ЕдИзм");
    тчМатЗатраты.Колонки.Добавить("Количество");
   
    тчИнструменты = Новый ТаблицаЗначений;
    тчИнструменты.Колонки.Добавить("Наименование");
    тчИнструменты.Колонки.Добавить("ЕдИзм");
    тчИнструменты.Колонки.Добавить("Количество");
   
    Для каждого текСтрока Из СтрЗатрат Цикл
        МатЗатраты = текСтрока.СтруктураТаблиц.МатериальныеЗатраты;
        Инструменты = текСтрока.СтруктураТаблиц.ИнструментыИТехника;
       
        Для каждого текСтрокаТЧ Из МатЗатраты Цикл
            нс = тчМатЗатраты.Добавить();
            нс.Наименование = текСтрокаТЧ.Номенклатура;
            нс.Характеристика = текСтрокаТЧ.Характеристика;
            нс.ЕдИзм = текСтрокаТЧ.Номенклатура.ЕдиницаИзмерения;
            нс.Количество = текСтрокаТЧ.Количество;
        КонецЦикла;
       
        Для каждого текСтрокаТЧ Из Инструменты Цикл
            нс = тчИнструменты.Добавить();
            нс.Наименование = текСтрокаТЧ.Инструмент;
            нс.ЕдИзм = текСтрокаТЧ.Инструмент.ЕдиницаИзмерения;
            нс.Количество = текСтрокаТЧ.Количество;
        КонецЦикла;
    КонецЦикла;
   
    Если СтруктураЗатратИзСметы.СтруктураТаблиц.Количество() > 0 Тогда
        МатериальныеЗатраты = СтруктураЗатратИзСметы.СтруктураТаблиц.МатериальныеЗатраты;
        Инструменты = СтруктураЗатратИзСметы.СтруктураТаблиц.ИнструментыИТехника;
       
        Для каждого СтрокаЗатрат Из МатериальныеЗатраты Цикл
            НоваяСтрокаЗатрат = тчМатЗатраты.Добавить();
            НоваяСтрокаЗатрат.Наименование = СтрокаЗатрат.Номенклатура;
            НоваяСтрокаЗатрат.Характеристика = СтрокаЗатрат.ХарактеристикаНоменклатуры;
            НоваяСтрокаЗатрат.ЕдИзм = СтрокаЗатрат.ЕдиницаИзмерения;
            НоваяСтрокаЗатрат.Количество = СтрокаЗатрат.Количество;
        КонецЦикла;
       
        Для каждого СтрокаИнструментов Из Инструменты Цикл
            НоваяСтрокаИнструментов = тчИнструменты.Добавить();
            НоваяСтрокаИнструментов.Наименование = СтрокаИнструментов.Инструмент;
            НоваяСтрокаИнструментов.ЕдИзм = СтрокаИнструментов.ЕдиницаИзмерения;
            НоваяСтрокаИнструментов.Количество = СтрокаИнструментов.Количество;
        КонецЦикла;
    КонецЕсли;
   
    // Если наряд не на основании сметы, то запчасти нужно брать из ОР
    Если НужноПолучитьНормыЗапчастей Тогда
        НормыЗапчастей = ПолучитьНормыЗапчастей(ВыборкаРемонтов.ОбъектРемонта, ВыборкаРемонтов.ВидРемонтныхРабот);
        Для каждого СтрокаЗапчасти Из НормыЗапчастей Цикл
            НоваяСтрокаЗатрат = тчМатЗатраты.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяСтрокаЗатрат, СтрокаЗапчасти);
        КонецЦикла;
    КонецЕсли;
   
    тчМатЗатраты.Свернуть("Наименование, Характеристика, ЕдИзм", "Количество");
    тчИнструменты.Свернуть("Наименование, ЕдИзм", "Количество");
   
    обОписаниеОР = Макет.ПолучитьОбласть("ОписаниеОР");
    Если ИмяПФ = "НарядНаРаботы_ОднимДокументом" Тогда
        обОписаниеОР.Параметры.ДатаНачала = Формат(ВыборкаРемонтов.ДатаНачала,"ДФ=dd.MM.yyyy");
        обОписаниеОР.Параметры.ДатаОкончания = Формат(ВыборкаРемонтов.ДатаОкончания,"ДФ=dd.MM.yyyy");

    КонецЕсли;
    обОписаниеОР.Параметры.ОР = торо_ЗаполнениеДокументов.ПолучитьПредоставленияОРДляПечати(ВыборкаРемонтов.ОбъектРемонта);
    обОписаниеОР.Параметры.Местонахождение = ВыборкаРемонтов.АдресМестонахождения;
    обОписаниеОР.Параметры.ТехНомер = ВыборкаРемонтов.ТехНомер;
    обОписаниеОР.Параметры.Комментарий = ВыборкаРемонтов.Комментарий;
       обОписаниеОР.Параметры.Описание = ВыборкаРемонтов.ВидРемонтныхРабот;
    ПроверитьИВывести(ТабДок, обОписаниеОР);
   
    обШапкаТЧСостав = Макет.ПолучитьОбласть("ШапкаТЧСостав");
    ПроверитьИВывести(ТабДок, обШапкаТЧСостав);
   
    СтрокиВКорне = тчРемРаботы.НайтиСтроки(Новый структура("Родитель_ID", ""));
    ВывестиРекурсивно(Макет, тчРемРаботы, СтрокиВКорне, ТабДок, "СтрокаТЧСостав", "", ВыборкаИсполнителейПоРР);

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

    КонецЦикла;

    КонтрПоказатели = ПланыВидовХарактеристик.торо_ИзмеряемыеПоказателиОбъектовРемонта.ПолучитьСтруктуруИзмеряемыхПоказателейОбъектовРемонта(ВыборкаРемонтов.ОбъектРемонта);
    Если ИмяПФ = "НарядНаРаботы_сПоказателями" И КонтрПоказатели.Количество() > 0 Тогда
        обШапкаТЧПоказатели = Макет.ПолучитьОбласть("ШапкаТЧПоказатели");
        ПроверитьИВывести(ТабДок, обШапкаТЧПоказатели);
   
        НомерПП = 1;
        Для каждого Строка Из КонтрПоказатели Цикл
            Если НЕ Строка.Удален Тогда
                обСтрокаТЧПоказатели = Макет.ПолучитьОбласть("СтрокаТЧПокзатели");
                обСтрокаТЧПоказатели.Параметры.Ном = НомерПП;
                обСтрокаТЧПоказатели.Параметры.Показатель = Строка.Показатель;
               
                НомерПП = НомерПП + 1;
                ПроверитьИВывести(ТабДок, обСтрокаТЧПоказатели);
            КонецЕсли;
        КонецЦикла;
       
    КонецЕсли;
   
КонецПроцедуры

Максим75

gbvdbf, отлично, Вы вставили что-то, что не имеет никакого отношения к Вашему коду

Вы работаете с двумя таблицами значений, их сворачиваете

 тчМатЗатраты.Свернуть("Наименование, Характеристика, ЕдИзм", "Количество");
 тчИнструменты.Свернуть("Наименование, ЕдИзм", "Количество");

еще в процедуру передаете нечто под названием ВыборкаРемонтов, возможно здесь сидит документ и какое-то Id из РемонтОборудования. А так ни Документ, ни РемонтОборудования в данной процедуре не определяюся, и естественно, вываливается ошибка.

смотрите что вместо Документ и РемонтОборудования Вы можете передать в процедуру ВывестиИсполнителей. надо смотреть из того, что у Вас имеется в этих таблицах значений или в каких-то параметрах, которые Вы передаете в процедуру ВывестиРемонты.

gbvdbf

Максим75, также добавлял ВывестиИсполнителей в функцию от печатной формы, но ни ошибок ни результат не выводится в макет, поэтому добавил вывод процедуры в процедуру ВывестиРемонты.

Сама функция Функция НарядНаРаботы_НеОпасные(МассивОбъектов, ПараметрыПечати, ИмяПФ = "")

ТабДок = Новый ТабличныйДокумент;
ТабДок.ИмяПараметровПечати = "торо_НарядНаВыполнениеРемонтныхРабот";
ТабДок.ТолькоПросмотр = Истина;

Если ИмяПФ = "НарядНаРаботы_сПоказателями" Тогда
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.торо_НарядНаВыполнениеРемонтныхРабот.ПФ_MXL_НарядНаРаботы_сПоказателями");
Иначе
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.торо_НарядНаВыполнениеРемонтныхРабот.ПФ_MXL_НарядНаРаботы_НеОпасные");
КонецЕсли;

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

Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПредседательКомиссии", "торо_НарядНаВыполнениеРемонтныхРаботРемонтыОборудования.Ссылка.Комиссия.Председатель КАК ПредседательКомиссии");
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПредседательКомиссии,", "");
КонецЕсли;

Запрос.УстановитьПараметр("Ссылка", МассивОбъектов);
Если ПараметрыПечати.Свойство("МассивID") Тогда
Запрос.УстановитьПараметр("ID", ПараметрыПечати.МассивID);
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И торо_НарядНаВыполнениеРемонтныхРаботРемонтыОборудования.ID В(&ID)", "");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И торо_НарядНаВыполнениеРемонтныхРаботИсполнители.РемонтыОборудования_ID В(&ID)", "");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И торо_НарядНаВыполнениеРемонтныхРаботРемонтныеРаботы.РемонтыОборудования_ID В(&ID)", "");
КонецЕсли;

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

РемонтныеРаботы = РезультатЗапроса[1].Выгрузить();
РемонтныеРаботы.Индексы.Добавить("Ссылка");
РемонтныеРаботы.Индексы.Добавить("РемонтыОборудования_ID");
ВыборкаИсполнителей = РезультатЗапроса[3].Выбрать();
ВыборкаИсполнителейПоРР = РезультатЗапроса[4].Выбрать();

Если ИспользоватьКомиссии Тогда
    ВыборкаКомиссий = РезультатЗапроса[5].Выбрать();
КонецЕсли;

ВыборкаДокументов = РезультатЗапроса[0].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Ссылка");
ЭтоПервый = Истина;
Пока ВыборкаДокументов.Следующий() Цикл
ВыборкаРемонтов = ВыборкаДокументов.Выбрать(ОбходРезультатаЗапроса.Прямой);

Пока ВыборкаРемонтов.Следующий() Цикл
Если Не ЭтоПервый Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ЭтоПервый = Ложь;

обШапка = Макет.ПолучитьОбласть("Шапка");

обШапка.Параметры.Организация = ВыборкаДокументов.Организация;
обШапка.Параметры.Подразделение = ВыборкаДокументов.Подразделение;

обШапка.Параметры.ДатаОткрытия = Формат(ВыборкаДокументов.Дата,"ДФ=dd.MM.yyyy");
обШапка.Параметры.Номер = ВыборкаДокументов.Номер;

обШапка.Параметры.ДатаНачала = Формат(ВыборкаРемонтов.ДатаНачала,"ДФ=dd.MM.yyyy");
обШапка.Параметры.ДатаОкончания = Формат(ВыборкаРемонтов.ДатаОкончания,"ДФ=dd.MM.yyyy");

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

КонецЦикла;

Если ПерваяСтрока Тогда
ТабДок.Вывести(обШапка);
КонецЕсли;

ВывестиРемонты(Макет, ТабДок, РемонтныеРаботы.Скопировать(СтруктураПоиска), ВыборкаРемонтов, ВыборкаИсполнителейПоРР, ИмяПФ);


ПерваяСтрока = Истина;
обИсполнительСЗаголовоком = Макет.ПолучитьОбласть("ИсполнительСЗаголовоком");

ВыборкаИсполнителей.Сбросить();
Пока ВыборкаИсполнителей.НайтиСледующий(СтруктураПоиска) Цикл
Если ПерваяСтрока Тогда
ПерваяСтрока = Ложь;
обИсполнительСЗаголовоком.Параметры.Сотрудник = ВыборкаИсполнителей.Сотрудник;
обИсполнительСЗаголовоком.Параметры.Дата = Формат(ТекущаяДата(),"ДФ='''""''dd''""'' MMMM yyyy ""г.""'");
ПроверитьИВывести(ТабДок, обИсполнительСЗаголовоком);
Продолжить;
КонецЕсли;

обИсполнитель = Макет.ПолучитьОбласть("Исполнитель");
обИсполнитель.Параметры.Сотрудник = ВыборкаИсполнителей.Сотрудник;
обИсполнитель.Параметры.дата = Формат(ТекущаяДата(),"ДФ='''""''dd''""'' MMMM yyyy ""г.""'");
ПроверитьИВывести(ТабДок, обИсполнитель);
КонецЦикла;

Если ПерваяСтрока Тогда
ПроверитьИВывести(ТабДок, обИсполнительСЗаголовоком);
КонецЕсли;

// Комиссия
Если ИспользоватьКомиссии Тогда
ОбластьПредседатель = Макет.ПолучитьОбласть("ПредседательКомиссии");
ОбластьПредседатель.Параметры.ПредседательКомиссии = ВыборкаДокументов.ПредседательКомиссии;
ОбластьПредседатель.Параметры.Дата = Формат(ТекущаяДата(),"ДФ='''""''dd''""'' MMMM yyyy ""г.""'");
ПроверитьИВывести(ТабДок, ОбластьПредседатель);

ПерваяСтрока = Истина;
ОбластьЧленКомиссииСЗаголовком = Макет.ПолучитьОбласть("ЧленКомиссииСЗаголовком");

СтруктураПоискаПоСсылке = Новый Структура("Ссылка", ВыборкаДокументов.Ссылка);
Пока ВыборкаКомиссий.НайтиСледующий(СтруктураПоискаПоСсылке) Цикл
    Если ПерваяСтрока Тогда
ПерваяСтрока = Ложь;
ОбластьЧленКомиссииСЗаголовком.Параметры.ЧленКомиссии = ВыборкаКомиссий.ЧленКомиссии;
ОбластьЧленКомиссииСЗаголовком.Параметры.Дата = Формат(ТекущаяДата(),"ДФ='''""''dd''""'' MMMM yyyy ""г.""'");
ПроверитьИВывести(ТабДок, ОбластьЧленКомиссииСЗаголовком);
Продолжить;
КонецЕсли;

ОбластьЧленКомиссии = Макет.ПолучитьОбласть("ЧленКомиссии");
ОбластьЧленКомиссии.Параметры.ЧленКомиссии = ВыборкаКомиссий.ЧленКомиссии;
ОбластьЧленКомиссии.Параметры.дата = Формат(ТекущаяДата(),"ДФ='''""''dd''""'' MMMM yyyy ""г.""'");
ПроверитьИВывести(ТабДок, ОбластьЧленКомиссии);
КонецЦикла;

Если ПерваяСтрока Тогда
ПроверитьИВывести(ТабДок, ОбластьЧленКомиссииСЗаголовком);
КонецЕсли;

ВыборкаКомиссий.Сбросить();
КонецЕсли;

ВыборкаИсполнителей.Сбросить();
КонецЦикла;
КонецЦикла;

ТабДок.КлючПараметровПечати = "торо_НарядНаРаботы_НеОпасные";
Возврат ТабДок;

КонецФункции



Спасибо большое за помощь, Вы дали направление куда дальше копать, вроде понял) дальше наверно придется разбираться самому, потому что всего я не смогу объяснить, пока не все еще знаю)   

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск