объемные разделы модулей рекомендуется разбивать на подразделы по функциональному признаку.
Шаблон разделов для общих модулей содержит в том числе две области:
СлужебныйПрограммныйИнтерфейс и СлужебныеПроцедурыИФункции.
(с разделом ПрограммныйИнтерфейс всё очевидно)
Раздел «Служебный программный интерфейс» предназначен для модулей, которые являются частью некоторой функциональной подсистемы. В нем должны быть размещены экспортные процедуры и функции, которые допустимо вызывать только из других функциональных подсистем этой же библиотеки.
Раздел «Служебные процедуры и функции» содержит процедуры и функции, составляющие внутреннюю реализацию общего модуля. В тех случаях, когда общий модуль является частью некоторой функциональной подсистемы, включающей в себя несколько объектов метаданных, в этом разделе также могут быть размещены служебные экспортные процедуры и функции, предназначенные только для вызова из других объектов данной подсистемы.
Из такого определения ясно, что СлужебныйПрограммныйИнтерфейс содержит только методы с ключевым словом Экспорт. Однако, некоторые функции из раздела СлужебныеПроцедурыИФункции тоже могут быть экспортными.
Отсюда вопрос. По какому критерия следует включать экспортный метод в один из этих разделов? Из исследования типовых конфигураций я не смог этого понять. Сложилось ощущение, что включение метода в тот или иной раздел происходит произвольным образом.
(16) ищите общие модули начинающиеся на ПодсистемыКонфигурации.
В них есть процедура ПриДобавленииПодсистем.
В этой процедуре есть имена общих модулей, которые начинаются на "ОбновлениеИнформационнойБазы"
Смотрите в состав какой подсистемы он (найденный общий модуль обновления) включен. Это будет верхний уровень дерева подсистем библиотеки. Все что входит в эту подсистему (и рекурсивно) является составом библиотеки.
которые допустимо вызывать только из других функциональных подсистем этой же библиотеки.
предназначенные только для вызова из других объектов данной подсистемы.
Из других. И из данной.
Библиотека состоит из функциональных подсистем. То, что торчит наружу из библиотеки - программный интерфейс. То, что нужно для связки функциональных подсистем внутри библиотеки - служебный программный интерфейс. То, что надо для одной, текущей подсистемы, может оказаться как в служебном интерфейсе, так и в служебных процедурах и функцих.
Вообще, впечатление, что тема написана просто с целью поглумится над типовыми.
имхо в служебных - только функции для использования тут, в этом модуле.
а экспорт можно поставить если только вдруг оказалось, что где-то такое крайне узкоспециализированное тоже нужно
не знаю, например перевод даты в формат "дд-уу-мммм-уу-д-.: м"
а экспорт можно поставить если только вдруг оказалось, что где-то такое крайне узкоспециализированное тоже нужно
Не совсем так. Иначе функцию ДвенадцатиЧасовойФорматВремени() из типовой БП 3.0 надо было перенести в раздел СлужебныйПрограммныйИнтерфейс. И это не единичный пример. Складывается ощущение, что при разработке типовой конфигурации разработчики просто "расшаривают" в процессе нужные им методы на экспорт и не переносят их в раздел СлужебныйПрограммныйИнтерфейс .
Очень хочу здесь ошибаться.
(3) Ну начнем с того, что модуль ЗарплатаИКадры не является библиотечным. Соответственно, на него не распространяются ограничения по
допустимо вызывать только из других функциональных подсистем этой же библиотеки.
А вот на самом деле он вполне
является частью некоторой функциональной подсистемы, включающей в себя несколько объектов метаданных, в этом разделе также могут быть размещены служебные экспортные процедуры и функции, предназначенные только для вызова из других объектов данной подсистемы.
(3) Ну начнем с того, что модуль ЗарплатаИКадры не является библиотечным.
Библиотечным вы называете только те модули которые относятся к БСП и расположены внутри ветки Подсистемы/СтандартныеПодсистемы?
Соответственно, на него не распространяются ограничения
Тогда мой вопрос актуален: По какому критерию следует включать экспортный метод в один из этих разделов?
В "небиблитечных" модулях экспортные методы есть в обоих разделах и по какой логике программист должен размещать свой экспортный метод в том или ином месте?
(6) Библиотек различных много. БСП - только одна из них.
Тогда что вы понимаете под библиотекой? Такого объекта конфигурации нет и в моем понимании это какая-то условность. Допустим, применительно к БП 3.0: что там считается библиотекой, а что не считается помимо БСП?
Откройте РС ВерсииПодсистем в режиме предприятия. Вот там перечислены все библиотеки в конфигурации + сама конфигурация.
Получается то, что в этом регистре находится в колонке "Имя подсистемы" является той самой библиотекой, о которой и говорит тот самый стандарт?
Если это так, то каким образом вы определяете является тот или иной модуль относящимся к конкретной библиотеке (по ссылке ничего найти нельзя, так как измерение этого регистра является строковым).
(16) ищите общие модули начинающиеся на ПодсистемыКонфигурации.
В них есть процедура ПриДобавленииПодсистем.
В этой процедуре есть имена общих модулей, которые начинаются на "ОбновлениеИнформационнойБазы"
Смотрите в состав какой подсистемы он (найденный общий модуль обновления) включен. Это будет верхний уровень дерева подсистем библиотеки. Все что входит в эту подсистему (и рекурсивно) является составом библиотеки.
Это просто соглашение.
Программный интерфейс могут использовать все разработчики.
СлужебныйПрограммныйИнтерфейс могут использовать разработчики других подсистем в рамках одной библиотеки.
СлужебныеПроцедурыИФункции это внутренняя часть в рамках одной подсистемы.
Технически можно использовать любые доступные, но для методов в СлужебныеПроцедурыИФункции нет гарантии, что в следующем обновлении они будут доступны и их вызов не изменится.
Технически можно использовать любые доступные, но для методов в СлужебныеПроцедурыИФункции нет гарантии, что в следующем обновлении они будут доступны и их вызов не изменится.
А методы из раздела СлужебныйПрограммныйИнтерфейс гарантировано не изменятся?