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

Как объявить ДокОбъект

Автор divaterwch, 28 окт 2024, 10:47

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

divaterwch

Добрый день! В функции объявлял ДокОбъект в параметрах, но появилась надобность объявления в самой функции. Однако если писать ДокОбъект = Документы.ВедомостьНаВыплатуЗарплатыВБанк, то везде где используется ДокОбъект, например, ссылка или дата, выходит ошибка "Поле объекта не обнаружено". Не понимаю в чем затуп, подскажите


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

Максим75

divaterwch, так сам Объект надо получить. скорее всего в МассивОбъектов живут сами объекты, вот оттуда и надо получить.

divaterwch

Максим75,
ВыбДок = Документы.ВедомостьНаВыплатуЗарплатыВБанк; 
   
   
ДокОбъект = ВыбДок.ПолучитьОбъект();

Если писать так, то ошибка "Метод объекта не обнаружен (ПолучитьОбъект)"

Максим75

divaterwch, ПолучитьОбъект Вы можете из Ссылки, а так не работает, как у Вас.
еще раз посмотрите, что Вы передаете в качестве параметров в функцию. вот явно там у Вас должны быть ссылки, а из ссылки уже получаете объект. Можно даже не объявлять его ВыбДок = Документы.ВедомостьНаВыплатуЗарплатыВБанк;

Вы откуда эту функцию вызываете ВывестиДанныеДокумента? из самого документа или из внешней обработки?

divaterwch

Максим75, из внешней обработки

Максим75

divaterwch, что в МассивОбъектов и ОбъектыПечати Вы передаете?

divaterwch

Максим75, весь код печатной формы

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

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

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

Функция ВывестиВсеВедомости () 
   
    Запрос = Новый Запрос;

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

РезультатЗапроса  = Запрос.Выполнить();
ЧислоКолонокЗапроса = РезультатЗапроса.Колонки.Количество();
Заголовки = Новый Структура;
ТД = Новый ТабличныйДокумент;
 ОбластьВывода = ТД.ПолучитьОбласть(1, 1, 1, ЧислоКолонокЗапроса);

// Выведем заголовок
    ОбластьВыводаЗаголовок = ТД.ПолучитьОбласть(1, 1, 1, ЧислоКолонокЗапроса);
    ОбластьЯчеекТД = ОбластьВыводаЗаголовок.Область();
    ОбластьЯчеекТД.Объединить();
    ОбластьЯчеекТД.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево;
    ОбластьЯчеекТД.ЦветТекста = WebЦвета.Синий;
    ОбластьЯчеекТД.Шрифт = Новый Шрифт(, 14, Истина, , , );
    ОбластьЯчеекТД.Текст = "        "+"ТестЗаголовка";
    ТД.Вывести(ОбластьВыводаЗаголовок);
   
    ОбластьВывода.Область().СоздатьФорматСтрок();
    Для Счетчик = 1 по ЧислоКолонокЗапроса Цикл
        ОбластьЗаполнения = ОбластьВывода.Область(1, Счетчик, 1, Счетчик);
        //ОбластьЗаполнения.ЦветТекста = Новый Цвет(0, 255, 0);
        ОбластьЗаполнения.ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);
        ОбластьЗаполнения.ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);
        ОбластьЗаполнения.ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);
        ОбластьЗаполнения.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);
       
    Колонка = РезультатЗапроса.Колонки[Счетчик-1];
    ОбластьЗаполнения.ШиринаКолонки = СтрДлина(Колонка.Имя);
        ОбластьЗаполнения.Параметр = Колонка.Имя;
        ОбластьЗаполнения.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Параметр;
        Заголовки.Вставить(Колонка.Имя, Колонка.Имя);
       
    КонецЦикла;
    ОбластьВывода.Параметры.Заполнить(Заголовки);
    ТД.Вывести(ОбластьВывода);
    Выборка=РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        ОбластьВывода.Параметры.Заполнить(Выборка);
        ТД.Вывести(ОбластьВывода);
    КонецЦикла;   
КонецФункции

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

// Возвращает данные шапки документов для печати.
//
// Параметры:
//  Ведомости - Массив - документы, данные которых возвращаются (ДокументСсылка.ВедомостьНаВыплатуЗарплатыВБанк).
//
// Возвращаемое значение:
//  ВыборкаИзРезультатаЗапроса
//
Функция ВыборкаДляПечатиШапки(Ведомости) Экспорт
    Возврат ВедомостьНаВыплатуЗарплаты.ВыборкаДляПечатиШапкиПриВыплатеБезналично(
        Метаданные.Документы.ВедомостьНаВыплатуЗарплатыВБанк.ПолноеИмя(),           
        Ведомости)
КонецФункции

// Формирует запрос по табличной части документа.
//
// Параметры:
//  ДокументСсылка    - ссылка на документ.
//  ДатаДокумента    - дата документ.
//
// Возвращаемое значение:
//  Результат запроса
//
Функция ВыборкаДляПечатиТаблицы(Ведомости) Экспорт

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

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

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

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

#КонецОбласти         

#КонецЕсли

Максим75

divaterwch, вот здесь Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
что такое МассивОбъектов? как он заполняется? понятно, что это внешняя печатная форма, но она явно вызывается из документа и значит в нее передается сам документ (ссылка на него). Вот эта ссылка и нужна, чтобы из ссылки получить объект.

divaterwch

Максим75, да, как раз в МассивОбъектов хранится ссылка на документ, но как правильно получить объект?

ДокОбъект =  Массивобъектов.ПолучитьОбъект(); Ошибка "Метод объекта не обнаружен (ПолучитьОбъект)
"

LexaK

divaterwch, А кто вам сказал, что для печати надо получать именно Объект?
обычно используют Запрос или из ссылки через точку получают значения реквизитов
попробуйте так
ДокОбъект =  Массивобъектов[0];
если помогло нажмите: Спасибо!

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

Рейтинг@Mail.ru

Поиск