Как получить общий модуль по имени?

1. sokir 2 03.03.09 10:07 Сейчас в теме
В конфигурации "Бух учёт для Украины" редакции 1.0 общие модули помечены как глобальные, соответственно процедуры и функции вызываются просто через имя, а в редакции 1.1 сняли пометку "глобальный", соответственно процедуры уже вызываются через точку - имяобщмодуля.имяпроцедуры.
Проблема в том что редакция 1.0 снята с поддержки и все отчёты теперь можно передирать из редакции 1.1. Но так как там полно вызовов процедур общих модулей, то надо нехило править модуль (тупо удалять имя общ модуля) каждого переносимого отчёта и так каждый раз когда отчёт меняется.
Вопрос: можно ли как нибуть получить общий модуль и присвоить его значению глобальной переменной.
К примеру если снять галку с общ модуля РегламентированнаяОтчетность, то у нас появится свойство глобального контекста РегламентированнаяОтчетность (если галка стоит, то такого свойства нету), а я хочу присвоить глобальной переменной РегламентированнаяОтчетность такое свойство.
Для документа это делается просто: документы["имя документа"], а вот общиемодули["имя модуля"] не получится, так как нету такого менеджера. Есть ли ещё какой нибуть способ?
Как вариант конечно можно тупо задвоить общие модули: один с галкой, а другой точно такойже, но с другим именем без неё. Сами понимаете что это фиговато мягко говоря смотреться будет.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
6. alexk-is 6533 03.03.09 12:51 Сейчас в теме
(1) может быть чем-то поможет...
...посмотри тут http://www.infostart.ru/projects/3344/
...и тут http://www.infostart.ru/projects/3318/
...и еще тут http://www.infostart.ru/blogs/892/
2. Душелов 4014 03.03.09 10:16 Сейчас в теме
Метаданные.ОбщиеМодули
3. sokir 2 03.03.09 10:37 Сейчас в теме
Метаданные.ОбщиеМодули

Так не выйдет. метаданные.ОбщиеМодули.РегламентированнаяОтчетность возвращает значение типа "Объект метаданных". Из этого значения я могу получить только имя, синоним и прочие ненужные мне вещи, а имя процедуры/функции - нет.
Если снять галку у общего модуля, то тип значения этого модуля будет "Общий модуль", вот именно значение такого типа мне и надо получить.
метаданные.ОбщиеМодули.РегламентированнаяОтчетность.имяпроцедуры - не работает!!!

К сожаленью и задвоение не срабатывает - пишит что такая процедура уже существует. Зачем было снимать галку "глобальный" и писать всё через точку?
4. Душелов 4014 03.03.09 10:44 Сейчас в теме
(3) Я ответил на вопрос "как получить общий модуль по имени".
А получить список процедур общего модуля не представляется возможным, только как самому разбирать текст, предварительно выгрузив модули в текстовые файлы.
5. coder1cv8 3468 03.03.09 12:35 Сейчас в теме
(4) Он имеет ввиду контекст модуля, а не его метаданные.
Ответ - никак.
7. wasiliy 29.06.18 10:58 Сейчас в теме
У меня работает такой вариант:
Вычислить(Метаданные.ОбщиеМодули["РегламентированнаяОтчетность"]).НужнаяФункция()
9. sokir 2 17.07.18 01:49 Сейчас в теме
(7)
Вычислить(Метаданные.ОбщиеМодули["РегламентированнаяОтчетность"]).НужнаяФункция()

Не работает
Вычислить(Метаданные.ОбщиеМодули["БухгалтерскийУчетПереопределяемый"]) - выдает ошибку
Ошибка в выражении
Бухгалтерский<<?>> учет переопределяемый

СП говорит что внутри Вычислить должна быть строка.
10. SlavaKron 17.07.18 08:49 Сейчас в теме
(9)
ОбщийМодуль = Вычислить("БухгалтерскийУчетПереопределяемый");
ОбщийМодуль.НужнаяФункция();
COMPER; odinsmot; sizeoff; eeeio; AnryMc; atdonya; salt7; adhocprog; nikolav; Mahon83; LosevI; lnnr; axsebur; gr0m; serm; dynamicsystems; Maikl_kar; butchxtlan; pal_alex; +19 Ответить
8. sokir 2 17.07.18 01:46 Сейчас в теме
Сегодня задался таким же вопросом.
Каково же удивление, что я создавал эту тему почти 10 лет назад.
Еще одно удивление что кто-то менее месяца назад ответил.
dehro; AndrewKop; user785225; AnryMc; atdonya; adhocprog; ilyanet; romankoav; boogie; butchxtlan; +10 Ответить
11. serm 07.06.19 14:05 Сейчас в теме
ОбщийМодуль = Вычислить("БухгалтерскийУчетПереопределяемый");

мне помогло. спасибо.
понадобилось в УПП для переноса из УТ кода интерактивного разбиения строк ТЧ - "ЭтотОбъект" в общем модуле не работал.
пишите ответы даже если тема старая, кому-нибудь пригодится
atdonya; adhocprog; +2 Ответить
12. rule_2 47 06.10.22 11:54 Сейчас в теме
Если вдруг кто-то наткнулся на эту ветку, вот рабочий код:

// Скопировано из БСП ОбщегоНазначения.ОбщийМодуль, лишнее убрано
// Возвращает ссылку на общий модуль по имени.
//
// Параметры:
//  Имя - Строка - имя общего модуля.
//
// Возвращаемое значение:
//   ОбщийМодуль
//   Неопределено - Если общий модуль с переданным именем не существует
//
// Пример:
//	МодульДопОбработки = ОбщийМодуль("ДополнительныеОтчетыИОбработки");
//	МодульДопОбработки .<Имя метода>();
//
Функция ОбщийМодуль(Имя) Экспорт
	
	Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда
		Модуль = Вычислить(Имя);
	Иначе
		Модуль = Неопределено;
	КонецЕсли;
	
	Возврат Модуль;
	
КонецФункции

Показать
birk; fixin; +2 Ответить
13. fixin 4252 14.06.23 20:41 Сейчас в теме
(12) спасибо, именно это и искал.
14. ixijixi 1777 07.07.23 10:29 Сейчас в теме
Штош, и я отмечусь =)
Используем БСП
Модуль = ОбщегоНазначения.ОбщийМодуль(Имя)

Нюанс в том, что если такого модуля нет, то будет вызвыно исключение, поэтому немного модифицировав код получим
&НаСервереБезКонтекста
Функция ОбщийМодуль(Имя) Экспорт
	
	Модуль = Неопределено;
	
	Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда
		Модуль = ОбщегоНазначения.ОбщийМодуль(Имя)
	КонецЕсли;
	
	Возврат Модуль;
	
КонецФункции
Показать

Такой код гарантированно работает и проходит аудит по 1С:Фреш
buy_sale; fixin; 0x00; +3 Ответить
15. 7OH 69 24.08.23 21:48 Сейчас в теме
(14), а в обратную сторону можно ?
Есть модуль - надо имя получить
16. пользователь 24.08.23 23:00
Сообщение было скрыто модератором.
...
17. 7OH 69 25.08.23 00:09 Сейчас в теме
(16) метаданные что ?
На входе в функцию ссылка на модуль, полученная через бсп функцию.
Надо имя модуля узнать.
Метаданные то тут чем помогут?
18. пользователь 25.08.23 00:12
Сообщение было скрыто модератором.
...
20. user1880116 25.08.23 09:58 Сейчас в теме
(18) Пойду на кухню я, доем, мои друзья, последнюю из десяти котлет...
19. user1880116 25.08.23 09:56 Сейчас в теме
(17)
Метаданные то тут чем помогут
Перебираешь в цикле, выбрасываешь глобальные и те, которые текущему контексту клиента-сервера не соответствуют. Для остальных делаешь "вычислить", результат сравниваешь с тем что у тебя есть.
21. fixin 4252 10.02.24 21:10 Сейчас в теме
А можно ли как-то без вычислить вызвать общий модуль.
т.е. цель в том, чтобы пройти аудит во фреш и если нет в конфигурации модуля ОбщегоНазначения, то чтобы не было ошибки компиляции. Это, наверное, невозможно?
26. Xershi 1475 11.02.24 16:17 Сейчас в теме
(21) в БСП есть проверка на наличие модуля. Они так например в УТ делают. Т.к. это обрезаная версия УП и КА.
Еще приколько пишут, если НЕ УТКА (УТ и КА=))).
22. SlavaKron 11.02.24 10:38 Сейчас в теме
(21) Если Фреш пропустит такое, то
Если Метаданные.ОбщиеМодули.Найти("МойОбщийМодуль") <> Неопределено Тогда
	
	ДвоичныеДанныеОбработки = ПолучитьМакет("ПодключаемыйМодуль");
	АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеОбработки);
	ИмяОбработки = ВнешниеОбработки.Подключить(АдресВХранилище);
	ПодключаемыМодуль = ВнешниеОбработки.Создать(ИмяОбработки);
	ПодключаемыМодуль.ВыполнитьКоманду();
	
КонецЕсли;
Показать
23. fixin 4252 11.02.24 11:09 Сейчас в теме
(22) сложно.
Я просто хочу, чтобы обработка запускалась и там, где нет модулей бсп, вызываемых в функции сведений о внешней обработке.

И вот сейчас мне в голову пришла гениальная мысль, вызывать в попытке исключение код:
ОбщегоНазначения=ОбщегоНазначения;


Т.е. Через самоопределение. Надо протестировать
24. SlavaKron 11.02.24 11:30 Сейчас в теме
(23) Да, это будет проще, только будет ругаться на то, что нельзя менять это значение. Если искать в этом ключе, то можно так убрать ошибку компиляции:
Если Ложь Тогда
	ОбщегоНазначения = Неопределено;
КонецЕсли;

Попытка
	ОбщегоНазначения.ВыполнитьКоманду();
Исключение
	Возврат;
КонецПопытки;
Показать
34. fixin 4252 12.02.24 09:03 Сейчас в теме
(23) Итоговый рабочий способ:

https://geniy1s.ru/odna-obrabotka-dlya-bsp-netlenok-i-fresh/

Код для вставки в СведенияОВнешнейОбработке:
Функция СведенияОВнешнейОбработке() Экспорт   
	
	//Инъекция от Гения 1С для компиляции функции в конфигурациях без БСП  https://geniy1s.ru/odna-obrabotka-dlya-bsp-netlenok-i-fresh
	Если ложь Тогда
		ДополнительныеОтчетыИОбработки = ложь;
		РаботаВБезопасномРежиме = ложь;
		ДополнительныеОтчетыИОбработкиКлиентСервер = ложь;   
		СтандартныеПодсистемыСервер = ложь;   
	КонецЕсли;

	...
	Возврат ПараметрыРегистрации;
КонецФункции
Показать
36. user1880116 12.02.24 10:15 Сейчас в теме
(34) О, какое забавное продолжение темы у тебя получилось

Механизм внешних обработок, он, собственно в БСП-то и реализован. Все вот эти СведенияОВнешнейОбработке, РаботаВБезопасномРежиме, ПараметрыРегистрации, они как раз из БСПшных подсистем и идут.

Получается, ты в свою "нетленку" просто затащил код из БСП. Гениально.
37. fixin 4252 12.02.24 10:20 Сейчас в теме
(36) видимо, вы не поняли суть решения.
оно в том, чтобы обработку можно было запускать в БСП и не в БСП, при этом можно было бы регистрировать как доп.внешнюю обработку в БСП. Причем работает даже во фреш.
Перечитайте, о чем речь идет.
38. user1880116 12.02.24 10:44 Сейчас в теме
(37)
и не в БСП
Чтобы запускать эту внешнюю обработку не в БСП тебе нужна подсистема внешних отчетов и обработок из БСП. Та самая, которая вызовет все эти "СведенияОВнешнейОбработке" и т. п. Или же копия этой подсистемы, которую ты и получаешь, стырив код из БСП.

Перечитай, о чем речь идет.
40. fixin 4252 12.02.24 11:07 Сейчас в теме
(38) не понимаю, о чем вы.
да, в неБСП можно запускать без БСП.
Но речь в задаче о том, чтобы одна обработка запускалась везде.
41. vadim1011985 99 12.02.24 15:37 Сейчас в теме
(40) А толк от этого какой ? Я даже представить не могу обработку которая может понадобится как в базе с БСП так и без БСП. Если метаданные отличаются то один фиг переделывать пол обработки. Ну разве что какой отчет по метаданным делать . Универсальность только в одной функции ??? Сэкономил 2 мин
42. fixin 4252 12.02.24 15:38 Сейчас в теме
(41) да любой универсальный отчет. Та же консоль запросов, универсальный редактор реквизитов, регистров, групповая обработка справочников и документов, универсальная выгрузка-загрузка.
43. vadim1011985 99 12.02.24 15:52 Сейчас в теме
(42) Ага, которые в своем коде могут использовать БСП.
44. laperuz 46 13.02.24 08:52 Сейчас в теме
(42)Использование универсальных обработок запрещено правилами Fresh, п. 9.7 https://1cfresh.com/articles/so_addprocess_req
Так что с большой долей вероятности практическая ценность решения близится к 0.
25. fixin 4252 11.02.24 11:31 Сейчас в теме
27. user1880116 11.02.24 16:54 Сейчас в теме
(25) А ты не хочешь для начала отдать человеку стартмани за ответ?
Ну, перед тем, как писать, что эта гениальная идея пришла в голову именно тебе?

https://web.archive.org/web/20240211134223/https://geniy1s.ru/segodnya-mne-v-golovu-prishel-genialnyj-kod/
28. user1880116 11.02.24 16:56 Сейчас в теме
Хотя, не. Ты не сможешь - тема не твоя.
31. fixin 4252 12.02.24 08:21 Сейчас в теме
(28) да, я сам добавил вознаграждение, т.к. тема была актуальна. Пусть отдадут тому, кому посчитают нужным.
29. naf2000 12.02.24 08:18 Сейчас в теме
(25) а как ловко ты присвоил чужую идею себе, это действительно гениально
30. fixin 4252 12.02.24 08:19 Сейчас в теме
(29) а можно подробнее, в чем присвоение?
32. naf2000 12.02.24 08:26 Сейчас в теме
(30) в том, что ты выложил код (24) как свой. В целом ничего особенного, но зачем ты пишешь какой ты гениальный придумал код? Это ложь получается
35. user1880116 12.02.24 09:40 Сейчас в теме
(32)
Это ложь получается
Ну вот и ты осознал принципы "гениальности" пациента.
И даже получил от него минус =]
33. fixin 4252 12.02.24 08:27 Сейчас в теме
(32) Мой гений в обмане компилятора для темы доп.внешних обработок.

Код мало написать, его нужно применить. Так то обману компилятора 100 лет в обед, применить его к доп.внешним обработкам - моя заслуга.

Я предложил код:
  Попытка
    ОбщегоНазначения = ОбщегоНазначения;
  Исключение
  КонецПопытки;


Комментатор поправил:
  Если ложь Тогда
    ОбщегоНазначения = Неопределено;
  КонецЕсли;


Я принял его правки.

Но главное тут не в формате кода, а в его применении для доп.внешних обработок.
39. user856012 13 12.02.24 10:54 Сейчас в теме
М-да. Пожалуй, дополню ветку своим кодом:
Функция СведенияОбАвторе(Автор)
   Если Автор = "Гений 1С" Тогда
      Возврат Ложь;
   Иначе
      Возврат Неопределено;
   КонецЕсли;
КонецФункции;

На гениальность не претендую - тут и без меня хватает гениотов.
45. fixin 4252 13.02.24 08:58 Сейчас в теме
(44) не запрещено, а рекомендуется не использовать.
В такие обработки можно вставить контроль ролей, для которых они запускаются и норм.
46. laperuz 46 13.02.24 10:35 Сейчас в теме
(45)Ок, переформулирую. По опыту - универсальная обработка аудит не пройдет, аудитор завернет.
Облака по технологии fresh, в которых аудит автоматический - вероятно да, пройдет, но я так понимаю речь про 1cfresh.com, а не про другие фреши.
47. fixin 4252 13.02.24 10:56 Сейчас в теме
(46) ну кроме фреша есть другие облака, где аудит по правилам, а не по понятиям. Там сгодится
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)