В УТ11.4 есть МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере, а в БП3.0 ?
Так же в УТ11.4 есть МодификацияКонфигурацииКлиентПереопределяемый.ВыполнитьПереопределяемуюКоманду, а в БП3.0 ?
---
1. можно прицепиться к какой-нибудь другой общей процедуре. например
ВерсионированиеОбъектов.ПриСозданииНаСервере(Форма)
2. Есть
```1c
    &НаКлиенте
    Процедура Подключаемый_ВыполнитьКоманду(Команда)
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
    КонецПроцедуры
```
(2) ПодключаемыеКоманды.ПриСозданииНаСервереНе во всех формах есть.
Естественно, захватывать их в расширение и использовать с инструкцией &После.Лучше вместо и если команда не своя, то ПродолжитьВызов. Иначе можно на ошибки нарваться типа команда не найдена в ПараметрыПодключаемыхКоманд.
---
А в БП нету. Рекомендую использовать ПодключаемыеКоманды.ПриСозданииНаСервере И ПодключаемыеКомандыКлиент.ВыполнитьКоманду. Естественно, захватывать их в расширение и использовать с инструкцией &После.
---
1. можно прицепиться к какой-нибудь другой общей процедуре. например
ВерсионированиеОбъектов.ПриСозданииНаСервере(Форма)
2. Есть
```1c
    &НаКлиенте
    Процедура Подключаемый_ВыполнитьКоманду(Команда)
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
    КонецПроцедуры
```
(2) ПодключаемыеКоманды.ПриСозданииНаСервереНе во всех формах есть.
Естественно, захватывать их в расширение и использовать с инструкцией &После.Лучше вместо и если команда не своя, то ПродолжитьВызов. Иначе можно на ошибки нарваться типа команда не найдена в ПараметрыПодключаемыхКоманд.
---
Пишет ошибку при нажатии на кнопку : {ОбщийМодуль.ПодключаемыеКоманды.Модуль(1372)}: Сведения о команде "КомандаTtt" не существуют. Не знаю как побороть.
---
я же писал об этом... надо
```1c
    &Вместо("ВыполнитьКоманду")
    Процедура Расш1_ВыполнитьКоманду(Форма, Команда, Источник)

    Если Команда.Имя = "КомандаTtt" Тогда
    //Делаем что надо
    Иначе
    ПродолжитьВызов(Форма, Команда, Источник);
    КонецЕсли;

    КонецПроцедуры
```
Безопасный режим у расширения должен быть отключен.
---
если использовать &вместо , тогда процедура не будет работать на других конфигурациях.
---
если использовать &вместо , тогда процедура не будет работать на других конфигурациях.что значит "не будет работать на других конфигурациях"?
---
в тех конфигурациях, где не объявлены переменные, которые используются в этой процедуре. Я Имею ввиду старые версии бух3.0
---
не понимаю, какие переменные? пример бы...
"Вместо" в случае (5) - это практически "Перед", только с проверкой условия - выполнять стандартный метод или нет.
---
Кто-нибудь может подсказать, как возможно в УНФ (3.0.2.215) (платформа 8.3.23.1865) добавить, используя конфигурацию-расширение и общие модули в рабочей конфигурации, - новую команду заполнения (с подтверждением по вопросу пользователю) для ТЧ "Товары" у документа (Вывод из оборота ИС МП), не добавляя в расширение форму этого документа?
Насколько понял - нужно использовать модули "ПодключаемыеКоманды" и "ПодключаемыеКомандыКлиент".
Пробовал сделать, как описываю ниже, но вызвать выполнение команды на сервере не получается.

1. Код в расширенном модуле "ПодключаемыеКомандыКлиент":

```1c
    &Вместо("ВыполнитьКоманду")
    Процедура ГМ_ВыполнитьКомандуПеред(Форма, Команда, Источник)
    Если Команда.Имя = "ГМ_ДокВыводИзОборотаТоварыЗаполнитьБазовымиЦенами" Тогда
    ОчиститьСообщения();
    Если Форма.ГМ_ОтветДаНаВопросОПерезаполнениииБазовымиЦенами = Истина Тогда
    Форма.ГМ_ОтветДаНаВопросОПерезаполнениииБазовымиЦенами = Ложь;
    КонецЕсли;
    ГМ_ДокВыводИзОборотаТоварыЗаполнитьБазовымиЦенами(Форма);
    Иначе
    ПродолжитьВызов(Форма, Команда, Источник);
    КонецЕсли;
    КонецПроцедуры

    &НаКлиенте
    Процедура ГМ_ДокВыводИзОборотаТоварыЗаполнитьБазовымиЦенами(Форма)

    Если Форма.Объект.Товары.Количество() > 0 Тогда //И ЗадаватьВопрос Тогда

    ТекстВопроса = НСтр("ru = '(ГМ:) Колонка "Цена" док-та будет перезаполнена по базовой цене на дату док-та. Продолжить?'");
    Ответ = Неопределено;
    ДополнительныеПараметры = Новый Структура("Форма", Форма);
    ОписаниеОповещенияОЗавершении = Новый ОписаниеОповещения("ГМ_ВопросОПерезаполнениииБазовымиЦенами", ЭтотОбъект, ДополнительныеПараметры);
    ПоказатьВопрос(ОписаниеОповещенияОЗавершении, ТекстВопроса, РежимДиалогаВопрос.ДаНет);

    КонецЕсли;

    КонецПроцедуры

    &НаКлиенте
    Процедура ГМ_ВопросОПерезаполнениииБазовымиЦенами(Результат, Параметры) Экспорт

    Если Параметры.Форма.ГМ_ОтветДаНаВопросОПерезаполнениииБазовымиЦенами = Истина Тогда
    Параметры.Форма.ГМ_ОтветДаНаВопросОПерезаполнениииБазовымиЦенами = Ложь;
    КонецЕсли;

    Если Результат = КодВозвратаДиалога.Да Тогда
    Параметры.Форма.ГМ_ОтветДаНаВопросОПерезаполнениииБазовымиЦенами = Истина;
    //ГМ_ОбщийМодульСервер.ГМ_ЗаполнитьБазовымиЦенамиНаСервере(Параметры.Форма);
    КонецЕсли;

    КонецПроцедуры

    2. Код в расширенном модуле "ПодключаемыеКоманды":
    &Перед("ПриСозданииНаСервере")
    Процедура ГМ_ПриСозданииНаСервере(Форма, ПараметрыРазмещения)
    Если Форма.ИмяФормы = "Документ.ВыводИзОборотаИСМП.Форма.ФормаДокумента" Тогда
    ГМ_ПриСозданииНаСервереДокВыводИзОборотаИСМПФормаДокумента(Форма);
    КонецЕсли;
    КонецПроцедуры

    Процедура ГМ_ПриСозданииНаСервереДокВыводИзОборотаИСМПФормаДокумента(Форма)

    ГМ_РаботаС_ЭлементамиФормы.СоздатьКоманду(Форма, "ГМ_ДокВыводИзОборотаТоварыЗаполнитьБазовымиЦенами", "Подключаемый_ВыполнитьКоманду");
    СтруктураСвойствКнопки = ГМ_РаботаС_ЭлементамиФормы.СвойстваКнопки();
    СтруктураСвойствКнопки.Заголовок = "(ГМ) Заполнить базовыми ценами (заполнять после подбора по маркам!)";
    ГМ_РаботаС_ЭлементамиФормы.СоздатьКнопку(Форма, "ГМ_ДокВыводИзОборотаТоварыЗаполнитьБазовымиЦенами", Форма.Элементы.ТоварыПодменюЗаполнить, "ГМ_ДокВыводИзОборотаТоварыЗаполнитьБазовымиЦенами", СтруктураСвойствКнопки);

    ГМ_РаботаС_ЭлементамиФормы.ДобавитьРеквизит(Форма, "ГМ_ОтветДаНаВопросОПерезаполнениииБазовымиЦенами", "Булево", "(ГМ) Ответ "Да" на вопрос о перезаполнениии базовыми ценами", , , Ложь);

    КонецПроцедуры

    &Вместо("ВыполнитьКоманду")
    Процедура ГМ_ВыполнитьКоманду(Знач Форма, Знач ПараметрыВызова, Знач Источник, Результат)
    Если (ПараметрыВызова.ИмяКомандыВФорме = "ГМ_ДокВыводИзОборотаТоварыЗаполнитьБазовымиЦенами")
    И(Форма.ГМ_ОтветДаНаВопросОПерезаполнениииБазовымиЦенами = Истина)
    Тогда
    ГМ_ОбщийМодульСервер.ГМ_ЗаполнитьБазовымиЦенамиНаСервере(Форма);
    Иначе
    ПродолжитьВызов(Форма, ПараметрыВызова, Источник, Результат);
    КонецЕсли;
    КонецПроцедуры

    3. Код в общем модуле "ГМ_ОбщийМодульСервер" (галки сервер, вызов сервера):
    &НаСервере
    Процедура ГМ_ЗаполнитьБазовымиЦенамиНаСервере(Форма) Экспорт

    //ГМ_ТекущийОбъект = РеквизитФормыВЗначение("Объект");
    ГМ_ДатаДок = Форма.Объект.Дата;//ГМ_ТекущийОбъект.Дата;
    Если Не ЗначениеЗаполнено(ГМ_ДатаДок) Тогда
    ГМ_ДатаДок = ТекущаяДата();
    Если ЗначениеЗаполнено(ГМ_ДатаДок) Тогда
    Сообщить("Цены перезаполняются на тек. дату: " + Строка(ГМ_ДатаДок) + ", т.к. дата док-та - пустая!");
    Иначе
    Сообщить("Цены перезаполняются по послед-й записи в рег-ре "Цены номенк-ры" (по типу цен "Базовая цена"), т.к. дата док-та и тек. дата - пустые!");
    КонецЕсли;
    КонецЕсли;
    Если Не ЗначениеЗаполнено(ГМ_ДатаДок) Тогда
    ГМ_ДатаДок = Неопределено;
    КонецЕсли;

    // Делаем подобно заполнению в форме эл. док. "КорректировкаРеализации":
    Для Каждого ГМ_СтрТЧ Из Форма.Объект.Товары Цикл//ГМ_ТекущийОбъект.Товары Цикл
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
    |ИЗ
    | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ГМ_КонДата, ) КАК ЦеныНоменклатурыСрезПоследних
    |ГДЕ
    | ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура
    | И ЦеныНоменклатурыСрезПоследних.Характеристика = &ХарактеристикаНоменклатуры
    | И ЦеныНоменклатурыСрезПоследних.ВидЦен = &ВидЦен";

    Запрос.УстановитьПараметр("ГМ_КонДата", ГМ_ДатаДок);
    Запрос.УстановитьПараметр("Номенклатура", ГМ_СтрТЧ.Номенклатура);
    Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", ГМ_СтрТЧ.Характеристика);
    Запрос.УстановитьПараметр("ВидЦен", Справочники.ВидыЦен.НайтиПоКоду("00-000001"));
    // <- "Базовая (Прайс) RUB"
    ГМ_РезультатЗапроса = Запрос.Выполнить();
    ГМ_ВыборкаДетальныеЗаписи = ГМ_РезультатЗапроса.Выбрать();
    Пока ГМ_ВыборкаДетальныеЗаписи.Следующий() Цикл
    ГМ_СтрТЧ.Цена = ГМ_ВыборкаДетальныеЗаписи.Цена;
    ГМ_СтавкаНДС20 = Справочники.СтавкиНДС.НайтиПоНаименованию("20%");
    Если ГМ_СтрТЧ.СтавкаНДС <> ГМ_СтавкаНДС20 Тогда
    ГМ_СтрТЧ.СтавкаНДС = ГМ_СтавкаНДС20;
    КонецЕсли;
    //ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(ГМ_СтрТЧ, ГМ_ТекущийОбъект); // Было в УПП.
    //ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(ГМ_СтрТЧ, ГМ_ТекущийОбъект); // Было в УПП.
    // По образцу из ОМ "ИнтеграцияИСУНФКлиент" (в "ПриИзмененииЦены")
    ПараметрыРасчета = Новый Структура("РассчитатьСумму, СуммаВключаетНДС", Истина, Истина);
    ТабличныеЧастиУНФКлиентСервер.РассчитатьСуммыВСтрокеТЧ(ГМ_СтрТЧ, ПараметрыРасчета);
    КонецЦикла;
    КонецЦикла;

    //ЗначениеВРеквизитФормы(ГМ_ТекущийОбъект, "Объект");

    Модифицированность = Истина;

    КонецПроцедуры

    4. Код в общем модуле "ГМ_РаботаС_ЭлементамиФормы" (галки сервер, вызов сервера) (источники кода - https://wiki.programstore.ru/programmnoe-izmenenie-formi-1s-s-pomoshyu-rasshireniy/ , https://infostart.ru/1c/articles/1556681/ ):
    Функция СоздатьКоманду(Форма, НаимКоманды, Действие) Экспорт

    НоваяКоманда = Форма.Команды.Добавить(НаимКоманды);
    НоваяКоманда.Действие = Действие;

    Возврат НоваяКоманда;

    КонецФункции

    Процедура УстановитьСвойстваЭлементу(Элемент, СтруктураСвойств)

    Для Каждого Свойство Из СтруктураСвойств Цикл
    Элемент[Свойство.Ключ] = Свойство.Значение;
    КонецЦикла;

    КонецПроцедуры

    Процедура УстановитьСвойстваЭлементу(Элемент, СтруктураСвойств)

    Для Каждого Свойство Из СтруктураСвойств Цикл
    Элемент[Свойство.Ключ] = Свойство.Значение;
    КонецЦикла;

    КонецПроцедуры

    Функция СоздатьКнопку(Форма, НаимКнопки, РодительКнопки, НаимКоманды, СтруктураСвойств = Неопределено, ЭлементПеред = Неопределено) Экспорт

    НовыйЭлемент = СоздатьЭлементФормы(Форма, НаимКнопки, Тип("КнопкаФормы"), РодительКнопки, ЭлементПеред);
    НовыйЭлемент.ИмяКоманды = НаимКоманды;

    УстановитьСвойстваЭлементу(НовыйЭлемент, СтруктураСвойств);

    Возврат НовыйЭлемент;

    КонецФункции

    // Функция добавляет реквизит формы
    //
    // Параметры:
    // Форма - ФормаКлиентскогоПриложения
    // Имя - Строка, содержит имя реквизита
    // Тип - Строка типа, Тип или ОписаниеТипов
    // Заголовок - Строка, содержит отображаемый текст реквизита
    //Если заголовок не задан, то формируется функцией "ПолучитьЗаголовокПоИмени"
    // Путь - Строка, содержит путь к реквизиту, не включая имя реквизита
    // СохраняемыеДанные - Булево, если Истина - указывает, что это сохраняемый при записи реквизит, по умолчанию Ложь
    // Значение - Произвольный, значение, присваиваемое реквизиту после его создания
    //
    // Возвращаемое значение:
    // РеквизитФормы - созданный реквизит формы
    //
    Функция ДобавитьРеквизит(Форма, Наим, Тип, Заголовок = Неопределено, Путь = Неопределено, СохраняемыеДанные = Неопределено, Значение = Неопределено) Экспорт

    СвойстваРеквизита = Новый Структура;
    СвойстваРеквизита.Вставить("Имя", Наим);
    СвойстваРеквизита.Вставить("Тип", Тип);
    СвойстваРеквизита.Вставить("Заголовок", Заголовок);
    СвойстваРеквизита.Вставить("Путь", Путь);
    СвойстваРеквизита.Вставить("СохраняемыеДанные", СохраняемыеДанные);
    СвойстваРеквизита.Вставить("Значение", Значение);
    СвойстваРеквизитов = Новый Массив;
    СвойстваРеквизитов.Добавить(СвойстваРеквизита);
    Возврат ДобавитьРеквизиты(Форма, СвойстваРеквизитов)[0];

    КонецФункции

    // Функция добавляет реквизиты формы
    //
    // Параметры:
    // Форма - ФормаКлиентскогоПриложения
    // СвойстваРеквизитов - Массив структур:
    // * Имя - Строка, содержит имя реквизита
    // * Тип - Строка типа, Тип или ОписаниеТипов
    // * Заголовок - необязательный элемент, Строка, содержит отображаемый текст реквизита
    //Если заголовок не задан, то формируется функцией "ПолучитьЗаголовокПоИмени"
    // * Путь - необязательный элемент, Строка, содержит путь к реквизиту, не включая имя реквизита
    // * СохраняемыеДанные - необязательный элемент, Булево, если Истина - указывает, что это сохраняемый при записи реквизит, по умолчанию Ложь
    // * Значение - необязательный элемент, Произвольный, значение, присваиваемое реквизиту после его создания
    //
    // Возвращаемое значение:
    // Массив Реквизитов формы - созданные реквизиты формы
    //
    Функция ДобавитьРеквизиты(Форма, СвойстваРеквизитов) Экспорт

    НовыеРеквизиты = Новый Массив;

    Для Каждого СвойстваРеквизита Из СвойстваРеквизитов Цикл

    Имя = СвойстваРеквизита.Имя;
    Тип = СвойстваРеквизита.Тип;
    Если ТипЗнч(Тип) = Тип("Строка") Тогда
    Тип = Новый ОписаниеТипов(Тип);
    ИначеЕсли ТипЗнч(Тип) = Тип("Тип") Тогда
    МассивТипов = Новый Массив;
    МассивТипов.Добавить(Тип);
    Тип = Новый ОписаниеТипов(МассивТипов);
    КонецЕсли;
    Путь = Неопределено; Заголовок = Неопределено; СохраняемыеДанные = Неопределено;
    СвойстваРеквизита.Свойство("Путь", Путь);
    СвойстваРеквизита.Свойство("Заголовок", Заголовок);
    СвойстваРеквизита.Свойство("СохраняемыеДанные", СохраняемыеДанные);
    Если Путь = Неопределено Тогда
    Путь = ";
    КонецЕсли;
    Если Заголовок = Неопределено Тогда
    Заголовок = ПолучитьЗаголовокПоИмени(Имя);
    КонецЕсли;
    Если СохраняемыеДанные = Неопределено Тогда
    СохраняемыеДанные = Ложь;
    КонецЕсли;

    НовыйРеквизит = Новый РеквизитФормы(Имя, Тип, Путь, Заголовок, СохраняемыеДанные);
    НовыеРеквизиты.Добавить(НовыйРеквизит);

    КонецЦикла;

    Форма.ИзменитьРеквизиты(НовыеРеквизиты);

    Для Каждого СвойстваРеквизита Из СвойстваРеквизитов Цикл
    Если СвойстваРеквизита.Свойство("Значение") И СвойстваРеквизита.Значение <> Неопределено Тогда
    Форма[СвойстваРеквизита.Имя] = СвойстваРеквизита.Значение;
    КонецЕсли;
    КонецЦикла;

    Возврат НовыеРеквизиты;

    КонецФункции

    // Функция нужна для получения заголовка по переданному имени. Заголовок формируется так, как он был бы сформирован в конфигураторе.
    // Также добавлен учет префикса произвольного вида. По умолчанию предполагается префикс такого вида: "Префикс_Имя".
    // Префикс (включая разделитель) из заголовка удаляется.
    // Функцию желательно отрефакторить. Там нетривиальные условия, которые получились эмпирически во время тестирования. Можно написать красивее.
    // Типовой алгоритм преобразования имён в заголовки не такой простой, как кажется.

    // Функция возвращает заголовок по наименованию так, как это происходит в конфигураторе (точное соответствие)
    // При этом есть возможность убрать префикс, чтобы заголовок формировался без него
    // Правила преобразования:
    // 0) удаляется префикс при необходимости (вместе с разделителем)
    // 1) символ "_" заменяется пробелом, при этом лишние пробелы удаляются
    // 2) первая буква становится прописной
    // 3) перед всеми прописными буквами кроме первой ставится пробел
    // * если прописными буквы идут друг за другом более, чем 2 раза, то пробел ставится только перед первой
    // 4) все прописные буквы кроме первой превращаются в строчные
    // * если прописные буквы идут друг за другом более, чем 2 раза, то регистр букв не меняется
    // * если прописная буква является единственным символом или находится в конце строки, то регистр букв не меняется
    //
    // Параметры:
    // Наим - Строка, имя написаное в стиле CamelCase с возможным указанием префикса (например, "дк_ОформитьДокументыПроизводства")
    // РазделительПрефиксаОтИмени - Строка, по данному разделителю удаляется префикс
    // КонкретныйПрефикс - Строка, если значение заполнено, то данный префикс ищется перед разделителем, и только тогда префикс удаляется
    //Если значение не заполнено, то префикс определяется автоматически перед разделителем
    //
    Функция ПолучитьЗаголовокПоИмени(Наим, РазделительПрефиксаОтИмени = "_", КонкретныйПрефикс = ")

    ИмяБезПрефикса = Наим;
    Если НЕ ЗначениеЗаполнено(КонкретныйПрефикс) И ЗначениеЗаполнено(РазделительПрефиксаОтИмени) Тогда
    КонкретныйПрефикс = Лев(Наим, Найти(Наим, РазделительПрефиксаОтИмени) - 1);
    КонецЕсли;
    СтрокаПередКоторойВключаяУдалитьСимволы = КонкретныйПрефикс + РазделительПрефиксаОтИмени;
    Если ЗначениеЗаполнено(СтрокаПередКоторойВключаяУдалитьСимволы) Тогда
    НачалоНужнойСтроки = Найти(Наим, СтрокаПередКоторойВключаяУдалитьСимволы);
    Если Лев(Наим, СтрДлина(СтрокаПередКоторойВключаяУдалитьСимволы)) = СтрокаПередКоторойВключаяУдалитьСимволы Тогда
    ИмяБезПрефикса = Прав(Наим, СтрДлина(Наим) - СтрДлина(СтрокаПередКоторойВключаяУдалитьСимволы));
    КонецЕсли;
    КонецЕсли;

    Заголовок = ";
    ПредСимвол = ";
    Для Сч = 1 По СтрДлина(ИмяБезПрефикса) Цикл
    Символ = Сред(ИмяБезПрефикса, Сч, 1);
    Если Символ = "_" Тогда
    Символ = ?(ПредСимвол = Символы.НПП, ", Символы.НПП);
    КонецЕсли;
    Заголовок = Заголовок + Символ;
    ПредСимвол = ?(Символ = ", Символы.НПП, Символ);
    КонецЦикла;

    Заголовок = СокрЛП(Заголовок);

    ЗаголовокДоработанный = ";
    ПредСимволСтрочный = ";
    ПредПредСимволСтрочный = ";
    ПредСимвол = ";
    Для Сч = 1 По СтрДлина(Заголовок) Цикл
    Символ = Сред(Заголовок, Сч, 1);
    СледСимвол = ?(Сч + 1 <= СтрДлина(Заголовок), Сред(Заголовок, Сч + 1, 1), ");
    СледСимволСтрочный = ?(СледСимвол = ВРег(СледСимвол), СледСимвол, ");
    СледСледСимвол = ?(Сч + 2 <= СтрДлина(Заголовок), Сред(Заголовок, Сч + 2, 1), ");
    Если СледСимволСтрочный <> " Тогда
    СледСледСимволСтрочный = ?(СледСледСимвол = ВРег(СледСледСимвол), СледСледСимвол, ");
    Иначе
    СледСледСимволСтрочный = ";
    КонецЕсли;
    СимволДляКонкатенации = Символ;
    БылРазрыв = Ложь;
    Если Сч > 1 И ВРег(Символ) = Символ И ПредСимвол <> Символы.НПП И Символ <> Символы.НПП
    И (СтрДлина(СледСимволСтрочный + СледСледСимволСтрочный + ПредСимволСтрочный + ПредПредСимволСтрочный) < 2
    ИЛИ Нрег(ПредСимвол) = ПредСимвол) Тогда

    Если НЕ(СтрДлина(СледСимволСтрочный + ПредСимволСтрочный) > 0 И СледСимвол = ") Тогда
    ЗаголовокДоработанный = ЗаголовокДоработанный + Символы.НПП;
    БылРазрыв = Истина;
    КонецЕсли;
    СимволДляКонкатенации = ?(СтрДлина(СледСимволСтрочный + ПредСимволСтрочный) > 0 И (НЕ БылРазрыв ИЛИ СледСимволСтрочный <> "), Символ, НРег(Символ));
    Если БылРазрыв И СледСимволСтрочный <> " И СледСледСимволСтрочный = " И СледСледСимвол <> " Тогда
    СимволДляКонкатенации = НРег(СимволДляКонкатенации);
    ИначеЕсли СледСимвол = " И БылРазрыв Тогда
    СимволДляКонкатенации = Символ;
    КонецЕсли;

    КонецЕсли;
    ЗаголовокДоработанный = ЗаголовокДоработанный + СимволДляКонкатенации;
    ПредПредСимволСтрочный = ?(ПредСимвол = ВРег(ПредСимвол), ПредСимвол, ");
    ПредСимвол = Символ;
    ПредСимволСтрочный = ?(Символ = ВРег(Символ), Символ, ");
    КонецЦикла;

    Возврат Врег(Лев(ЗаголовокДоработанный, 1)) + Сред(ЗаголовокДоработанный, 2);

    КонецФункции
```
---
(Мой вопрос закрыт:) Переделал - использовал подсистему БСП "Заполнение объектов" в расширении.
(В частности, по примерам:
- https://infostart.ru/1c/articles/949483/ ("Использование подсистемы БСП "Заполнение объектов");
- https://infostart.ru/1c/tools/903971/ ("Обработка заполнения объекта, вызов клиентского метода. Подключение через расширение")).