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

Метод объекта не обнаружен

Автор Александр К, 28 окт 2015, 12:32

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

Александр К

Добрый день! Помогите найти косяк. Делаю ВПФ, для операции, введенных вручную, пытаюсь всунуть форму Т-53. Бухгалтерия базовая, 3.0.41.53.

Ошибка:

{ВнешняяОбработка.ммм.МодульОбъекта(155)}: Метод объекта не обнаружен (ВыборкаДляПечатиШап)
ВыборкаШапок = Менеджер.ВыборкаДляПечатиШап(МассивОбъектов);

Сам кусок кода обработки:

Функция ВыборкаДляПечатиШап(МассивОбъектов) Экспорт
   Запрос = Новый Запрос;
   Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
   Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
   Запрос.Текст =
   "ВЫБРАТЬ
   |   ОперацияБух.Ссылка,
   |   ОперацияБух.Номер,
   |   ОперацияБух.Дата,
   |   ОперацияБух.Организация КАК Организация,
   |   ВЫРАЗИТЬ(ОперацияБух.Организация.НаименованиеПолное КАК СТРОКА(300)) КАК НазваниеОрганизации,
   |   ОперацияБух.Организация.КодПоОКПО КАК КодПоОКПО,
   |   ОперацияБух.СуммаОперации КАК СуммаПоДокументу,
   |ПОМЕСТИТЬ ВТДанныеДокументов
   |ИЗ
   |   Документ.ОперацияБух КАК ОперацияБух";
   Запрос.Выполнить();
   Запрос.Текст =
   "ВЫБРАТЬ
   |   ВТДанныеДокументов.Ссылка,
   |   ВТДанныеДокументов.Номер КАК НомерДок,
   |   ВТДанныеДокументов.Дата КАК ДатаДок,
   |   ВТДанныеДокументов.Организация,
   |   ВТДанныеДокументов.НазваниеОрганизации,
   |   ВТДанныеДокументов.КодПоОКПО,
   |   ВТДанныеДокументов.СуммаПоДокументу,
   |ИЗ
   |   ВТДанныеДокументов КАК ВТДанныеДокументов
   |УПОРЯДОЧИТЬ ПО
   |   ВТДанныеДокументов.Дата,
   |   ВТДанныеДокументов.Номер";
   Возврат Запрос.Выполнить().Выбрать();
КонецФункции

Функция ПечатьТ53(МассивОбъектов, ОбъектыПечати)
   УстановитьПривилегированныйРежим(Истина);
   ТабДокумент = Новый ТабличныйДокумент;
   ТабДокумент.АвтоМасштаб            = Истина;
   ТабДокумент.РазмерКолонтитулаСверху   = 0;
   ТабДокумент.РазмерКолонтитулаСнизу   = 0;
   ТабДокумент.ОриентацияСтраницы      = ОриентацияСтраницы.Ландшафт;
   ТабДокумент.ИмяПараметровПечати      = "ПАРАМЕТРЫ_ПЕЧАТИ_ОперацияБух_Т53";
   Менеджер = Документы[МассивОбъектов[0].Метаданные().Имя];
    ВалютаУчета = ЗарплатаКадры.ВалютаУчетаЗаработнойПлаты();
    Макет = ПолучитьМакет("ПФ_MXL_Т53");
   ВыборкаШапок = Менеджер.ВыборкаДляПечатиШап(МассивОбъектов);
   ВыборкаСтрок = Менеджер.ВыборкаДляПечатиТаб(МассивОбъектов);
   ПервыйДокумент = Истина;
   Пока ВыборкаШапок.Следующий() Цикл
      Если Не ПервыйДокумент Тогда
         ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
      КонецЕсли;
      ПервыйДокумент = Ложь;
      НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;
      ВсегоСтрокДокумента = ВыборкаСтрок.Количество();
      ОбластьМакетаШапкаДокумента = Макет.ПолучитьОбласть("Шапка");
      ОбластьМакетаШапка         = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
      ОбластьМакетаСтрока       = Макет.ПолучитьОбласть("Строка");
      ОбластьМакетаИтого          = Макет.ПолучитьОбласть("Итого");
      ОбластьМакетаПодвал       = Макет.ПолучитьОбласть("Подвал");
      ВыводимыеОбласти = Новый Массив();
      ВыводимыеОбласти.Добавить(ОбластьМакетаСтрока);
      ВыводимыеОбласти.Добавить(ОбластьМакетаИтого);
      ОбластьМакетаШапкаДокумента.Параметры.Заполнить(ВыборкаШапок);
      ОбластьМакетаШапкаДокумента.Параметры.НазваниеОрганизации   = СокрЛП(ОбластьМакетаШапкаДокумента.Параметры.НазваниеОрганизации);
      ОбластьМакетаШапкаДокумента.Параметры.НомерДок            = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(ВыборкаШапок.НомерДок, Истина, Истина);   
      ОбластьМакетаШапка.Параметры.СуммаДок = РаботаСКурсамиВалют.СформироватьСуммуПрописью(ВыборкаШапок.СуммаПоДокументу, ВалютаУчета);
      ОбластьМакетаШапка.Параметры.СуммаДокРублей = Цел(ВыборкаШапок.СуммаПоДокументу);
      ОбластьМакетаШапка.Параметры.СуммаДокКопеек = (ВыборкаШапок.СуммаПоДокументу - Цел(ВыборкаШапок.СуммаПоДокументу)) * 100;
      ОбластьМакетаПодвал.Параметры.Заполнить(ВыборкаШапок); // Подвал документа.
      ОбластьМакетаПодвал.Параметры.РКО = "Расходный кассовый ордер № _______ от  ""___"" ___________ 20 ___ г.";
      ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
      ТабДокумент.Вывести(ОбластьМакетаШапка);
      ВыведеноСтраниц = 1; ВыведеноСтрок = 0; ИтогоНаСтранице = 0; Итого = 0;
      НомерСтроки = 0;
      ВыборкаСтрок.Сбросить();
      Пока ВыборкаСтрок.НайтиСледующий(ВыборкаШапок.Ссылка, "Ведомость") Цикл
         НомерСтроки = НомерСтроки + 1;
         ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаСтрок);
         ОбластьМакетаСтрока.Параметры.НомерСтроки = НомерСтроки;
         ОбластьМакетаСтрока.Параметры.ТабельныйНомер =       ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(ВыборкаСтрок.ТабельныйНомер, Истина, Истина);      
         ОбластьМакетаСтрока.Параметры.Физлицо = СокрЛП(ВыборкаСтрок.АналитикаДТ);
         ВыведеноСтрок = ВыведеноСтрок + 1;
         ВывестиПодвалЛиста = Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти);
         Если Не ВывестиПодвалЛиста И ВыведеноСтрок = ВсегоСтрокДокумента Тогда
            ВыводимыеОбласти.Добавить(ОбластьМакетаПодвал);
            ВывестиПодвалЛиста = Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти);
         КонецЕсли;
         Если ВывестиПодвалЛиста Тогда
            ОбластьМакетаИтого.Параметры.Итого = ИтогоНаСтранице;
            ТабДокумент.Вывести(ОбластьМакетаИтого);
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            ТабДокумент.Вывести(ОбластьМакетаШапка);
            ВыведеноСтраниц = ВыведеноСтраниц + 1;
            ИтогоНаСтранице = 0;
         КонецЕсли;
         ТабДокумент.Вывести(ОбластьМакетаСтрока);
         ИтогоНаСтранице = ИтогоНаСтранице + ВыборкаСтрок.Сумма;
         Итого = Итого + ВыборкаСтрок.Сумма;
      КонецЦикла; // по строкам документа
      Если ВыведеноСтрок > 0 Тогда
         ОбластьМакетаИтого.Параметры.ИтогоНаСтранице = ИтогоНаСтранице;
      КонецЕсли;
      ОбластьМакетаПодвал.Параметры.КоличествоЛистов = ?(ВыведеноСтрок = 0,"",ВыведеноСтраниц + 1);
      ВыводимыеОбласти = Новый Массив();
      ВыводимыеОбласти.Добавить(ОбластьМакетаСтрока);
      ВыводимыеОбласти.Добавить(ОбластьМакетаИтого);
      ВыводимыеОбласти.Добавить(ОбластьМакетаПодвал);
      Для Сч = 1 По ОбластьМакетаСтрока.Параметры.Количество() Цикл
         ОбластьМакетаСтрока.Параметры.Установить(Сч - 1,"");
      КонецЦикла;
      ОбластьМакетаСтрока.Параметры.АналитикаДт = " ";
      Пока ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти) Цикл
         ТабДокумент.Вывести(ОбластьМакетаСтрока);
      КонецЦикла;
      ТабДокумент.Вывести(ОбластьМакетаИтого);
      ТабДокумент.Вывести(ОбластьМакетаПодвал);
      УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаШапок.Ссылка);
   КонецЦикла; // по документам
   Возврат ТабДокумент;
КонецФункции

дфтын

в доукументе Документы[МассивОбъектов[0].Метаданные().Имя]; должен быть в менеджеры функция али процедура экспортная с названием ВыборкаДляПечатиШап

Александр К

дфтын, Точно, спасибо!)) Правда, задача стала еще более сложной, придется как-нибудь по другому делать видимо)

Kironten

Цитата: Александр К от 28 окт 2015, 14:22
дфтын, Точно, спасибо!)) Правда, задача стала еще более сложной, придется как-нибудь по другому делать видимо)
А чего сложного? вы же судя по коду себе в впф вынесли формирование выборки. Её и используйте.

Александр К

Kironten, Поменял Документ на ВнешнююОбработку, стал выдавать: Поле объекта не обнаружено (ОперацияБух). Так понимаю, она теперь ищет данные поля в выборке, которых в ней нет. Как именно это исправить - уже мозгов или опыта не хватает

Добавлено: 28 окт 2015, 14:52


Kironten, Проблема в том, что выборка взята из ВедомостиНаВыплатуЗарплатыИзКассы, и изменена. А в документе ОперацияБух ничего похожего нет

Kironten

Цитата: Александр К от 28 окт 2015, 14:47
Kironten, Проблема в том, что выборка взята из ВедомостиНаВыплатуЗарплатыИзКассы, и изменена. А в документе ОперацияБух ничего похожего нет
По коду я вижу есть получение всех данных, ВСЕХ документов ОперацияБух. Выборки из ВедомостиНаВыплатуЗарплатыИзКассы я в коде не вижу.

Александр К

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

Kironten

Цитата: Александр К от 28 окт 2015, 15:15
Kironten, Т.е. мне нужно сделать так, чтобы обработка получала данные из определенного документа, а не из всех, если я правильно понял.
нет, неправильно.
У вас и так в МассивОбъектов должны попадать нужные документы.
Я говорю о том коде, что вы привели:
Функция ВыборкаДляПечатиШап(МассивОбъектов) Экспорт
   Запрос = Новый Запрос;
   Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
   Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
   Запрос.Текст =
   "ВЫБРАТЬ
   |   ОперацияБух.Ссылка,
   |   ОперацияБух.Номер,
   |   ОперацияБух.Дата,
   |   ОперацияБух.Организация КАК Организация,
   |   ВЫРАЗИТЬ(ОперацияБух.Организация.НаименованиеПолное КАК СТРОКА(300)) КАК НазваниеОрганизации,
   |   ОперацияБух.Организация.КодПоОКПО КАК КодПоОКПО,
   |   ОперацияБух.СуммаОперации КАК СуммаПоДокументу,
   |ПОМЕСТИТЬ ВТДанныеДокументов
   |ИЗ
   |   Документ.ОперацияБух КАК ОперацияБух";
   Запрос.Выполнить();
   Запрос.Текст =
   "ВЫБРАТЬ
   |   ВТДанныеДокументов.Ссылка,
   |   ВТДанныеДокументов.Номер КАК НомерДок,
   |   ВТДанныеДокументов.Дата КАК ДатаДок,
   |   ВТДанныеДокументов.Организация,
   |   ВТДанныеДокументов.НазваниеОрганизации,
   |   ВТДанныеДокументов.КодПоОКПО,
   |   ВТДанныеДокументов.СуммаПоДокументу,
   |ИЗ
   |   ВТДанныеДокументов КАК ВТДанныеДокументов
   |УПОРЯДОЧИТЬ ПО
   |   ВТДанныеДокументов.Дата,
   |   ВТДанныеДокументов.Номер";
   Возврат Запрос.Выполнить().Выбрать();
КонецФункции


Я вижу в нем выборку из всех документов БухОперация не ограниченная МассивомОбъектов.
Выборки же по какой то там ведомости на зарплату в вашем коде нигде не видно.
Вам просто нужно все неэкспортные процедуры, которые участвуют в формировании ПФ перегнать в вашу обработку.

Я бы сделал так:
   //Менеджер = Документы[МассивОбъектов[0].Метаданные().Имя];
    ВалютаУчета = ЗарплатаКадры.ВалютаУчетаЗаработнойПлаты();
    Макет = ПолучитьМакет("ПФ_MXL_Т53");
   ВыборкаШапок = ВыборкаДляПечатиШап(МассивОбъектов);
   ВыборкаСтрок = ВыборкаДляПечатиТаб(МассивОбъектов);

А Функции ВыборкаДляПечатиШап(..) и ВыборкаДляПечатиТаб(..) из модуля менеджера документа БухОперация перенес бы в модуль обработки.

Да, и:
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(...)
Это тоже лучше перенести в обработку. Там мутабельные значения иначе кататься будут.

Александр К

Kironten, Да вроде как все на месте.... ВыборкаДляПечатиШап и ВыборкаДляПечатиТаб есть, больше она вроде ниоткуда не берет данные.

Полный код обработки:
Функция СведенияОВнешнейОбработке() Экспорт
   
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    МассивНазначений.Добавить("Документ.ОперацияБух");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Т-53 для ручной операции");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("Версия", "для БП 3.0");   
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма 'Т-53' к документу Ручная операция");
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "Т53", "ПФ_MXL_Т53", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;

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

Функция ПолучитьТаблицуКоманд()

   Команды = Новый ТаблицаЗначений;
   Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
   Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
   Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
   Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
   Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
   
   Возврат Команды;
   
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;

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

КонецПроцедуры

Функция ВыборкаДляПечатиШап(МассивОбъектов) Экспорт

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);


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

Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| ВТДанныеДокументов.Ссылка,
| ВТДанныеДокументов.Номер КАК НомерДок,
| ВТДанныеДокументов.Дата КАК ДатаДок,
| ВТДанныеДокументов.Организация,
| ВТДанныеДокументов.НазваниеОрганизации,
| ВТДанныеДокументов.КодПоОКПО,
| ВТДанныеДокументов.СуммаПоДокументу,
|ИЗ
| ВТДанныеДокументов КАК ВТДанныеДокументов
|УПОРЯДОЧИТЬ ПО
| ВТДанныеДокументов.Дата,
| ВТДанныеДокументов.Номер";

Возврат Запрос.Выполнить().Выбрать();

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

Функция ВыборкаДляПечатиТаб(МассивОбъектов) Экспорт

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);

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


Возврат Запрос.Выполнить().Выбрать();


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

Функция ПечатьТ53(МассивОбъектов, ОбъектыПечати)

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

Менеджер = ВнешниеОбработки[МассивОбъектов[0].Метаданные().Имя];
    ВалютаУчета = ЗарплатаКадры.ВалютаУчетаЗаработнойПлаты();


//Получаем макет;
    Макет = ПолучитьМакет("ПФ_MXL_Т53");

ВыборкаШапок = Менеджер.ВыборкаДляПечатиШап(МассивОбъектов);
ВыборкаСтрок = Менеджер.ВыборкаДляПечатиТаб(МассивОбъектов);

ПервыйДокумент = Истина;
Пока ВыборкаШапок.Следующий() Цикл

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

// Запомним номер строки, с которой начали выводить текущий документ.
НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;

// Подсчитываем количество страниц документа - для корректного разбиения на страницы.
ВсегоСтрокДокумента = ВыборкаСтрок.Количество();

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

// Массив с двумя строками - для разбиения на страницы.
ВыводимыеОбласти = Новый Массив();
ВыводимыеОбласти.Добавить(ОбластьМакетаСтрока);
ВыводимыеОбласти.Добавить(ОбластьМакетаИтого);

// выводим данные о документе
ОбластьМакетаШапкаДокумента.Параметры.Заполнить(ВыборкаШапок);
ОбластьМакетаШапкаДокумента.Параметры.НазваниеОрганизации = СокрЛП(ОбластьМакетаШапкаДокумента.Параметры.НазваниеОрганизации);
ОбластьМакетаШапкаДокумента.Параметры.НомерДок = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(ВыборкаШапок.НомерДок, Истина, Истина);

ОбластьМакетаШапка.Параметры.СуммаДок = РаботаСКурсамиВалют.СформироватьСуммуПрописью(ВыборкаШапок.СуммаПоДокументу, ВалютаУчета);
ОбластьМакетаШапка.Параметры.СуммаДокРублей = Цел(ВыборкаШапок.СуммаПоДокументу);
ОбластьМакетаШапка.Параметры.СуммаДокКопеек = (ВыборкаШапок.СуммаПоДокументу - Цел(ВыборкаШапок.СуммаПоДокументу)) * 100;

ОбластьМакетаПодвал.Параметры.Заполнить(ВыборкаШапок); // Подвал документа.
// Строка не локализуется т.к. является частью регламентированной формы, применяемой в РФ.
ОбластьМакетаПодвал.Параметры.РКО = "Расходный кассовый ордер № _______ от  ""___"" ___________ 20 ___ г.";

ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабДокумент.Вывести(ОбластьМакетаШапка);

ВыведеноСтраниц = 1; ВыведеноСтрок = 0; ИтогоНаСтранице = 0; Итого = 0;

// Выводим данные по строкам документа.
НомерСтроки = 0;
ВыборкаСтрок.Сбросить();
Пока ВыборкаСтрок.НайтиСледующий(ВыборкаШапок.Ссылка, "Ведомость") Цикл

НомерСтроки = НомерСтроки + 1;

ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаСтрок);
ОбластьМакетаСтрока.Параметры.НомерСтроки = НомерСтроки;
ОбластьМакетаСтрока.Параметры.ТабельныйНомер =
ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(ВыборкаСтрок.ТабельныйНомер, Истина, Истина);

ОбластьМакетаСтрока.Параметры.Физлицо = СокрЛП(ВыборкаСтрок.АналитикаДТ);
                                                                     
// разбиение на страницы
ВыведеноСтрок = ВыведеноСтрок + 1;

// Проверим, уместится ли строка на странице или надо открывать новую страницу.
ВывестиПодвалЛиста = Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти);
Если Не ВывестиПодвалЛиста И ВыведеноСтрок = ВсегоСтрокДокумента Тогда
ВыводимыеОбласти.Добавить(ОбластьМакетаПодвал);
ВывестиПодвалЛиста = Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти);
КонецЕсли;
Если ВывестиПодвалЛиста Тогда

ОбластьМакетаИтого.Параметры.Итого = ИтогоНаСтранице;
ТабДокумент.Вывести(ОбластьМакетаИтого);
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабДокумент.Вывести(ОбластьМакетаШапка);
ВыведеноСтраниц = ВыведеноСтраниц + 1;
ИтогоНаСтранице = 0;

КонецЕсли;

ТабДокумент.Вывести(ОбластьМакетаСтрока);
ИтогоНаСтранице = ИтогоНаСтранице + ВыборкаСтрок.Сумма;
Итого = Итого + ВыборкаСтрок.Сумма;

КонецЦикла; // по строкам документа

Если ВыведеноСтрок > 0 Тогда
ОбластьМакетаИтого.Параметры.ИтогоНаСтранице = ИтогоНаСтранице;
КонецЕсли;
ОбластьМакетаПодвал.Параметры.КоличествоЛистов = ?(ВыведеноСтрок = 0,"",ВыведеноСтраниц + 1);

ВыводимыеОбласти = Новый Массив();
ВыводимыеОбласти.Добавить(ОбластьМакетаСтрока);
ВыводимыеОбласти.Добавить(ОбластьМакетаИтого);
ВыводимыеОбласти.Добавить(ОбластьМакетаПодвал);
Для Сч = 1 По ОбластьМакетаСтрока.Параметры.Количество() Цикл
ОбластьМакетаСтрока.Параметры.Установить(Сч - 1,"");
КонецЦикла;
ОбластьМакетаСтрока.Параметры.АналитикаДт = " ";
Пока ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти) Цикл
ТабДокумент.Вывести(ОбластьМакетаСтрока);
КонецЦикла;
ТабДокумент.Вывести(ОбластьМакетаИтого);
ТабДокумент.Вывести(ОбластьМакетаПодвал);

// В табличном документе необходимо задать имя области, в которую был
// выведен объект. Нужно для возможности печати покомплектно.
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаШапок.Ссылка);

КонецЦикла; // по документам

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

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

//Справочники.Валюты.НайтиПоКоду("643")

Добавлено: 28 окт 2015, 15:43


Kironten, Ого.... Спасибо!!!)) Сейчас будем пробовать!

Kironten

Попробуйте так:

//Менеджер = Документы[МассивОбъектов[0].Метаданные().Имя]; //закомментируйте
ВалютаУчета = ЗарплатаКадры.ВалютаУчетаЗаработнойПлаты();
Макет = ПолучитьМакет("ПФ_MXL_Т53");
ВыборкаШапок = ВыборкаДляПечатиШап(МассивОбъектов); // вместо Менеджер.ВыборкаДляПечатиШап(МассивОбъектов)
ВыборкаСтрок = ВыборкаДляПечатиТаб(МассивОбъектов); // вместо Менеджер.ВыборкаДляПечатиТаб(МассивОбъектов)

В том коде, что у вас приведен, несмотря на то, что получение выборок вы перенесли в обработку, обращаетесь за данными вы все равно к модулю менеджера документа.

Кроме того:
Функция ВыборкаДляПечатиШап(МассивОбъектов) Экспорт

    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
   
    Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);


    Запрос.Текст =
    "ВЫБРАТЬ
    |    ОперацияБух.Ссылка,
    |    ОперацияБух.Номер,
    |    ОперацияБух.Дата,
    |    ОперацияБух.Организация КАК Организация,
    |    ВЫРАЗИТЬ(ОперацияБух.Организация.НаименованиеПолное КАК СТРОКА(300)) КАК НазваниеОрганизации,
    |    ОперацияБух.Организация.КодПоОКПО КАК КодПоОКПО,
    |    ОперацияБух.СуммаОперации КАК СуммаПоДокументу,
    |ПОМЕСТИТЬ ВТДанныеДокументов
    |ИЗ
    |    Документ.ОперацияБух КАК ОперацияБух
    |ГДЕ                                                //добавьте эти строки
    |    ОперацияБух.Ссылка В (&МассивОбъектов)";       // этим вы ограничите получение документов операция массивом переданных документов.
   
    Запрос.Выполнить();
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВТДанныеДокументов.Ссылка,
    |    ВТДанныеДокументов.Номер КАК НомерДок,
    |    ВТДанныеДокументов.Дата КАК ДатаДок,
    |    ВТДанныеДокументов.Организация,
    |    ВТДанныеДокументов.НазваниеОрганизации,
    |    ВТДанныеДокументов.КодПоОКПО,
    |    ВТДанныеДокументов.СуммаПоДокументу,
    |ИЗ
    |    ВТДанныеДокументов КАК ВТДанныеДокументов
    |УПОРЯДОЧИТЬ ПО
    |    ВТДанныеДокументов.Дата,
    |    ВТДанныеДокументов.Номер";
   
    Возврат Запрос.Выполнить().Выбрать();
   
КонецФункции

Теги:

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

Рейтинг@Mail.ru

Поиск