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

Как во внешнем отчете обратиться к функции модуля формы этого отчета?

Автор Алексей2014, 25 июн 2014, 14:16

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

Алексей2014

Есть внешний отчет. Как в Основной схеме компоновки данных, в вычисляемых полях, прописать обращение к функции, расположенной в модуле формы этого внешнего отчета?

Алексей2014

Если функция расположена в общем модуле, то достаточно указать во внешней обработке Имя Общ.модуля и Имя функции, напр.: МойМодуль.МояФункция(Параметр1,...) 

Если функция находится в самом внешнем модуле, обращение типа ЭтотОбъект.МояФункция(Параметр1,...) выдает, что Функция не найдена.

wise

Цитата: Алексей2014 от 25 июн 2014, 14:16функция расположенна в модуле формы этого отчета

НАДО:
сделать функцию ЭКСПОРТНОЙ
создать форму
обратиться к функции

НужнаяФорма = ЭтотОбъект.ПолучитьФорму("НужнаяФорма");
НужнаяПеременная = НужнаяФорма.МояФункция(Параметр1,...);

Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Алексей2014

Не совсем.С самого начала:
1.Запускаем внешний отчет
2.Что нужно прописать в вычисляемом поле СКД, чтобы обратиться к функции, расположенной в форме (в модуле формы этого внешнего отчета), чтобы она вычислилась?

Ваш вариант видимо должен работать при обращении к функции из другой функции или процедуры модуля. Но вопрос как вызвать процедуру (внешнего отчета)  из СКД?

Silantiy


vitasw

Нет. В СКД можно использовать только функции общих модулей.

cska-fanat-kz

при этом мониторить новые платформы - могут добавить вызов и не только из общих модулей.
но именно как в сабже - думаю не будет никогда.
понимаю если в модуле ОБЪЕКТА отчета - тогда может быть...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

salikoff

Решение есть:
http://infostart.ru/public/145230/

Использование функций внешнего отчета в вычисляемых полях системы компоновки данных. Добавлена поддержка расшифровки.

Нужно ли при необходимости использования новой функции в вычисляемых полях СКД всякий раз описывать её в общем модуле ?
НЕТ ! Если один раз описать в общем модуле универсальную функцию.
По предложению sam441 добавлена поддержка расшифровки в отчете.
В демонстрационном примере расшифровка открывается для всех полей отчета.

Отмазка

Некоторым эта статья покажется диким баяном - бабаяном ... но не все же являются матерыми одинэсниками в седьмом поколении. Так что эта статья для тех, кто не является.

Преамбула

Зачем это нужно ? При сопровождении больших проектов, как правило, новые релизы конфигураций выпускаются намного реже, чем новые внешние отчеты и печатные формы. А обновляются у заказчика еще реже, особенно если баз данных у него много :) Поэтому часто возникают ситуации, когда отчет заказчику нужен срочно, а конфигурации, установленные у него, не имеют нужной прямо сейчас функции общего модуля. Можно, конечно, выкрутиться, если передать в отчет объект (например - таблицу значений), который можно вычислить как душе угодно. Но зачем выкручиваться, если можно использовать экспортные функции этого же отчета в вычисляемых полях СКД ? Статья как раз о том, как это сделать.

Амбула

Собственно, всё достаточно просто:

  1. в сопровождаемую конфигурацию внедряем экспортную функцию общего модуля;
  2. добавляем параметр со своим любимым именем в макет СКД отчета (в примере это имя "Отчет");
  3. в модуле формы этому параметру при запуске отчета присваиваем значение объекта;
  4. в вычисляемом поле вызываем функцию модуля отчета через посредника - функцию общего модуля, например: ом.Фу(&Отчет,"Ф2",Наименование,5) . В этом вызове &Отчет - это введенный нами параметр, Ф2 - имя функции, размещенной в модуле отчета, Наименование и 5 - это аргументы, которые будут переданы в Ф2.

Небольшой пример: демо-база и демонстрационный внешний отчет для управляемого приложения прилагаются. Но и для обычного нет преград. Тоже всё работает. Представленная технология позволяет вызывать экспортные функции модулей внешних отчетов и обработок.

Внедрение одной небольшой универсальной экспортной функции-посредника в общий модуль конфигурации позволяет забыть об ограничении платформы - разрешении на использование в вычисляемых полях СКД только экспортных функций общих модулей конфигурации.

Замечания:

В ходе тестирования обнаружилось различное поведение конфигурации при запуске под платформой 8.3, несмотря на то, что установлен режим совместимости с версией 8.2.16.

Сравнивались версии платформы 1С:Предприятие 8.3 (8.3.2.172) и 1С:Предприятие 8.2 (8.2.17.153)
Тестирование для режимов запуска "Тонкий клиент" и "Толстый клиент (управляемое приложение).

В серверной функции модуля формы внешнего отчета в платформе 8.2 успешно работает метод
ПоместитьВоВременноеХранилище(ЭтотОбъект,УникальныйИдентификатор) и в "Толстом" и в "Тонком" клиентах.

При запуске под платформой 8.3 метод не работает (и в "Толстом" и в "Тонком"), отображается сообщение об ошибке:
"Переданное значение не может быть помещено во временное хранилище".

Пока не знаю - это баг 8.3 или запланированное изменение поведение системы. Странно, что это проявляется в режиме совместимости с 8.2. На всякий случай отправил письмо на v8@1c.ru с описанием ситуации.


vitasw

И чем это решение принципиально отличается от того что предложено? Тем что работает еще дольше?...

Теги:

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

Рейтинг@Mail.ru

Поиск