Кнопка во всех формах конфигурации "Бухгалтерия 3.0.х"

1. wrooom 179 12.09.22 15:18 Сейчас в теме
В УТ11.4 есть МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере, а в БП3.0 ?
Так же в УТ11.4 есть МодификацияКонфигурацииКлиентПереопределяемый.ВыполнитьПереопределяемуюКоманду, а в БП3.0 ?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
3. EVKash 14 12.09.22 15:53 Сейчас в теме +5 $m
(1) 1. можно прицепиться к какой-нибудь другой общей процедуре. например
ВерсионированиеОбъектов.ПриСозданииНаСервере(Форма)
2. Есть
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
(2)
ПодключаемыеКоманды.ПриСозданииНаСервере
Не во всех формах есть.
Естественно, захватывать их в расширение и использовать с инструкцией &После.
Лучше вместо и если команда не своя, то ПродолжитьВызов. Иначе можно на ошибки нарваться типа команда не найдена в ПараметрыПодключаемыхКоманд.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ixijixi 1805 12.09.22 15:50 Сейчас в теме
А в БП нету. Рекомендую использовать ПодключаемыеКоманды.ПриСозданииНаСервере И ПодключаемыеКомандыКлиент.ВыполнитьКоманду. Естественно, захватывать их в расширение и использовать с инструкцией &После.
wrooom; 0x00; +2 Ответить
3. EVKash 14 12.09.22 15:53 Сейчас в теме +5 $m
(1) 1. можно прицепиться к какой-нибудь другой общей процедуре. например
ВерсионированиеОбъектов.ПриСозданииНаСервере(Форма)
2. Есть
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
(2)
ПодключаемыеКоманды.ПриСозданииНаСервере
Не во всех формах есть.
Естественно, захватывать их в расширение и использовать с инструкцией &После.
Лучше вместо и если команда не своя, то ПродолжитьВызов. Иначе можно на ошибки нарваться типа команда не найдена в ПараметрыПодключаемыхКоманд.
4. wrooom 179 12.09.22 20:45 Сейчас в теме
Пишет ошибку при нажатии на кнопку : {ОбщийМодуль.ПодключаемыеКоманды.Модуль(1372)}: Сведения о команде "КомандаTtt" не существуют. Не знаю как побороть.
5. EVKash 14 13.09.22 08:04 Сейчас в теме
(4) я же писал об этом... надо
&Вместо("ВыполнитьКоманду")
Процедура Расш1_ВыполнитьКоманду(Форма, Команда, Источник)
	
	Если Команда.Имя = "КомандаTtt" Тогда
		//Делаем что надо
	Иначе
		ПродолжитьВызов(Форма, Команда, Источник);
	КонецЕсли;
	
КонецПроцедуры
Показать
Безопасный режим у расширения должен быть отключен.
6. wrooom 179 13.09.22 09:28 Сейчас в теме
(5) если использовать &вместо , тогда процедура не будет работать на других конфигурациях.
7. EVKash 14 13.09.22 09:37 Сейчас в теме
(6)
если использовать &вместо , тогда процедура не будет работать на других конфигурациях.
что значит "не будет работать на других конфигурациях"?
8. wrooom 179 13.09.22 09:42 Сейчас в теме
(7) в тех конфигурациях, где не объявлены переменные, которые используются в этой процедуре. Я Имею ввиду старые версии бух3.0
9. EVKash 14 13.09.22 10:12 Сейчас в теме
(8) не понимаю, какие переменные? пример бы...
"Вместо" в случае (5) - это практически "Перед", только с проверкой условия - выполнять стандартный метод или нет.
10. VyacheslavShilov 29.09.23 18:04 Сейчас в теме
Кто-нибудь может подсказать, как возможно в УНФ (3.0.2.215) (платформа 8.3.23.1865) добавить, используя конфигурацию-расширение и общие модули в рабочей конфигурации, - новую команду заполнения (с подтверждением по вопросу пользователю) для ТЧ "Товары" у документа (Вывод из оборота ИС МП), не добавляя в расширение форму этого документа?
Насколько понял - нужно использовать модули "ПодключаемыеКоманды" и "ПодключаемыеКомандыКлиент".
Пробовал сделать, как описываю ниже, но вызвать выполнение команды на сервере не получается.

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

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

&НаКлиенте
Процедура ГМ_ДокВыводИзОборотаТоварыЗаполнитьБазовымиЦенами(Форма)
	
	Если Форма.Объект.Товары.Количество() > 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);

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот