#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОписаниеПеременных
Перем ПолеСтрокаСообщенияОбОшибке;
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ,
НастройкаОтборовНаУзле,
ЗначенияПоУмолчаниюНаУзле,
РегистрироватьДанныеДляВыгрузки = Истина,
ИспользоватьНастройкиТранспорта = Истина)
КодЭтогоУзла = ?(ИспользоватьПрефиксыДляНастройкиОбмена,
ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника),
ПолучитьКодУзлаЭтойБазы(ИдентификаторИнформационнойБазыИсточника));
Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда
КодНовогоУзла = КодНовогоУзлаВторойБазы;
ИначеЕсли ИспользоватьПрефиксыДляНастройкиОбмена Тогда
КодНовогоУзла = ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ПрефиксИнформационнойБазыПриемника);
Иначе
КодНовогоУзла = ИдентификаторИнформационнойБазыПриемника;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
НачатьТранзакцию();
Попытка
СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла);
Если ИспользоватьНастройкиТранспорта Тогда
ОбновитьНастройкиТранспортаСообщенийОбмена();
КонецЕсли;
Если ИспользоватьПрефиксыДляНастройкиОбмена
И Не ПрефиксИнформационнойБазыИсточникаУстановлен Тогда
ОбновитьЗначениеКонстантыПрефиксаИнформационнойБазы();
КонецЕсли;
Если ЭтоНастройкаРаспределеннойИнформационнойБазы
И ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда
Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина);
Константы.ИспользоватьСинхронизациюДанных.Установить(Истина);
Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Истина);
ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными();
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ);
Возврат;
КонецПопытки;
ОбменДаннымиСлужебный.ПроверитьКэшМеханизмаРегистрацииОбъектов();
Попытка
Если РегистрироватьДанныеДляВыгрузки
И Не ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда
ЗарегистрироватьИзмененияДляОбмена(Отказ);
КонецЕсли;
Исключение
СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ);
Возврат;
КонецПопытки;
КонецПроцедуры
Процедура ВнешнееСоединениеЗарегистрироватьИзмененияДляОбмена() Экспорт
ЗарегистрироватьИзмененияДляОбмена(Ложь);
КонецПроцедуры
Процедура ВнешнееСоединениеВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаXML) Экспорт
ВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаXML);
КонецПроцедуры
Процедура ВнешнееСоединениеОбновитьНастройкиОбменаДанными(ЗначенияПоУмолчаниюНаУзле) Экспорт
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(УзелИнформационнойБазы));
ЭлементБлокировки.УстановитьЗначение("Ссылка", УзелИнформационнойБазы);
Блокировка.Заблокировать();
ЗаблокироватьДанныеДляРедактирования(УзелИнформационнойБазы);
УзелИнформационнойБазыОбъект = УзелИнформационнойБазы.ПолучитьОбъект();
ОбменДаннымиСобытия.УстановитьЗначенияПоУмолчаниюНаУзле(УзелИнформационнойБазыОбъект, ЗначенияПоУмолчаниюНаУзле);
УзелИнформационнойБазыОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена");
УзелИнформационнойБазыОбъект.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ВыполнитьВыгрузкуПараметровМастераВоВременноеХранилище(Отказ, АдресВременногоХранилища) Экспорт
УстановитьПривилегированныйРежим(Истина);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");
МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
Попытка
МодульПомощникНастройки.НастройкиПодключенияВXML(ЭтотОбъект, ИмяВременногоФайла);
Исключение
СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ);
ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла);
Возврат;
КонецПопытки;
АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла));
ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла);
КонецПроцедуры
Процедура ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле) Экспорт
НастройкаОтборовНаУзле = ПолучитьЗначенияНастройкиОтборов(НастройкаОтборовНаУзле);
ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ЗначенияПоУмолчаниюНаУзле);
Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда
ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"));
КонецЕсли;
Если ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ПриПолученииДанныхОтправителя",ИмяПланаОбмена) Тогда
Попытка
ПланыОбмена[ИмяПланаОбмена].ПриПолученииДанныхОтправителя(НастройкаОтборовНаУзле, Ложь);
Исключение
СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ);
Возврат;
КонецПопытки;
КонецЕсли;
ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим;
ВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ,
НастройкаОтборовНаУзле,
ЗначенияПоУмолчаниюНаУзле,
Ложь,
Истина);
Если Отказ Тогда
УдалитьНастройкуОбменаДанными();
КонецЕсли;
КонецПроцедуры
Процедура УдалитьНастройкуОбменаДанными()
МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена];
УдаляемыйУзел = МенеджерПланаОбмена.НайтиПоКоду(КодНовогоУзлаВторойБазы);
Если Не УдаляемыйУзел.Пустая() Тогда
ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(УдаляемыйУзел);
КонецЕсли;
КонецПроцедуры
Процедура Инициализация(Узел) Экспорт
ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Узел);
ИмяПланаОбменаКорреспондента = ИмяПланаОбмена;
ЭтотУзел = ПланыОбмена[ИмяПланаОбмена].ЭтотУзел();
РеквизитыЭтогоУзла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭтотУзел, "Код, Наименование");
КодУзла = РеквизитыЭтогоУзла.Код;
НаименованиеЭтойБазы = РеквизитыЭтогоУзла.Наименование;
ПрефиксИнформационнойБазыИсточника = РеквизитыЭтогоУзла.Код;
УзелИнформационнойБазы = Узел;
РеквизитыУзла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Узел, "Код, Наименование");
КодУзлаКорреспондента = РеквизитыУзла.Код;
НаименованиеВторойБазы = РеквизитыУзла.Наименование;
ПрефиксИнформационнойБазыПриемника = РеквизитыУзла.Код;
ИспользоватьПрефиксыДляНастройкиОбмена = Не (ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена)
И ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка()));
Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда
Если ОбщегоНазначения.РазделениеВключено() Тогда
ПрефиксИнформационнойБазыИсточника = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена);
Иначе
ПрефиксИнформационнойБазыИсточника = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы");
КонецЕсли;
ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(ПрефиксИнформационнойБазыИсточника);
Иначе
КодПредопределенногоУзла = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена);
ИдентификаторИнформационнойБазыИсточника = КодПредопределенногоУзла;
ПрефиксИнформационнойБазыПриемникаУстановлен = Ложь;
ПрефиксИнформационнойБазыИсточникаУстановлен = Истина;
КонецЕсли;
Если Не ПрефиксИнформационнойБазыИсточникаУстановлен
И ИспользоватьПрефиксыДляНастройкиОбмена Тогда
ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(ПрефиксИнформационнойБазыИсточника);
КонецЕсли;
НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспортаПоУмолчанию(Узел, ИдентификаторТранспорта);
КонецПроцедуры
Функция СтрокаСообщенияОбОшибке() Экспорт
Если ТипЗнч(ПолеСтрокаСообщенияОбОшибке) <> Тип("Строка") Тогда
ПолеСтрокаСообщенияОбОшибке = "";
КонецЕсли;
Возврат ПолеСтрокаСообщенияОбОшибке;
КонецФункции
Процедура СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла)
МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена];
ЭтотУзел = МенеджерПланаОбмена.ЭтотУзел();
КодЭтогоУзлаВБазе = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код");
ЭтоПланОбменаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена);
Если ПустаяСтрока(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код"))
Или (ЭтоПланОбменаРИБ И КодЭтогоУзлаВБазе <> КодЭтогоУзла)
Или (ИспользоватьПрефиксыДляНастройкиОбмена И КодЭтогоУзлаВБазе <> КодЭтогоУзла) Тогда
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(ЭтотУзел));
ЭлементБлокировки.УстановитьЗначение("Ссылка", ЭтотУзел);
Блокировка.Заблокировать();
ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект();
ЭтотУзелОбъект.Код = КодЭтогоУзла;
ЭтотУзелОбъект.Наименование = НаименованиеЭтойБазы;
ЭтотУзелОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена");
ЭтотУзелОбъект.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
СоздаватьНовыйУзел = Ложь;
Если ЭтоНастройкаРаспределеннойИнформационнойБазы
И ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда
ГлавныйУзел = ОбменДаннымиСервер.ГлавныйУзел();
Если ГлавныйУзел = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Главный узел для текущей информационной базы не определен.
|Возможно, информационная база не является подчиненным узлом в РИБ.'");
КонецЕсли;
НовыйУзел = ГлавныйУзел.ПолучитьОбъект();
Иначе
НовыйУзел = МенеджерПланаОбмена.НайтиПоКоду(КодНовогоУзла);
СоздаватьНовыйУзел = НовыйУзел.Пустая();
Если СоздаватьНовыйУзел Тогда
НовыйУзел = МенеджерПланаОбмена.СоздатьУзел();
НовыйУзел.Код = КодНовогоУзла;
Иначе
ВызватьИсключение НСтр("ru = 'Значение префикса первой информационной базы не уникально.
|В системе уже существует синхронизация данных для информационной базы (программы) с указанным префиксом.'");
КонецЕсли;
НовыйУзел.Наименование = НаименованиеВторойБазы;
Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВариантНастройки", Метаданные.ПланыОбмена[ИмяПланаОбмена]) Тогда
НовыйУзел.ВариантНастройки = ВариантНастройкиОбмена;
КонецЕсли;
КонецЕсли;
ОбменДаннымиСобытия.УстановитьЗначенияОтборовНаУзле(НовыйУзел, НастройкаОтборовНаУзле);
ОбменДаннымиСобытия.УстановитьЗначенияПоУмолчаниюНаУзле(НовыйУзел, ЗначенияПоУмолчаниюНаУзле);
НовыйУзел.НомерОтправленного = 0;
НовыйУзел.НомерПринятого = 0;
Если ОбщегоНазначения.РазделениеВключено()
И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных()
И ОбменДаннымиСервер.ЭтоРазделенныйПланОбменаБСП(ИмяПланаОбмена) Тогда
НовыйУзел.РегистрироватьИзменения = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(СсылкаНового) Тогда
НовыйУзел.УстановитьСсылкуНового(СсылкаНового);
КонецЕсли;
НовыйУзел.ОбменДанными.Загрузка = Истина;
НовыйУзел.Записать();
Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда
ТаблицаОбъектыБазы = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата(ИмяПланаОбмена,
"ОтправкаПолучение", НовыйУзел.Ссылка);
ТаблицаОбъектыКорреспондента = ТаблицаОбъектыБазы.СкопироватьКолонки();
Для Каждого СтрокаОбъектыБазы Из ТаблицаОбъектыБазы Цикл
СтрокаОбъектыКорреспондента = ТаблицаОбъектыКорреспондента.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаОбъектыКорреспондента, СтрокаОбъектыБазы, "Версия, Объект");
СтрокаОбъектыКорреспондента.Отправка = СтрокаОбъектыБазы.Получение;
СтрокаОбъектыКорреспондента.Получение = СтрокаОбъектыБазы.Отправка;
КонецЦикла;
МенеджерНастройкиXDTO = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиОбменаДаннымиXDTO");
МенеджерНастройкиXDTO.ОбновитьНастройки(
НовыйУзел.Ссылка, "ПоддерживаемыеОбъекты", ТаблицаОбъектыБазы);
МенеджерНастройкиXDTO.ОбновитьНастройкиКорреспондента(
НовыйУзел.Ссылка, "ПоддерживаемыеОбъекты", ТаблицаОбъектыКорреспондента);
СтруктураЗаписи = Новый Структура;
СтруктураЗаписи.Вставить("УзелИнформационнойБазы", НовыйУзел.Ссылка);
СтруктураЗаписи.Вставить("ИмяПланаОбменаКорреспондента", ИмяПланаОбменаКорреспондента);
ОбменДаннымиСлужебный.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиОбменаДаннымиXDTO");
КонецЕсли;
РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбновитьПрефиксы(
НовыйУзел.Ссылка,
?(ИспользоватьПрефиксыДляНастройкиОбмена, ПрефиксИнформационнойБазыИсточника, ""),
ПрефиксИнформационнойБазыПриемника);
Если Не ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(НовыйУзел.Ссылка) Тогда
ОбменДаннымиСервер.ЗавершитьНастройкуСинхронизацииДанных(НовыйУзел.Ссылка);
КонецЕсли;
УзелИнформационнойБазы = НовыйУзел.Ссылка;
Если СоздаватьНовыйУзел
И Не ОбщегоНазначения.РазделениеВключено() Тогда
ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными();
КонецЕсли;
Если КодЭтогоУзла <> КодЭтогоУзлаВБазе
И (ИспользоватьПрефиксыДляНастройкиОбмена
Или ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) Тогда
СтруктураВременныйКод = Новый Структура("Корреспондент, КодУзла", УзелИнформационнойБазы, КодЭтогоУзла);
ОбменДаннымиСлужебный.ДобавитьЗаписьВРегистрСведений(СтруктураВременныйКод, "ПсевдонимыПредопределенныхУзлов");
КонецЕсли;
КонецПроцедуры
Процедура ОбновитьНастройкиТранспортаСообщенийОбмена()
Если ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда
НовыйСправочник = Справочники.НастройкиТранспортаСообщенийОбмена.СоздатьЭлемент();
НовыйСправочник.Корреспондент = УзелИнформационнойБазы;
НовыйСправочник.НастройкаПоУмолчанию = Истина;
НовыйСправочник.ИдентификаторТранспорта = "ПассивныйРежим";
НовыйСправочник.Записать();
КонецЕсли;
КонецПроцедуры
Процедура ОбновитьЗначениеКонстантыПрефиксаИнформационнойБазы()
ЗначениеДоОбновления = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы");
Если ПустаяСтрока(ЗначениеДоОбновления)
И ЗначениеДоОбновления <> ПрефиксИнформационнойБазыИсточника Тогда
ОбменДаннымиСервер.УстановитьПрефиксИнформационнойБазы(СокрЛП(ПрефиксИнформационнойБазыИсточника));
КонецЕсли;
КонецПроцедуры
Процедура ЗарегистрироватьИзмененияДляОбмена(Отказ)
Попытка
ОбменДаннымиСервер.ЗарегистрироватьДанныеДляНачальнойВыгрузки(УзелИнформационнойБазы);
Исключение
СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ);
Возврат;
КонецПопытки;
КонецПроцедуры
Функция ПолучитьКодУзлаЭтойБазы(Знач ПрефиксИнформационнойБазыЗаданныйПользователем)
Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда
Если ЗначениеЗаполнено(КодПредопределенногоУзла) Тогда
Возврат КодПредопределенногоУзла;
Иначе
Возврат СокрЛП(ПрефиксИнформационнойБазыЗаданныйПользователем);
КонецЕсли;
КонецЕсли;
Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда
Если ЗначениеЗаполнено(ПрефиксИнформационнойБазыИсточника) Тогда
Результат = ПрефиксИнформационнойБазыИсточника;
Иначе
Если ПустаяСтрока(Результат) Тогда
Результат = ПрефиксИнформационнойБазыЗаданныйПользователем;
Если ПустаяСтрока(Результат) Тогда
Возврат "000";
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(Результат);
Иначе
Если ЗначениеЗаполнено(ИдентификаторИнформационнойБазыИсточника) Тогда
Возврат ИдентификаторИнформационнойБазыИсточника;
Иначе
Возврат "";
КонецЕсли;
КонецЕсли;
КонецФункции
Процедура ВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаXML, ИдентификаторТранспорта = "") Экспорт
Если ОбщегоНазначения.РазделениеВключено()
И Не ОбменДаннымиПовтИсп.ПланОбменаИспользуетсяВМоделиСервиса(ИмяПланаОбмена) Тогда
ПолеСтрокаСообщенияОбОшибке = НСтр("ru = 'Синхронизация данных с этой программой в режиме сервиса не предусмотрена.'");
ОбменДаннымиСервер.СообщитьОбОшибке(СтрокаСообщенияОбОшибке(), Отказ);
Возврат;
КонецЕсли;
Если ПустаяСтрока(ВариантРаботыМастера) Тогда
ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными";
КонецЕсли;
МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
Попытка
МодульПомощникНастройки.ЗаполнитьНастройкиПодключенияИзXML(ЭтотОбъект, СтрокаXML,,, ИдентификаторТранспорта);
Исключение
СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ);
КонецПопытки;
КонецПроцедуры
Процедура СообщитьИнформациюОбОшибке(ИнформацияОбОшибке, Отказ)
ПолеСтрокаСообщенияОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ОбменДаннымиСервер.СообщитьОбОшибке(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Отказ);
ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке());
КонецПроцедуры
Функция ПолучитьЗначенияНастройкиОтборов(СтруктураНастроекВнешнегоСоединения)
Возврат ОбменДаннымиСервер.ПолучитьЗначенияНастройкиОтборов(СтруктураНастроекВнешнегоСоединения);
КонецФункции
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли