v8: Как вывести результат компоновки в таблицу значений
Потребовалось и решил познакомиться с этим монстром на примере типового отчета зупы РасчетныеЛисткиОрганизаций.
Мне было нужно программно получить результат выполнения КомпоновщикМакетаКомпоновкиДанных (некоторых полей). Решил что это можно (удобнее) сделать через ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений
тыкаюсь в типовой код (немного упростил структуру и своё добавил):
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
// создадим и инициализируем процессор компоновки данных
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
//свой кусок
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
//
Обрадовался, вот думаю сейчас готовую таблицу получу.
<Отчет.РасчетныеЛисткиОрганизаций.МодульОбъекта(650)>: Ошибка при вызове метода контекста (Вывести)
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
по причине:
Ошибка вывода результата
по причине:
Неизвестный тип макета
Попробовал обойти в цикле по элементно через ПроцессорКомпоновкиДанных.Следующий()
ошибка та же самая.
мне кажется что всё дело вообще в самом отчёте (ОсновнойСхемеКомпоновкиДанных).
Что мне проверить или сравнить?
Источник
Ошибка при вызове метода контекста (Вывести)
Подскажите в чем проблема?
ТабДокумент = Новый ТабличныйДокумент;
//Получим данные из документа
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
|РегистрацияРазовыхНачисленийРаботниковОрганизаций.Номер,
|РегистрацияРазовыхНачисленийРаботниковОрганизаций.Дата
|ИЗ
|Документ.РегистрацияРазовыхНачисленийРаботниковОрганизаций
КАК РегистрацияРазовыхНачисленийРаботниковОрганизаций
|ГДЕ
|РегистрацияРазовыхНачисленийРаботниковОрганизаций.Ссылка = &ТекущийДокумент»;
Запрос.УстановитьПараметр(«ТекущийДокумент», СсылкаНаОбъект); //используем в качестве параметра реквизит обработки СсылкаНаОбъект
Пока Данные.Следующий() Цикл
//Создадим и заполним табличный документ
Макет = ПолучитьМакет(«МатериальнаяПомощь»);
ОбластьШапки = Макет.ПолучитьОбласть(«Шапка»);
ОбластьШапки.Параметры.НомерДок=Данные.Номер;
ОбластьШапки.Параметры.ДатаДок=Данные.Дата;
КонецЦикла;
ТабДокумент.Вывести(ОбластьШапки);
Запрос1 = Новый Запрос;
Запрос1.Текст = «ВЫБРАТЬ
| РегистрацияРазовыхНачисленийРаботниковОрганизацийОсновныеНачисления.Сотрудник.Код КАК Код,
| РегистрацияРазовыхНачисленийРаботниковОрганизацийОсновныеНачисления.Сотрудник.ПодразделениеОрганизации.Ссылка КАК Подразделение,
| РегистрацияРазовыхНачисленийРаботниковОрганизацийОсновныеНачисления.Сотрудник.Должность.Ссылка КАК Должность,
| РегистрацияРазовыхНачисленийРаботниковОрганизацийОсновныеНачисления.Сотрудник.Ссылка КАК ФИО,
| РегистрацияРазовыхНачисленийРаботниковОрганизацийОсновныеНачисления.ВидРасчета.Ссылка КАК ВидПомощи
|ИЗ
| Документ.РегистрацияРазовыхНачисленийРаботниковОрганизаций.ОсновныеНачисления КАК РегистрацияРазовыхНачисленийРаботниковОрганизацийОсновныеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РегистрацияРазовыхНачисленийРаботниковОрганизаций КАК РегистрацияРазовыхНачисленийРаботниковОрганизаций
| ПО РегистрацияРазовыхНачисленийРаботниковОрганизацийОсновныеНачисления.Ссылка = РегистрацияРазовыхНачисленийРаботниковОрганизаций.Ссылка
|ГДЕ
| РегистрацияРазовыхНачисленийРаботниковОрганизаций.Ссылка = &ТекущийДокумент»;
Запрос1.УстановитьПараметр(«ТекущийДокумент», СсылкаНаОбъект); //используем в качестве параметра реквизит обработки СсылкаНаОбъект
Данные1 = Запрос1.Выполнить().Выбрать();
Пока Данные1.Следующий() Цикл
////Создадим и заполним табличный документ
Макет1 = ПолучитьМакет(«МатериальнаяПомощь»);
ОбластьПодвал = Макет1.ПолучитьОбласть(«Подвал»);
ОбластьПодвал.Параметры.Работник=Данные1.ФИО;
ОбластьПодвал.Параметры.ТабНомер=Данные1.Код;
ОбластьПодвал.Параметры.Подразделение=Данные1.Подразделение;
ОбластьПодвал.Параметры.Должность=Данные1.Должность;
ОбластьПодвал.Параметры.ВидПомощи=Данные1.ВидПомощи;
КонецЦикла;
При выполнении выводится — Ошибка при вызове метода контекста (Вывести): Несоответствие типов (параметр номер ‘1’)
Источник
ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений
Ошибка: неизвестный тип макета
Кто сталкивался, что не так?
(1) Правильный пример. Тут для дерева значений, разберётесь, что к чему
в таком варианте пишет ошибку
<Форма.ФормаОтчета.Форма(13)>: Ошибка при вызове метода контекста (Выполнить)
МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, ЭтотОбъект.КомпоновщикНастроек.Настройки. Тип(«ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений»));//
по причине:
Ошибка компоновки макета
по причине:
Ошибка генерации макета
по причине:
Не поддерживается вывод таблиц, диаграмм и вложенных отчетов в универсальную коллекцию значений
(5) Поначалу подумал, что затролили..
а в итоге и вправду наткнулся именно на эту граблю:
— в настройках была Таблица, а в Тз передает только детальные записи.
(11) Здравия, не могли бы расписать вместо . код?
//2.Вернул настройки даты
.
//3.Вернул отбор из предыдущего варианта
.
сделан отчет в СКД (движение материалов)
на форме объекта — кнопка Печать, которая печатает таблицу результата с шапкой (добавлена отдельным макетом).
Первый раз формирует Таблицу результата и выводит в табличный документ с шапкой хорошо. Второй раз при формировании отчета ругается:
Платформа: 1С:Предприятие 8.3 (8.3.4.465)
Конфигурация: Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.29.8)
Ошибки:
Неправильный путь к файлу ‘ДанныеРасшифровкиКомпоновкиДанных’
Текст процедуры печати — ниже.
Что не так?
Теперь:
— Не ругается выводит
— Область заголовка отчета и область таблицы данных не всегда соответствуют по правому краю (как-то передвинуть бы заголовок по краю области таблицы, или для таблицы какой-то макет создать?)
— при повторном отборе по другому складу ругается так же на
Неправильный путь к файлу ‘ДанныеРасшифровкиКомпоновкиДанных’ (может быть в первый раз создать Новый ДанныеРасшифровкиКомпоновкиДанных и впоследствии проверять: если он есть, то использовать его?)
Через некоторое время (возможно звезды правильно расположились) отчет стал формироваться и печататься «без ругани».
Источник
Ошибка при вызове метода контекста в 1С
Любой программист 1С встречался с таким сообщением, как «Ошибка при вызове метода контекста (Выполнить)». Обычно эта ошибка не вызывает затруднения у опытного программиста. Почему она возникает? Рассмотрим ниже.
Как в любом языке программирования, в платформе 1С есть предопределенные методы, которые облегчают жизнь разработчикам. Но выполнение этих команд требует правильного соблюдения синтаксиса языка программирования.
Самые распространенные ошибки при вызове типовых методов:
- Записать
- Создать
- Подключиться
- Connect
- ПроверитьВывод
- PreviewFile1C
- Прочитать
- Выполнить
- ВыполнитьПакет
- ПрочитатьИзменения
Рассмотрим пример. Мы программно создали запрос (справочник по запросам), передав в параметры «текст» вот такой фрагмент:
В конструкции «ГДЕ» мы преднамеренно ошиблись, поставив «И», но не прописав еще одно условие. Совершенно логично, что 1С не сможет справиться с таким запросом и выдаст ошибку:
<МодульСеанса(21)>: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
<(13, 4)>: Синтаксическая ошибка
И >
Рассмотрим еще один пример:
Получите понятные самоучители по 1С бесплатно:
Перенесем ошибочный код в обработчик «ПередЗаписью» справочника «Версии программ» и попробуем записать справочник программно. Видим ошибку:
<МодульСеанса(8)>: Ошибка при вызове метода контекста (Записать)
Выборка.ПолучитьОбъект().Записать();
по причине:
Ошибка при выполнении обработчика — ‘ПередЗаписью’
по причине:
<Справочник.ВерсииПрограмм.МодульОбъекта(20)>: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
<(13, 4)>: Синтаксическая ошибка
И >
Несмотря на то, что ошибка заключается в выполнения метода «Выполнить», система ругается и на строчку кода, где вызывается программная запись объекта.
Решение проблемы
Для решения проблемы достаточно понять, в чем именно заключается ошибка. В 99% случаев проблема решается банальным чтением справки и анализом проблемы.
Для того чтобы узнать, как пользоваться тем или иным методом, достаточно установить курсор на интересующей Вас функции и нажать «Ctrl + F1». Платформа 1С выдаст Вам контекстную подсказку по требуемому методу:
Проверьте параметры, передаваемые в функцию, и правильность её использования.
Другие статьи по 1С:
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Источник
АйТиБложик
Маленький IT блог с характером 1С.
Ошибка хитрого метода ПроверитьВывод() табличного документа
- Получить ссылку
- Электронная почта
- Другие приложения
Столкнулся с такой ошибкой, при выводе информации на печатную форму, платформа выдает следующее сообщение:
Ошибка при вызове метода контекста (ПроверитьВывод).
ПроверитьВывод() — это метод табличного документа, который проверяет, умещаются ли переданные табличные документы на страницу при печати. В примечании у этого метода разработчики платформы 1С сразу написали, что при возникновении проблем с получением информации о текущем принтере (например, в системе не установлено ни одного принтера), будет вызвано исключение.
Проверил установленные принтеры, все исправно и работает. Эмпирическим путем выяснил, что данная ошибка возникает только у конкретной печатной формы и только под одним пользователем.
Ошибка решилась следующими действиями (выполнять под пользователем, у которого возникла ошибка):
1) Создал пустой документ, что бы при формировании печатной формы не был задействован метод ПроверитьВывод(). Если же этот метод в любом случае вызывается, то придется его найти в конфигурации и закомментировать, или же поместить в конструкцию Попытка-Исключение-КонецПопытки.
1. Помещение ПроверитьВывод в попытку |
2) Сформировал печатную форму.
2. Пустая печатная форма (кол-во товаров = 0) |
3) Для текущей печатной формы открыл параметры страницы и установил правильные параметры.
3. Параметры страницы |
Ошибка возникала из-за неправильных параметров страницы, которые платформа сохранила ранее при выводе на печать печатной формы, например: платформа сохранила в параметрах страницы принтер, который в дальнейшем удалили и установили новый. Параметры страницы печатной формы хранятся в свойстве табличного документа КлючПараметровПечати. Это свойство содержит ключ значения, в котором сохраняются параметры печати таблицы. Параметры печати, настроенные и сохраненные с данным ключом, впоследствии восстанавливаются при следующем показе таблицы.
Что бы данная ошибка не возникала из-за неправильных параметров страницы, свойство КлючПараметровПечати следует устанавливать не в начале процедуры вывода на печать, а в конце, так как при установке данного свойства параметры печати тут же восстанавливаются.
UPD 04/10/2015: Если устанавливать свойство КлючПараметровПечати в конце формирования табличного документа, то метод ПроверитьВывод будет использовать параметры печати установленные по-умолчанию, а не пользовательские. Что бы избежать данной ситуации, необходимо устанавливать свойство КлючПараметровСистемы в начале формирования табличного документа, а метод ПроверитьВывод поместить в конструкцию Попытка-Исключение-КонецПопытки.
Источник