В конфигурации "Бух учёт для Украины" редакции 1.0 общие модули помечены как глобальные, соответственно процедуры и функции вызываются просто через имя, а в редакции 1.1 сняли пометку "глобальный", соответственно процедуры уже вызываются через точку - имяобщмодуля.имяпроцедуры.
Проблема в том что редакция 1.0 снята с поддержки и все отчёты теперь можно передирать из редакции 1.1. Но так как там полно вызовов процедур общих модулей, то надо нехило править модуль (тупо удалять имя общ модуля) каждого переносимого отчёта и так каждый раз когда отчёт меняется.
Вопрос: можно ли как нибуть получить общий модуль и присвоить его значению глобальной переменной.
К примеру если снять галку с общ модуля РегламентированнаяОтчетность, то у нас появится свойство глобального контекста РегламентированнаяОтчетность (если галка стоит, то такого свойства нету), а я хочу присвоить глобальной переменной РегламентированнаяОтчетность такое свойство.
Для документа это делается просто: документы["имя документа"], а вот общиемодули["имя модуля"] не получится, так как нету такого менеджера. Есть ли ещё какой нибуть способ?
Как вариант конечно можно тупо задвоить общие модули: один с галкой, а другой точно такойже, но с другим именем без неё. Сами понимаете что это фиговато мягко говоря смотреться будет.
Так не выйдет. метаданные.ОбщиеМодули.РегламентированнаяОтчетность возвращает значение типа "Объект метаданных". Из этого значения я могу получить только имя, синоним и прочие ненужные мне вещи, а имя процедуры/функции - нет.
Если снять галку у общего модуля, то тип значения этого модуля будет "Общий модуль", вот именно значение такого типа мне и надо получить.
метаданные.ОбщиеМодули.РегламентированнаяОтчетность.имяпроцедуры - не работает!!!
К сожаленью и задвоение не срабатывает - пишит что такая процедура уже существует. Зачем было снимать галку "глобальный" и писать всё через точку?
(3) Я ответил на вопрос "как получить общий модуль по имени".
А получить список процедур общего модуля не представляется возможным, только как самому разбирать текст, предварительно выгрузив модули в текстовые файлы.
Не работает
Вычислить(Метаданные.ОбщиеМодули["БухгалтерскийУчетПереопределяемый"]) - выдает ошибку
Ошибка в выражении
Бухгалтерский<<?>> учет переопределяемый
СП говорит что внутри Вычислить должна быть строка.
Сегодня задался таким же вопросом.
Каково же удивление, что я создавал эту тему почти 10 лет назад.
Еще одно удивление что кто-то менее месяца назад ответил.
мне помогло. спасибо.
понадобилось в УПП для переноса из УТ кода интерактивного разбиения строк ТЧ - "ЭтотОбъект" в общем модуле не работал.
пишите ответы даже если тема старая, кому-нибудь пригодится
Если вдруг кто-то наткнулся на эту ветку, вот рабочий код:
// Скопировано из БСП ОбщегоНазначения.ОбщийМодуль, лишнее убрано
// Возвращает ссылку на общий модуль по имени.
//
// Параметры:
// Имя - Строка - имя общего модуля.
//
// Возвращаемое значение:
// ОбщийМодуль
// Неопределено - Если общий модуль с переданным именем не существует
//
// Пример:
// МодульДопОбработки = ОбщийМодуль("ДополнительныеОтчетыИОбработки");
// МодульДопОбработки .<Имя метода>();
//
Функция ОбщийМодуль(Имя) Экспорт
Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда
Модуль = Вычислить(Имя);
Иначе
Модуль = Неопределено;
КонецЕсли;
Возврат Модуль;
КонецФункции
Перебираешь в цикле, выбрасываешь глобальные и те, которые текущему контексту клиента-сервера не соответствуют. Для остальных делаешь "вычислить", результат сравниваешь с тем что у тебя есть.
А можно ли как-то без вычислить вызвать общий модуль.
т.е. цель в том, чтобы пройти аудит во фреш и если нет в конфигурации модуля ОбщегоНазначения, то чтобы не было ошибки компиляции. Это, наверное, невозможно?
(21) в БСП есть проверка на наличие модуля. Они так например в УТ делают. Т.к. это обрезаная версия УП и КА.
Еще приколько пишут, если НЕ УТКА (УТ и КА=))).
(23) Да, это будет проще, только будет ругаться на то, что нельзя менять это значение. Если искать в этом ключе, то можно так убрать ошибку компиляции:
Если Ложь Тогда
ОбщегоНазначения = Неопределено;
КонецЕсли;
Попытка
ОбщегоНазначения.ВыполнитьКоманду();
Исключение
Возврат;
КонецПопытки;
Функция СведенияОВнешнейОбработке() Экспорт
//Инъекция от Гения 1С для компиляции функции в конфигурациях без БСП https://geniy1s.ru/odna-obrabotka-dlya-bsp-netlenok-i-fresh
Если ложь Тогда
ДополнительныеОтчетыИОбработки = ложь;
РаботаВБезопасномРежиме = ложь;
ДополнительныеОтчетыИОбработкиКлиентСервер = ложь;
СтандартныеПодсистемыСервер = ложь;
КонецЕсли;
...
Возврат ПараметрыРегистрации;
КонецФункции
(34) О, какое забавное продолжение темы у тебя получилось
Механизм внешних обработок, он, собственно в БСП-то и реализован. Все вот эти СведенияОВнешнейОбработке, РаботаВБезопасномРежиме, ПараметрыРегистрации, они как раз из БСПшных подсистем и идут.
Получается, ты в свою "нетленку" просто затащил код из БСП. Гениально.
(36) видимо, вы не поняли суть решения.
оно в том, чтобы обработку можно было запускать в БСП и не в БСП, при этом можно было бы регистрировать как доп.внешнюю обработку в БСП. Причем работает даже во фреш.
Перечитайте, о чем речь идет.
Чтобы запускать эту внешнюю обработку не в БСП тебе нужна подсистема внешних отчетов и обработок из БСП. Та самая, которая вызовет все эти "СведенияОВнешнейОбработке" и т. п. Или же копия этой подсистемы, которую ты и получаешь, стырив код из БСП.
(40) А толк от этого какой ? Я даже представить не могу обработку которая может понадобится как в базе с БСП так и без БСП. Если метаданные отличаются то один фиг переделывать пол обработки. Ну разве что какой отчет по метаданным делать . Универсальность только в одной функции ??? Сэкономил 2 мин
(41) да любой универсальный отчет. Та же консоль запросов, универсальный редактор реквизитов, регистров, групповая обработка справочников и документов, универсальная выгрузка-загрузка.
(42)Использование универсальных обработок запрещено правилами Fresh, п. 9.7 https://1cfresh.com/articles/so_addprocess_req Так что с большой долей вероятности практическая ценность решения близится к 0.
(45)Ок, переформулирую. По опыту - универсальная обработка аудит не пройдет, аудитор завернет.
Облака по технологии fresh, в которых аудит автоматический - вероятно да, пройдет, но я так понимаю речь про 1cfresh.com, а не про другие фреши.