&НаКлиенте
Перем КонтекстЭДОКлиент Экспорт;
#Область ОписаниеПеременных
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Инициализация(Параметры);
ИзменитьОформлениеФормы();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОписаниеОповещения = Новый ОписаниеОповещения("ПриОткрытии_ПослеПолученияКонтекста", ЭтотОбъект);
ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если Элементы.Страницы.ТекущаяСтраница <> Элементы.УспешнаяОтправка Тогда
ТекстПредупреждения = НСтр("ru = 'Прервать работу помощника?'");
ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы(
ЭтотОбъект,
Отказ,
ЗавершениеРаботы,
ТекстПредупреждения,
"ПрограммноеЗакрытие");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ГруппаШаг1_ПояснениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("ЭтоТолькоНастройка", Истина);
ДополнительныеПараметры.Вставить("СкрытьНастраиваемыеОрганизации", Истина);
ОткрытьФорму("Обработка.НачалоРаботыОблачной1СО.Форма.БыстрыйСтарт", ДополнительныеПараметры);
КонецПроцедуры
&НаКлиенте
Процедура КодНалоговогоОрганаПредставленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
КПП = КППОрганизации();
ЗначенияДляОтбора = Новый Массив;
ЗначенияДляОтбора.Добавить(Новый Структура("КодНО, КПП", КодНалоговогоОрганаПредставления, КПП));
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Организация", Организация);
ДополнительныеПараметры.Вставить("ЗначенияДляОтбора", ЗначенияДляОтбора);
ФормаВыбораНалоговогоОргана = РегламентированнаяОтчетностьКлиент.ПолучитьОбщуюФормуПоИмени(
"ФормаВыбораНалоговогоОргана",
ДополнительныеПараметры,
ЭтаФорма);
Если ФормаВыбораНалоговогоОргана.ТаблицаНО.Количество() <> 0 Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("КодНалоговогоОрганаПредставленияНачалоВыбораПослеВвода", ЭтотОбъект);
ФормаВыбораНалоговогоОргана.ОписаниеОповещенияОЗакрытии = ОписаниеОповещения;
ФормаВыбораНалоговогоОргана.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
ФормаВыбораНалоговогоОргана.Открыть();
Иначе
ОчиститьСообщения();
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Код налогового органа сначала необходимо задать в справочнике ""Организации""'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Ошибка_ЧтоДелатьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТребуетсяПомощь(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура УспешнаяОтправка_ПодсказкаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Раздел", ПредопределенноеЗначение("Перечисление.СтраницыЖурналаОтчетность.Уведомления"));
ОткрытьФорму("ОбщаяФорма.РегламентированнаяОтчетность",
ПараметрыОткрытия,
,
"1С-Отчетность");
Оповестить("Открытие формы 1С-Отчетность", ПараметрыОткрытия);
КонецПроцедуры
&НаКлиенте
Процедура СертификатРуководителяНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Оповещение = Новый ОписаниеОповещения(
"СертификатРуководителяПослеВыбора",
ЭтотОбъект);
ОбработкаЗаявленийАбонентаКлиент.НайтиИУстановитьСертификатСТокена(
ЭтотОбъект,
Оповещение,
,
Ложь);
КонецПроцедуры
&НаКлиенте
Функция ПропуститьСсылку(Строка)
Ссылка = Строка.Ссылка;
Пропустить =
НадоСоздатьЗПЭД
И ТипЗнч(Ссылка) = Тип("ДокументСсылка.ЗаявленияПоЭлДокументооборотуСПФР");
Возврат Пропустить;
КонецФункции
&НаКлиенте
Процедура ГруппаШаг3_ПояснениеОбработкаНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Ссылка = "МЧД" Тогда
Список = Новый СписокЗначений;
Для каждого Строка Из ТаблицаДокументов Цикл
Если НЕ ПропуститьСсылку(Строка) Тогда
Список.Добавить(Строка.Ссылка, Строка.Представление);
КонецЕсли;
КонецЦикла;
Если Список.Количество() = 1 Тогда
ПоказатьЗначение(,Список[0].Значение);
Иначе
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПослеВыбораМЧД",
ЭтотОбъект);
Список.ПоказатьВыборЭлемента(ОписаниеОповещения, НСтр("ru = 'Выберите МЧД'"));
КонецЕсли;
ИначеЕсли СтрНайти(Ссылка, "ЗаявленияПоЭлДокументооборотуСПФР") Тогда
ПоказатьЗначение(, ЗПЭД);
ИначеЕсли СтрНайти(Ссылка, "УведомлениеОПредоставленииПолномочийПредставителю") Тогда
ПоказатьЗначение(, МЧДУПУП);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СертификатРуководителяПредставлениеОчистка(Элемент, СтандартнаяОбработка)
СертификатРуководителяОтпечаток = "";
СертификатРуководителяПредставление = "";
КонецПроцедуры
&НаКлиенте
Процедура ПредставлениеПолномочийНажатие(Элемент)
Если НЕ ПроверитьОрганизацию() Тогда
Возврат;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПредставлениеПолномочийНажатие_ПослеНажатия",
ЭтотОбъект);
ПараметрыФормы = ПараметрыПолномочийОбщие() + "," + ПараметрыПолномочий();
ДополнительныеПараметры = Новый Структура(ПараметрыФормы);
ЗаполнитьЗначенияСвойств(ДополнительныеПараметры, ЭтотОбъект, ПараметрыФормы);
ДополнительныеПараметры.Вставить("ПараметрыФормы", ПараметрыФормы);
ОткрытьФорму("Обработка.ДокументооборотСКонтролирующимиОрганами.Форма.ПомощникМЧД_Полномочия",ДополнительныеПараметры,ЭтотОбъект,,,,ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура РасширенныеНастройкиНажатие(Элемент)
Если НЕ ПроверитьОрганизацию() Тогда
Возврат;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения(
"РасширенныеНастройки_ПослеНажатия",
ЭтотОбъект);
ПараметрыФормы = ВсеРасширенныеНастройки(ЭтотОбъект);
ДополнительныеПараметры = Новый Структура(ПараметрыФормы);
ЗаполнитьЗначенияСвойств(ДополнительныеПараметры, ЭтотОбъект, ПараметрыФормы);
ДополнительныеПараметры.Вставить("ПараметрыФормы", ПараметрыФормы);
ОткрытьФорму("Обработка.ДокументооборотСКонтролирующимиОрганами.Форма.ПомощникМЧД_РасширенныеНастройки",
ДополнительныеПараметры,,,,,
ОписаниеОповещения);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ВсеРасширенныеНастройки(Форма)
Подстроки = Новый Массив;
Подстроки.Добавить(РасширенныеНастройкиОбщие());
Если Форма.СоздатьМЧДФНС Тогда
Подстроки.Добавить(РасширенныеНастройкиФНС());
КонецЕсли;
Если СоздатьМЧД_ЕФ(Форма) Тогда
Подстроки.Добавить(РасширенныеНастройкиМЧДЕдиногоФормата());
КонецЕсли;
Если Форма.СоздатьМЧДСФР Тогда
Подстроки.Добавить(РасширенныеНастройкиМЧДФСС());
Подстроки.Добавить(РасширенныеНастройкиМЧДУПУП());
КонецЕсли;
Подстроки = СтрСоединить(Подстроки, ",");
Возврат Подстроки;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция РасширенныеНастройкиОбщие()
Возврат ПараметрыПолномочийОбщие();
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция РасширенныеНастройкиФНС()
Настройки = "НалоговыеОрганыДействия,
|ПередовериеВозможно,
|ЛицоБезДовЮЛ,
|НомерРодительскойДоверенности,
|РодительскаяДоверенность,
|НомерКорневойДоверенности,
|КорневаяДоверенность,
|КППОбособки,
|ВыданаОбособке,
|ПредставительНеСотрудник";
Возврат Настройки;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция РасширенныеНастройкиМЧДЕдиногоФормата()
Настройки = "РегистрироватьВРеестре,
|ПередовериеМЧДЕдиногоФормата,
|ДопСведения";
Возврат Настройки;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция РасширенныеНастройкиМЧДФСС()
Настройки = "ЭтоЭлектроннаяПодписьВМоделиСервиса,
|СертификатПредставителяПредставление,
|ПредставительСертификат,
|Представитель_ИдентификаторСертификата,
|Представитель_СертификатBase64,
|РодительскаяДоверенностьФСС,
|НомерРодительскойДоверенностиФСС,
|ПередовериеВозможноФСС,
|ПредставительНеСотрудник";
Возврат Настройки;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция РасширенныеНастройкиМЧДУПУП()
Настройки = "НаименованиеДокумента,
|КемВыдан,
|НомерДокумента";
Возврат Настройки;
КонецФункции
&НаКлиенте
Процедура ПредставлениеУдостоверенияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ПаспортныеДанныеПриНажатии(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура АдресПредставлениеОчистка(Элемент, СтандартнаяОбработка)
Префикс = Префикс(Элемент);
ОчиститьАдрес(Префикс);
КонецПроцедуры
&НаКлиенте
Процедура ПредставлениеУдостоверенияОчистка(Элемент, СтандартнаяОбработка)
Префикс = Префикс(Элемент);
ОчиститьУдостоверение(Префикс);
КонецПроцедуры
&НаКлиенте
Процедура ФлагПриИзменении(Элемент)
Если НужноСпроситьПроНеподключеныйОрган(Элемент.Имя) Тогда
СпроситьПроНеподключеныйОрган(Элемент);
Иначе
ФлагПриИзменении_Продолжение(Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СпроситьПроНеподключеныйОрган(Элемент)
Орган = СтрЗаменить(Элемент.Имя, "СоздатьМЧД", "");
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(НСтр("ru = 'Продолжить создание МЧД'"));
Кнопки.Добавить(НСтр("ru = 'Отмена'"));
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("Кнопки", Кнопки);
ДополнительныеПараметры.Вставить("Орган", Орган);
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ОписаниеОповещения = Новый ОписаниеОповещения(
"СпроситьПроНеподключеныйОрган_ПослеПроверки",
ЭтотОбъект,
ДополнительныеПараметры);
Текст = НСтр("ru = 'У организации %1 не подключен обмен с гос. органом %2, и поэтому представитель не сможет отправлять отчетность в этот орган.
|
|Вы можете продолжить создание МЧД, если она вам нужна для другой программы.'");
Текст = СтрШаблон(Текст, Организация, Орган);
ПоказатьВопрос(ОписаниеОповещения, Текст, Кнопки,,Кнопки[0].Значение);
КонецПроцедуры
&НаСервере
Функция НужноСпроситьПроНеподключеныйОрган(ЭлементИмя)
Если ЭтоВызовИзЗаявленияНаПодключение Тогда
Возврат Ложь;
КонецЕсли;
Органы = Перечисления.ТипыКонтролирующихОрганов;
Если ЭлементИмя = "СоздатьМЧДФНС" Тогда
Возврат НЕ ПодключенОрган(Органы.ФНС) И СоздатьМЧДФНС;
ИначеЕсли ЭлементИмя = "СоздатьМЧДРосстат" Тогда
Возврат НЕ ПодключенОрган(Органы.ФСГС) И СоздатьМЧДРосстат;
ИначеЕсли ЭлементИмя = "СоздатьМЧДСФР" Тогда
Возврат НЕ ПодключенОрган(Органы.ФСС) И НЕ ПодключенОрган(Органы.ПФР) И СоздатьМЧДСФР;
ИначеЕсли ЭлементИмя = "СоздатьМЧДФТС" Тогда
Возврат НЕ ПодключенОрган(Органы.ФТС) И СоздатьМЧДФТС;
ИначеЕсли ЭлементИмя = "СоздатьМЧДФСРАР" Тогда
Возврат НЕ ПодключенОрган(Органы.ФСРАР) И СоздатьМЧДФСРАР;
ИначеЕсли ЭлементИмя = "СоздатьМЧДРПН" Тогда
Возврат Ложь;
ИначеЕсли ЭлементИмя = "СоздатьМЧДЦБ" Тогда
Возврат НЕ ПодключенОрган(Органы.ЦБ) И СоздатьМЧДЦБ;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура СпроситьПроНеподключеныйОрган_ПослеПроверки(Ответ, ВходящийКонтекст) Экспорт
Кнопки = ВходящийКонтекст.Кнопки;
Если Ответ = Кнопки[0].Значение Тогда
ФлагПриИзменении_Продолжение(ВходящийКонтекст.Элемент);
ИначеЕсли Ответ = Кнопки[1].Значение Тогда
ЭтотОбъект[ВходящийКонтекст.Элемент.Имя] = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФлагПриИзменении_Продолжение(Элемент)
Если Элемент = Элементы.СоздатьМЧДСФР Тогда
НадоСоздатьЗПЭД = НадоСоздатьЗПЭД();
ИначеЕсли Элемент = Элементы.СоздатьМЧДРосстат
ИЛИ Элемент = Элементы.СоздатьМЧДФСРАР
ИЛИ Элемент = Элементы.СоздатьМЧДРПН Тогда
ИнициализироватьРасширенныеНастройки();
КонецЕсли;
СкорректироватьПолномочияПоОргану(Элемент.Имя);
ОчиститьМЧД();
ИзменитьОформлениеФормы();
КонецПроцедуры
&НаСервере
Процедура СкорректироватьПолномочияПоОргану(ИмяЭлемента)
Если НЕ ЭтоАдресВременногоХранилища(АдресДереваПолномочий) Тогда
Возврат;
КонецЕсли;
Если ВидПолномочий = МЧДБРОКлиентСервер.ТолькоДляОтчетности() Тогда
МЧДБРОКлиентСервер.ВыделитьПолномочияДляОтчетностиРекурсивно(ЭтотОбъект, Полномочия);
АдресДереваПолномочий = МЧДБРО.АдресДерева(ЭтотОбъект, УникальныйИдентификатор);
ИначеЕсли ВидПолномочий = МЧДБРОКлиентСервер.ПроизвольныйНабор()
И (ИмяЭлемента = "СоздатьМЧДФТС" ИЛИ ИмяЭлемента = "СоздатьМЧДФСРАР" ИЛИ ИмяЭлемента = "СоздатьМЧДРосстат" ИЛИ ИмяЭлемента = "СоздатьМЧДРПН") Тогда
Корень = КореньПолномочийМЧДЕФ();
МЧДБРОКлиентСервер.ВыделитьПолномочияДляОтчетностиРекурсивно(ЭтотОбъект, Корень);
АдресДереваПолномочий = МЧДБРО.АдресДерева(ЭтотОбъект, УникальныйИдентификатор);
ИначеЕсли ВидПолномочий = МЧДБРОКлиентСервер.ПроизвольныйНабор() Тогда
Дерево = ПолучитьИзВременногоХранилища(АдресДереваПолномочий);
Для Каждого Строка Из Дерево.Строки Цикл
Если ИмяЭлемента = "СоздатьМЧДФНС" И Строка.Наименование = МЧДБРОКлиентСервер.МЧД_ФНС()
ИЛИ ИмяЭлемента = "СоздатьМЧДСФР" И Строка.Наименование = МЧДБРОКлиентСервер.МЧД_СФР()
ИЛИ ИмяЭлемента = "СоздатьМЧДЦБ" И Строка.Наименование = МЧДБРОКлиентСервер.МЧД_ЦБ() Тогда
Если Строка.Пометка <> ЭтотОбъект[ИмяЭлемента] Тогда
Строка.Пометка = ЭтотОбъект[ИмяЭлемента];
ТребованияФНСКлиентСервер.ПроставитьПометкиВниз(Строка);
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
АдресДереваПолномочий = ПоместитьВоВременноеХранилище(Дерево, УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция КореньПолномочийМЧДЕФ()
Для Каждого Строка Из ТребованияФНСКлиентСервер.ПотомкиСтроки(Полномочия) Цикл
Если Строка.Наименование = МЧДБРОКлиентСервер.МЧД_ЕФ() Тогда
Возврат Строка;
КонецЕсли;
КонецЦикла;
КонецФункции
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ПриИзмененииОрганизации();
КонецПроцедуры
&НаКлиенте
Процедура ДоверительПриИзменении(Элемент)
ИнициализироватьДанныеДоверителя();
КонецПроцедуры
&НаКлиенте
Процедура ПредставительПриИзменении(Элемент)
ОчиститьМЧД();
ИнициализироватьДанныеПредставителя();
ИзменитьОформлениеФормы();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыИмяТаблицыФормы
&НаКлиенте
Процедура СопоставлениеМЧДВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элемент.ТекущиеДанные;
Если Поле.Имя = "СопоставлениеМЧДСтараяМЧД" И ЗначениеЗаполнено(ТекущиеДанные.СтараяМЧД) Тогда
ПоказатьЗначение(, ТекущиеДанные.СтараяМЧД);
ИначеЕсли Поле.Имя = "СопоставлениеМЧДНоваяМЧД" И ЗначениеЗаполнено(ТекущиеДанные.НоваяМЧД) Тогда
ПоказатьЗначение(, ТекущиеДанные.НоваяМЧД);
ИначеЕсли Поле.Имя = "СопоставлениеМЧДОрганПредставление" Тогда
Если ЗначениеЗаполнено(ТекущиеДанные.ИФНС) Тогда
ПоказатьЗначение(, ТекущиеДанные.ИФНС);
ИначеЕсли ТекущиеДанные.ОрганПредставление = "Росстат" Тогда
ОткрытьНастройкиРосстат();
ИначеЕсли ТекущиеДанные.ОрганПредставление = "СФР (бывш. ФСС)" Тогда
КонтекстЭДОКлиент.ОткрытьФормуНастройкиЭДОсФСС(Организация);
ИначеЕсли ТекущиеДанные.ОрганПредставление = "ФТС" Тогда
КонтекстЭДОКлиент.ОткрытьФормуНастройкиЭДОсФТС(Организация);
ИначеЕсли ТекущиеДанные.ОрганПредставление = "Банк России" Тогда
КонтекстЭДОКлиент.ОткрытьФормуНастройкиЭДОсФНСиПФРиРосстатомиЦБ(Организация, ЭтаФорма,, Истина);
КонецЕсли;
ИначеЕсли Поле.Имя = "СопоставлениеМЧДЕстьОшибка" Тогда
Орган = СтрЗаменить(ТекущиеДанные.ОрганПредставление, Символы.ПС, "");
ПоказатьОшибкуПоТреугольникуВнимание(Орган, "СказатьЧтоНеУдалосьНайтиСертификат_ПослеВопроса_Треугольник", ТекущиеДанные);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьНастройкиРосстат()
ОповещениеОЗавершении = Новый ОписаниеОповещения();
Спецоператор = КонтекстЭДОКлиент.ПолучитьРеквизитНаСервере(УчетнаяЗапись, "СпецоператорСвязи");
ПолучателиФСГС = ПолучателиФСГС(УчетнаяЗапись);
ТипПолучателя = ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФСГС");
ПараметрыПодключенияНаправления = Новый Структура("НаправлениеПодключено, НастроитьМЧД", Истина, Истина);
КонтекстЭДОКлиент.ОткрытьФормуПодключенияНаправленияСдачиОтчетности(
ОповещениеОЗавершении,
Организация,
Спецоператор,
ТипПолучателя,
ПолучателиФСГС,
Ложь,
ПараметрыПодключенияНаправления,
Истина);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучателиФСГС(УчетнаяЗапись)
Возврат ОбработкаЗаявленийАбонента.ПолучателиФСГС(УчетнаяЗапись);
КонецФункции
&НаКлиенте
Процедура СопоставлениеМЧДПометкаПриИзменении(Элемент)
ТекущиеДанные = Элементы.СопоставлениеМЧД.ТекущиеДанные;
Если ТекущиеДанные.Пометка И ТекущиеДанные.ЕстьОшибка Тогда
Орган = СтрЗаменить(ТекущиеДанные.ОрганПредставление, Символы.ПС, "");
ПоказатьОшибкуПоТреугольникуВнимание(Орган, "СказатьЧтоНеУдалосьНайтиСертификат_ПослеВопроса_Пометка", ТекущиеДанные);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура НазадНаСертификат(Команда)
ОткрытьСтраницуСертификат();
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЕще(Команда)
Организация = Неопределено;
ПриИзмененииОрганизации();
Представитель = Неопределено;
ИнициализироватьДанныеПредставителя();
НазадНаСоздание(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьМЧДВЗаявление(Команда)
Закрыть(СозданныеМЧД);
КонецПроцедуры
&НаКлиенте
Процедура ДополнитьСозданныеМЧД()
Если ЗначениеЗаполнено(СозданныеМЧД) Тогда
МЧД = Новый Массив(СозданныеМЧД);
Иначе
МЧД = Новый Массив;
КонецЕсли;
Для каждого Строка Из ТаблицаДокументов Цикл
МЧД.Добавить(Строка.Ссылка);
КонецЦикла;
СозданныеМЧД = Новый ФиксированныйМассив(МЧД);
КонецПроцедуры
&НаКлиенте
Процедура ПодписатьИОтправить(Команда)
Если ОтправкаВозможна И НЕ ЗначениеЗаполнено(УчетнаяЗапись) Тогда
ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ПоказатьФормуПредложениеОформитьЗаявлениеНаПодключение(, Истина);
Возврат;
КонецЕсли;
Если НЕ ПроверитьНаОшибки() Тогда
Возврат;
КонецЕсли;
Если СертификатРуководителяОтпечаток = "" Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Выберите сертификат руководителя'"));
Возврат;
КонецЕсли;
АктивизироватьСтраницу(
Элементы.Страницы,
Элементы.Сертификат);
АктивизироватьСтраницу(
Элементы.Сертификат_Страницы,
Элементы.СтраницаБублик);
ПодключитьОбработчикОжидания("Подключаемый_ПодписатьИОтправить", 0.3, Истина);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПодписатьИОтправить()
ПодписатьИОтправитьЦикл(0);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьТаблицуСозданнымиМЧД()
ТаблицаДокументов.Очистить();
Если СоздатьМЧДФНС Тогда
ДобавитьСтрокуВТаблицу(МЧДФНС);
КонецЕсли;
Если СоздатьМЧДСФР Тогда
ДобавитьСтрокуВТаблицу(МЧДФСС);
ДобавитьСтрокуВТаблицу(МЧДУПУП);
Если НадоСоздатьЗПЭД Тогда
ДобавитьСтрокуВТаблицу(ЗПЭД);
КонецЕсли;
КонецЕсли;
Если СоздатьМЧД_ЕФ(ЭтотОбъект) Тогда
ДобавитьСтрокуВТаблицу(МЧДЕФ);
КонецЕсли;
Если СоздатьМЧДЦБ Тогда
ДобавитьСтрокуВТаблицу(МЧДЦБ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьСтрокуВТаблицу(Ссылка)
НовСтр = ТаблицаДокументов.Добавить();
НовСтр.Ссылка = Ссылка;
НовСтр.Представление = МЧДБРОКлиентСервер.ПредставлениеМЧД(Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура ПодписатьИОтправитьЦикл(ТекущийНомер)
Если ТекущийНомер = ТаблицаДокументов.Количество() Тогда
Отбор = Новый Структура();
Отбор.Вставить("Выполнено", Ложь);
ЕстьОшибки = ТаблицаДокументов.НайтиСтроки(Отбор).Количество() > 0;
Если ЕстьОшибки Тогда
ПоказатьСтраницуОшибка();
Иначе
ДополнитьСозданныеМЧД();
ПоказатьСтраницуУспех();
КонецЕсли;
Иначе
ТекущаяСтрока = ТаблицаДокументов[ТекущийНомер];
Если ТекущаяСтрока.Выполнено Тогда
ТекущийНомер = ТекущийНомер + 1;
ПодписатьИОтправитьЦикл(ТекущийНомер);
Иначе
Ссылка = ТекущаяСтрока.Ссылка;
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПодписатьИОтправить_ПослеОбработкиОдного",
ЭтотОбъект,
ТекущийНомер);
ВыполнитьПодписание =
ЭтоМЧДЦБ(Ссылка)
ИЛИ НадоСоздатьЗПЭД И ТипЗнч(Ссылка) = Тип("ДокументСсылка.УведомлениеОПредоставленииПолномочийПредставителю")
ИЛИ НадоСоздатьЗПЭД И ТипЗнч(Ссылка) = Тип("ДокументСсылка.ЗаявленияПоЭлДокументооборотуСПФР")
ИЛИ НЕ ОтправкаВозможна;
Элементы.ГруппаБублик_Отсчет.Заголовок =
?(ВыполнитьПодписание, НСтр("ru = 'Подписывается '"), НСтр("ru = 'Отправляется '"))
+ Строка(ТекущийНомер + 1) + " документ из "
+ Строка(ТаблицаДокументов.Количество());
Если ВыполнитьПодписание И НЕ ДокументооборотСКОВызовСервера.МЧДПодписана(Ссылка) Тогда
ТекущаяСтрока.ОписаниеОшибки = "";
ДокументооборотСКОКлиент.ПодписатьМЧД(ОписаниеОповещения, Ссылка, СертификатРуководителяОтпечаток);
ИначеЕсли НЕ ВыполнитьПодписание И НЕ ДокументооборотСКОВызовСервера.ОтчетОтправлен(Ссылка) Тогда
ТекущаяСтрока.ОписаниеОшибки = "";
ДокументооборотСКОКлиент.ОтправитьМЧД(ОписаниеОповещения, Ссылка, СертификатРуководителяОтпечаток);
Иначе
ПодписатьИОтправить_ПослеОбработкиОдного(ТекущаяСтрока, ТекущийНомер);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПодписатьИОтправить_ПослеОбработкиОдного(Результат, ТекущийНомер) Экспорт
ТекущаяСтрока = ТаблицаДокументов[ТекущийНомер];
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, Результат);
Если Результат.Выполнено Тогда
СопоставитьМЧДЦБ(ТекущаяСтрока.Ссылка);
КонецЕсли;
ТекущийНомер = ТекущийНомер + 1;
ПодписатьИОтправитьЦикл(ТекущийНомер);
КонецПроцедуры
&НаСервере
Процедура СопоставитьМЧДЦБ(МЧД) Экспорт
Если ДокументооборотСКОКлиентСервер.ПодсистемаЦБСуществует()
И ТипЗнч(МЧД) = Тип("СправочникСсылка." + ИмяТипаСправочникаМашиночитаемыеДоверенностиЦБ)
И ЗначениеЗаполнено(УчетнаяЗапись) Тогда
МЧДБРО.СопоставитьМЧДЦБ(МЧД);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НазадНаСоздание(Команда)
АктивизироватьСтраницу(
Элементы.Страницы,
Элементы.Создание);
КонецПроцедуры
&НаКлиенте
Процедура Далее(Команда)
ОчиститьСообщения();
Если НЕ КорректноЗаполнено() Тогда
Возврат;
КонецЕсли;
Если НужноРегистрироватьВРеестре() Тогда
НомерДоверенности = ПолучитьНомерМЧДРР();
Если НЕ ЗначениеЗаполнено(НомерДоверенности) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не удалось создать МЧД. Попробуйте повторить операцию позже'"));
Возврат;
КонецЕсли;
КонецЕсли;
НайтиИлиСоздатьПредставителя();
СкорректироватьДанныеПередСозданием();
Успешно = СоздатьМЧД();
Если НЕ Успешно Тогда
Возврат;
КонецЕсли;
ЗаполнитьТаблицуСозданнымиМЧД();
НачатьПолучениеСертификатовПредставителя();
КонецПроцедуры
&НаСервере
Функция ПолучитьНомерМЧДРР() Экспорт
ИспользуетсяРежимТестирования = ДокументооборотСКОВызовСервера.ИспользуетсяРежимТестирования();
Номер = ДокументооборотСКОВызовСервера.ПолучитьНомерМЧДРР().НомерДоверенности;
Если Номер = "" И ИспользуетсяРежимТестирования Тогда
Номер = Строка(Новый УникальныйИдентификатор);
КонецЕсли;
Возврат Номер;
КонецФункции
&НаКлиенте
Процедура СкорректироватьДанныеПередСозданием()
Если Элементы.ГруппаДоверительТелефон.Видимость Тогда
Представление = ЭлектроннаяПодписьВМоделиСервисаКлиентСервер.ПолучитьПредставлениеТелефона(ДоверительТелефон);
Если ЗначениеЗаполнено(Представление) Тогда
ДоверительТелефон = Представление;
КонецЕсли;
КонецЕсли;
Если Элементы.ГруппаПредставительТелефон.Видимость Тогда
Представление = ЭлектроннаяПодписьВМоделиСервисаКлиентСервер.ПолучитьПредставлениеТелефона(ПредставительТелефон);
Если ЗначениеЗаполнено(Представление) Тогда
ПредставительТелефон = Представление;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТребуетсяПомощь(Команда)
ФИО = СокрЛП(ПредставительИмя + " " + ПредставительОтчество);
ОбработкаЗаявленийАбонентаКлиент.ОткрытьФормуПомощи(
ЭтотОбъект,
ФИО,
ПредставительТелефон,
"https://its.1c.ru/bmk/mcd_helper");
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьВсе(Команда)
Органы = ОрганыСОшибками();
Если Органы.Количество() > 0 Тогда
Органы = ОрганыСОшибкамиСтрокой();
ПоказатьОшибкуПоТреугольникуВнимание(Органы, "СказатьЧтоНеУдалосьНайтиСертификат_ПослеВопроса_ПометитьВсе");
Иначе
ПроставитьПометки();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроставитьПометки()
Для каждого Строка Из СопоставлениеМЧД Цикл
Если НЕ Строка.ЕстьОшибка Тогда
Строка.Пометка = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СказатьЧтоНеУдалосьНайтиСертификат_ПослеВопроса_ПометитьВсе(Ответ, ВходящийКонтекст) Экспорт
Кнопки = ВходящийКонтекст.Кнопки;
Если Ответ = Кнопки[0].Значение Тогда
ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ОткрытьФормуМастераЗаявленияНаПодключение(Организация);
КонецЕсли;
ПроставитьПометки();
КонецПроцедуры
&НаКлиенте
Процедура СнятьВсе(Команда)
Для каждого Строка Из СопоставлениеМЧД Цикл
Строка.Пометка = Ложь;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьСЗаменойМЧД(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПродолжитьСЗаменойМЧД_ПослеПроверкиПредставителяЦБ",
ЭтотОбъект);
ПроверитьПредставителяЦБ(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура НеМенятьМЧД(Команда)
ПерейтиНаСтраницуСертификат();
КонецПроцедуры
&НаКлиенте
Процедура НазадНаСопоставление(Команда)
Если СопоставлениеМЧД.Количество() = 0 ИЛИ ВсеСертификатыПустые() Тогда
АктивизироватьСтраницу(
Элементы.Страницы,
Элементы.Создание);
Иначе
АктивизироватьСтраницу(
Элементы.Страницы,
Элементы.Сопоставление);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Функция ОрганыСОшибками()
Органы = Новый Массив;
Отбор = Новый Структура();
Отбор.Вставить("ЕстьОшибка", Истина);
НайденныеСтроки = СопоставлениеМЧД.НайтиСтроки(Отбор);
Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Если Органы.Найти(Строка(НайденнаяСтрока.Орган)) = Неопределено Тогда
Органы.Добавить(Строка(НайденнаяСтрока.Орган));
КонецЕсли;
КонецЦикла;
Возврат Органы;
КонецФункции
&НаКлиенте
Функция ОрганыСОшибкамиСтрокой()
Органы = ОрганыСОшибками();
Органы = ДлительнаяОтправкаКлиентСервер.ЗаменитьПоследнююЗапятуюНаИ(СтрСоединить(Органы, ", "));
Возврат Органы;
КонецФункции
&НаКлиенте
Процедура ПоказатьОшибкуПоТреугольникуВнимание(Орган, СледующийМетод, ТекущиеДанные = Неопределено)
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные);
ОписаниеОповещения = Новый ОписаниеОповещения(
СледующийМетод,
ЭтотОбъект,
ДополнительныеПараметры);
Текст = НСтр("ru = 'Не удалось найти сертификат представителя %1 для отправки отчетности в %2. МЧД будет выпущена, но отправка представителем в %2 будет невозможна.
|
|Вы можете продолжить создание МЧД, если она вам нужна для другой программы или сертификат хранится на другом компьютере.'");
Текст = СтрШаблон(Текст, ФИОвРодительном(Представитель), Орган);
ПоказатьВопрос(ОписаниеОповещения, Текст, РежимДиалогаВопрос.ОК);
КонецПроцедуры
&НаКлиенте
Процедура СказатьЧтоНеУдалосьНайтиСертификат_ПослеВопроса_Треугольник(Ответ, ВходящийКонтекст) Экспорт
а = 1;
КонецПроцедуры
&НаКлиенте
Процедура СказатьЧтоНеУдалосьНайтиСертификат_ПослеВопроса_Пометка(Ответ, ВходящийКонтекст) Экспорт
ВходящийКонтекст.ТекущиеДанные.Пометка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьСЗаменойМЧД_ПослеПроверкиПредставителяЦБ(Результат, ВходящийКонтекст) Экспорт
Если НЕ ВсеСертификатыПустые() Тогда
ЗаписатьМЧДвРегистр();
КонецЕсли;
ПерейтиНаСтраницуСертификат();
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиНаСтраницуСертификат()
ИзменитьОформлениеСтраницыСертификат();
ОткрытьСтраницуСертификат();
Если НЕ ЗначениеЗаполнено(СертификатРуководителяОтпечаток) Тогда
ИнициализироватьСертификатРуководителя();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КодНалоговогоОрганаПредставленияНачалоВыбораПослеВвода(РезультатВыбора, ДополнительныеПараметры) Экспорт
Если РезультатВыбора = Неопределено Тогда
Возврат;
КонецЕсли;
КодНалоговогоОрганаПредставления = РезультатВыбора.КодНО;
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьСтраницуУспех()
Если ЭтоСозданиеТолькоЦБ() Тогда
Текст = НСтр("ru = 'МЧД для ЦБ успешно подписана'");
Иначе
ПодстрокиМЧД = Новый Массив;
Если СоздатьМЧДФНС Тогда
ПодстрокиМЧД.Добавить("ФНС");
КонецЕсли;
Если СоздатьМЧДРосстат Тогда
ПодстрокиМЧД.Добавить("Росстата");
КонецЕсли;
Если СоздатьМЧДСФР Тогда
ПодстрокиМЧД.Добавить("СФР");
КонецЕсли;
Если СоздатьМЧДФСРАР Тогда
ПодстрокиМЧД.Добавить("ФСРАР");
КонецЕсли;
Если СоздатьМЧДФТС Тогда
ПодстрокиМЧД.Добавить("ФТС");
КонецЕсли;
Если СоздатьМЧДРПН Тогда
ПодстрокиМЧД.Добавить("РПН");
КонецЕсли;
Если СоздатьМЧДЦБ И НЕ ОтправкаВозможна Тогда
ПодстрокиМЧД.Добавить("ЦБ");
КонецЕсли;
ВсегоМЧД = ПодстрокиМЧД.Количество();
ПодстрокиМЧД = СтрСоединить(ПодстрокиМЧД, ", ");
ПодстрокиМЧД = ДлительнаяОтправкаКлиентСервер.ЗаменитьПоследнююЗапятуюНаИ(ПодстрокиМЧД);
Если ВсегоМЧД = 1 Тогда
Действие = ?(ОтправкаВозможна, НСтр("ru = ' успешно отправлена'"), НСтр("ru = ' успешно подписана'"));
Иначе
Действие = ?(ОтправкаВозможна, НСтр("ru = ' успешно отправлены'"), НСтр("ru = ' успешно подписаны'"));
КонецЕсли;
Текст = Новый ФорматированнаяСтрока(
НСтр("ru = 'МЧД для '"),
ПодстрокиМЧД,
Действие);
КонецЕсли;
Элементы.УспешнаяОтправка_Заголовок.Заголовок = Текст;
Элементы.ДобавитьМЧДВЗаявление.Видимость = ЭтоВызовИзЗаявления;
Элементы.Закрыть.Видимость = НЕ ЭтоВызовИзЗаявления;
АктивизироватьСтраницу(
Элементы.Страницы,
Элементы.УспешнаяОтправка);
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииОрганизации(Параметры = Неопределено)
ЭтоЮридическоеЛицо = РегламентированнаяОтчетностьВызовСервера.ЭтоЮридическоеЛицо(Организация);
СертификатРуководителяОтпечаток = "";
СертификатРуководителяПредставление = "";
НомерДоверенности = "";
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
УчетнаяЗапись = КонтекстЭДОСервер.УчетнаяЗаписьОрганизации(Организация);
ОтправкаВозможна = ЗначениеЗаполнено(УчетнаяЗапись) ИЛИ НЕ ЭтоВызовИзЗаявления;
ЭтоВызовИзЗаявленияНаПодключение = ЭтоВызовИзЗаявления И НЕ ЗначениеЗаполнено(УчетнаяЗапись);
ОпределитьНаправления(Параметры);
НадоСоздатьЗПЭД = НадоСоздатьЗПЭД();
Доверитель = ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервераПереопределяемый.Руководитель(Организация);
ИнициализироватьДанныеДоверителя();
Если ЗначениеЗаполнено(Организация) Тогда
КодНалоговогоОрганаПредставления = СвойстваОрганизации(Организация).КодНО;
КонецЕсли;
ИнициализироватьДанныеПредставителя();
ИнициализироватьПолномочия();
ОчиститьРасширенныеНастройки();
ИнициализироватьРасширенныеНастройки();
ОчиститьМЧД();
ИзменитьОформлениеФормы();
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьРасширенныеНастройки() Экспорт
РегистрироватьВРеестре = НужноРегистрироватьВРеестре();
КонецПроцедуры
&НаСервере
Функция НужноРегистрироватьВРеестре()
Возврат СоздатьМЧДРосстат ИЛИ СоздатьМЧДФСРАР ИЛИ СоздатьМЧДРПН;
КонецФункции
&НаСервере
Процедура ОпределитьНаправления(Параметры = Неопределено)
Если Облачная1СО.ЭтоБизКуб() Тогда
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
Направления = КонтекстЭДОСервер.ПоддерживаемыеНаправленияОрганизации(Организация);
СоздатьМЧДФНС = Направления.ПризнакПоддержкиФНС;
СоздатьМЧДСФР = Направления.ПризнакПоддержкиПФР ИЛИ Направления.ПризнакПоддержкиФСС;
Если ДокументооборотСКОКлиентСервер.ПодсистемаЦПРРМЧДСуществует() Тогда
СоздатьМЧДРосстат = Направления.ПризнакПоддержкиФСГС;
СоздатьМЧДФТС = Направления.ПризнакПоддержкиФТС;
СоздатьМЧДФСРАР = Направления.ПризнакПоддержкиФСРАР;
СоздатьМЧДРПН = Направления.ПризнакПоддержкиРПН;
Иначе
СоздатьМЧДРосстат = Ложь;
СоздатьМЧДФТС = Ложь;
СоздатьМЧДФСРАР = Ложь;
СоздатьМЧДРПН = Ложь;
КонецЕсли;
Если ДокументооборотСКОКлиентСервер.ПодсистемаЦБСуществует() Тогда
СоздатьМЧДЦБ = Направления.ПризнакПоддержкиЦБ;
Иначе
СоздатьМЧДЦБ = Ложь;
КонецЕсли;
ИначеЕсли ЭтоВызовИзЗаявления И Параметры <> Неопределено Тогда
СоздатьМЧДФНС = Параметры.СдаватьВФНС;
СоздатьМЧДСФР = Параметры.СдаватьВФСС ИЛИ Параметры.СдаватьВПФР;
СоздатьМЧДРосстат = Параметры.СдаватьВРосстат;
СоздатьМЧДФТС = Параметры.ПодатьЗаявкуНаПодключениеФТС;
СоздатьМЧДФСРАР = Параметры.ПодатьЗаявкуНаСертификатДляФСРАР;
СоздатьМЧДРПН = Параметры.ПодатьЗаявкуНаПодключениеРПН;
СоздатьМЧДЦБ = Параметры.СдаватьВЦБ;
Иначе
Органы = Перечисления.ТипыКонтролирующихОрганов;
СоздатьМЧДФНС = ПодключенОрган(Органы.ФНС);
СоздатьМЧДСФР = ПодключенОрган(Органы.ФСС) ИЛИ ПодключенОрган(Органы.ПФР);
СоздатьМЧДРосстат = ПодключенОрган(Органы.ФСГС);
СоздатьМЧДФТС = ПодключенОрган(Органы.ФТС);
СоздатьМЧДФСРАР = ПодключенОрган(Органы.ФСРАР);
СоздатьМЧДРПН = ПодключенОрган(Органы.РПН);
СоздатьМЧДЦБ = ПодключенОрган(Органы.ЦБ);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПодключенОрган(КонтролирующийОрган)
Подключен = ИнтерфейсыВзаимодействияБРО.ПодключенДокументооборотСКонтролирующимОрганом(
Организация,
КонтролирующийОрган);
Возврат Подключен;
КонецФункции
&НаСервере
Процедура ИнициализироватьОрганизацию() Экспорт
ИспользуетсяОднаОрганизация = РегламентированнаяОтчетностьВызовСервера.ИспользуетсяОднаОрганизация();
Если НЕ ЗначениеЗаполнено(Организация) И ИспользуетсяОднаОрганизация Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("Справочники.Организации");
Организация = Модуль.ОрганизацияПоУмолчанию();
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Организация) Тогда
Организация = ЭлектронныйДокументооборотСКонтролирующимиОрганамиПереопределяемый.ОсновнаяОрганизация();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьПериод()
ДатаНачала = ТекущаяДатаСеанса();
ДатаОкончания = ДобавитьМесяц(ДатаНачала, 36);
КонецПроцедуры
&НаСервере
Процедура Инициализация(Параметры)
РазобратьПараметры(Параметры);
ИнициализироватьОрганизацию();
ПриИзмененииОрганизации(Параметры);
ИнициализироватьПериод();
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьДанныеДоверителя()
ОчиститьМЧД();
ЗаполнитьДанныеФизЛица("Доверитель");
КонецПроцедуры
&НаСервере
Процедура ОчиститьМЧД()
ОчиститьДанныеПоПрефиксу("МЧД");
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьДанныеПредставителя()
Если НЕ ПредставительЭтоСтрока() Тогда
ЗаполнитьДанныеФизЛица("Представитель");
ПредставительПользователь = Мультирежим.ПользовательПоФизЛицуИзСправочникаПользователи(Представитель);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОчиститьДанныеПоПрефиксу(Префикс)
РеквизитыФормы = ПолучитьРеквизиты();
Для каждого РеквизитФормы Из РеквизитыФормы Цикл
Имя = РеквизитФормы.Имя;
ОчиститьРеквзит =
Лев(Врег(Имя), СтрДлина(Префикс)) = Врег(Префикс)
И Врег(Имя) <> Врег(Префикс);
Если ОчиститьРеквзит Тогда
ЭтотОбъект[Имя] = Неопределено;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДанныеФизЛица(Префикс)
ОчиститьДанныеПоПрефиксу(Префикс);
ФизЛицо = ЭтотОбъект[Префикс];
Если НЕ ЗначениеЗаполнено(ФизЛицо) ИЛИ ТипЗнч(ФизЛицо) = Тип("Строка") Тогда
Возврат;
КонецЕсли;
ДанныеИсполнителя = ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервераПереопределяемый.ПолучитьДанныеИсполнителя(
ФизЛицо,
Организация);
Если ДанныеИсполнителя = Неопределено Тогда
Возврат;
КонецЕсли;
ФИО = ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервера.ФИОФизЛица(ФизЛицо);
ЭтотОбъект[Префикс + "Фамилия"] = ФИО.Фамилия;
ЭтотОбъект[Префикс + "Имя"] = ФИО.Имя;
ЭтотОбъект[Префикс + "Отчество"] = ФИО.Отчество;
Пол = "Мужской";
ДанныеИсполнителя.Свойство("Пол", Пол);
Пол = ОбработкаЗаявленийАбонента.ПолИзСтрокиВПеречисление(Пол);
ЭтотОбъект[Префикс + "Пол"] = Пол;
ДанныеИсполнителя.Свойство("ВидДокумента", ЭтотОбъект[Префикс + "ВидДокумента"]);
Если НЕ ЗначениеЗаполнено(ЭтотОбъект[Префикс + "ВидДокумента"]) Тогда
ЭтотОбъект[Префикс + "ВидДокумента"] = ОбщегоНазначения.ПредопределенныйЭлемент(
"Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ");
КонецЕсли;
ДанныеИсполнителя.Свойство("Серия", ЭтотОбъект[Префикс + "СерияДокумента"]);
ДанныеИсполнителя.Свойство("Номер", ЭтотОбъект[Префикс + "НомерДокумента"]);
ДанныеИсполнителя.Свойство("ДатаРождения", ЭтотОбъект[Префикс + "ДатаРождения"]);
ДанныеИсполнителя.Свойство("ДатаВыдачи", ЭтотОбъект[Префикс + "ДатаВыдачиДокумента"]);
ДанныеИсполнителя.Свойство("КемВыдан", ЭтотОбъект[Префикс + "КемВыданДокумент"]);
ДанныеИсполнителя.Свойство("КодПодразделения", ЭтотОбъект[Префикс + "КодПодразделения"]);
ИзменитьОформлениеУдостоверения(Префикс);
МестоРождения = "";
ДанныеИсполнителя.Свойство("МестоРождения", МестоРождения);
ЭтотОбъект[Префикс + "МестоРождения"] = ОбработкаЗаявленийАбонента.ПредставлениеМестаРождения(МестоРождения);
ДанныеИсполнителя.Свойство("Гражданство", ЭтотОбъект[Префикс + "Гражданство"]);
Если НЕ ЗначениеЗаполнено(ЭтотОбъект[Префикс + "Гражданство"]) Тогда
ЭтотОбъект[Префикс + "Гражданство"] = Справочники.СтраныМира.Россия;
КонецЕсли;
ЭтотОбъект[Префикс + "Почта"] = ОбработкаЗаявленийАбонента.EMailФизическиеЛица(ФизЛицо);
ДанныеИсполнителя.Свойство("ТелефонРабочий", ЭтотОбъект[Префикс + "Телефон"]);
ЭтотОбъект[Префикс + "ИНН"] = ОбработкаЗаявленийАбонента.ИННФизЛица(ФизЛицо);
ДанныеИсполнителя.Свойство("СНИЛС", ЭтотОбъект[Префикс + "СНИЛС"]);
Если ДанныеИсполнителя.Свойство("АдресПоПрописке_JSON") Тогда
ЭтотОбъект[Префикс + "АдресЗначение"] = ДанныеИсполнителя.АдресПоПрописке_JSON;
ИзменитьОформлениеАдреса(Префикс);
КонецЕсли;
ДанныеИсполнителя.Свойство("Должность", ЭтотОбъект[Префикс + "Должность"]);
КонецПроцедуры
&НаСервере
Процедура ИзменитьОформлениеАдреса(Префикс)
АдресЗначение = ЭтотОбъект[Префикс + "АдресЗначение"];
Если ЗначениеЗаполнено(АдресЗначение) Тогда
ЭтотОбъект[Префикс + "АдресПредставление"] = РаботаСАдресами.СведенияОбАдресе(АдресЗначение).МуниципальноеПредставление;
КонецЕсли;;
КонецПроцедуры
&НаСервере
Процедура ИзменитьОформлениеУдостоверения(Префикс)
Имя = Префикс + "ПредставлениеУдостоверения";
Подстроки = Новый Массив;
Подстроки.Добавить(Строка(ЭтотОбъект[Префикс + "ВидДокумента"]));
Подстроки.Добавить(ЭтотОбъект[Префикс + "СерияДокумента"]);
Подстроки.Добавить(ЭтотОбъект[Префикс + "НомерДокумента"]);
ЕстьОшибка = Ложь;
Представление = СокрЛП(СтрСоединить(Подстроки, " "));
Если Представление = "" Тогда
Представление = НСтр("ru = 'Уточнить'");
ЕстьОшибка = Истина;
КонецЕсли;
Элементы[Имя].АвтоОтметкаНезаполненного = НЕ ЕстьОшибка;
Элементы[Имя].ОтметкаНезаполненного = ЕстьОшибка;
ЭтотОбъект[Имя] = Представление;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция СоздатьМЧД_ЕФ(Форма) Экспорт
Возврат МЧДБРОКлиентСервер.СоздатьМЧД_ЕФ(Форма);
КонецФункции
&НаСервере
Процедура ИзменитьОформлениеДоверителя()
Элементы.ГруппаДоверительАдрес.Видимость = СоздатьМЧД_ЕФ(ЭтотОбъект);
Элементы.ГруппаДоверительИНН.Видимость = СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДСФР ИЛИ СоздатьМЧДФНС;
Элементы.ГруппаДоверительСНИЛС.Видимость = СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДСФР ИЛИ СоздатьМЧДФНС;
Элементы.ГруппаДоверительПочта.Видимость = СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДСФР;
Элементы.ГруппаДоверительТелефон.Видимость = СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДСФР;
Элементы.ГруппаДоверительЮЛ_РегНомер.Видимость = НЕ ЭтоРоссия();
Элементы.ГруппаКодНалоговогоОргана.Видимость = СоздатьМЧДФНС И НЕ ЗначениеЗаполнено(КодНалоговогоОрганаПредставления);
КонецПроцедуры
&НаСервере
Процедура ИзменитьОформлениеПредставителя()
Элементы.ГруппаПредставительАдрес.Видимость = СоздатьМЧД_ЕФ(ЭтотОбъект);
Элементы.ГруппаПредставительДолжность.Видимость = СоздатьМЧДЦБ ИЛИ СоздатьМЧДСФР;
Элементы.ГруппаПредставительПочта.Видимость = СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДСФР;
Элементы.ГруппаПредставительТелефон.Видимость = СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДСФР;
Элементы.ГруппаПредставительПользователь.Видимость =
НЕ ЗначениеЗаполнено(ПредставительПользователь)
И НЕ ПредставительЭтоСтрока()
И (СоздатьМЧДФНС ИЛИ СоздатьМЧДРосстат ИЛИ СоздатьМЧДСФР ИЛИ СоздатьМЧД_ЕФ(ЭтотОбъект))
И Мультирежим.ВсеПользователи().Количество() > 0;
КонецПроцедуры
&НаСервере
Процедура ИзменитьОформлениеФормы()
ИзменитьОформлениеОрганов();
ИзменитьОформлениеДоверителя();
ИзменитьОформлениеПредставителя();
ИзменитьОформлениеРасширенныхНастроек();
ИзменитьОформлениеПолномочий();
КонецПроцедуры
&НаСервере
Процедура ИзменитьОформлениеОрганов()
Элементы.ГруппаЦБ.Видимость = ДокументооборотСКОКлиентСервер.ПодсистемаЦБСуществует();
Существует = ДокументооборотСКОКлиентСервер.ПодсистемаЦПРРМЧДСуществует();
Элементы.ГруппаРосстат.Видимость = Существует;
Элементы.ГруппаФТС.Видимость = Существует;
Элементы.ГруппаФСРАР.Видимость = Существует;
КонецПроцедуры
&НаСервере
Функция КорректноЗаполнено()
Корректно = Истина;
Если НЕ СоздатьМЧДФНС И НЕ СоздатьМЧДСФР И НЕ СоздатьМЧД_ЕФ(ЭтотОбъект) И НЕ СоздатьМЧДЦБ Тогда
Текст = НСтр("ru = 'Выберите, для какого органа Вы хотите создать МЧД'");
СообщитьОшибку(Текст, Корректно, "СоздатьМЧДФНС");
КонецЕсли;
ПроверитьВидимоеПоле(Корректно, "Организация");
ПроверитьАдресОрганизации(Корректно);
ПроверитьПоле(Корректно, НСтр("ru = 'Заполните дату начала действия МЧД'"), "ДатаНачала");
ПроверитьПоле(Корректно, НСтр("ru = 'Заполните дату окончания действия МЧД'"), "ДатаОкончания");
ПроверитьДанныеПоПрефиксу(Корректно, "Доверитель", "доверителя");
РазложитьФИОПредставителя();
ПроверитьДанныеПоПрефиксу(Корректно, "Представитель", "представителя");
Возврат Корректно;
КонецФункции
&НаСервере
Функция РазложитьФИОПредставителя()
Если ПредставительЭтоСтрока()
ИЛИ НЕ ЗначениеЗаполнено(ПредставительФамилия)
ИЛИ НЕ ЗначениеЗаполнено(ПредставительИмя) Тогда
ФИО = ДокументооборотСКОВызовСервера.РазложитьФИО(СТрока(Представитель));
ПредставительФамилия = ФИО.Фамилия;
ПредставительИмя = ФИО.Имя;
ПредставительОтчество = ФИО.Отчество;
КонецЕсли;
КонецФункции
&НаСервере
Процедура ПроверитьФИОПоПрефиксу(Корректно, Префикс, Постфикс)
Если НЕ ЗначениеЗаполнено(ЭтотОбъект[Префикс + "Фамилия"])
ИЛИ НЕ ЗначениеЗаполнено(ЭтотОбъект[Префикс + "Имя"]) Тогда
Текст = НСтр("ru = 'Проверьте заполнение ФИО в карточке физ. лица '") + Постфикс;
СообщитьОшибку(Текст, Корректно, Префикс);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроверитьУдостоверениеПоПрефиксу(Корректно, Префикс, Постфикс)
Если НЕ ЗначениеЗаполнено(ЭтотОбъект[Префикс + "ВидДокумента"]) Тогда
ЭтотОбъект[Префикс + "ВидДокумента"] = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ");
КонецЕсли;
Если ЭтотОбъект[Префикс + "ВидДокумента"] = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ") Тогда
ПроверитьПолеУдостоверения(Корректно, Префикс, "СерияДокумента", НСтр("ru = 'Серия документа'"), Постфикс);
КонецЕсли;
ПроверитьПолеУдостоверения(Корректно, Префикс, "НомерДокумента", НСтр("ru = 'Номер документа'"), Постфикс);
Если НЕ СкрытьГражданство() И НЕ ЗначениеЗаполнено(ЭтотОбъект[Префикс + "Гражданство"]) Тогда
ПроверитьПолеУдостоверения(Корректно, Префикс, "Гражданство", НСтр("ru = 'Гражданство'"), Постфикс);
КонецЕсли;
Если НЕ СкрытьДатуРождения() Тогда
ПроверитьПолеУдостоверения(Корректно, Префикс, "ДатаРождения", НСтр("ru = 'Дата рождения'"), Постфикс);
КонецЕсли;
Если НЕ СкрытьПол() И НЕ ЗначениеЗаполнено(ЭтотОбъект[Префикс + ""]) Тогда
ПроверитьПолеУдостоверения(Корректно, Префикс, "Пол", НСтр("ru = 'Пол'"), Постфикс);
КонецЕсли;
Если НЕ СкрытьМестоРождения() Тогда
ПроверитьПолеУдостоверения(Корректно, Префикс, "МестоРождения", НСтр("ru = 'Место рождения'"), Постфикс);
КонецЕсли;
Если НЕ СкрытьКемКогдаВыдан() Тогда
Если ЭтотОбъект[Префикс + "ВидДокумента"] = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ") Тогда
ПроверитьПолеУдостоверения(Корректно, Префикс, "КемВыданДокумент", НСтр("ru = 'Документ выдан'"), Постфикс);
ПроверитьПолеУдостоверения(Корректно, Префикс, "КодПодразделения", НСтр("ru = 'Код подразделения'"), Постфикс);
КонецЕсли;
ПроверитьПолеУдостоверения(Корректно, Префикс, "ДатаВыдачиДокумента", НСтр("ru = 'Дата выдачи'"), Постфикс);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПроверитьПолеУдостоверения(Корректно, Префикс, Имя, Представление, Постфикс)
Если НЕ ЗначениеЗаполнено(ЭтотОбъект[Префикс + Имя]) Тогда
СообщитьОшибкуУдостоверения(Корректно, Префикс, Представление, Постфикс)
КонецЕсли;
КонецФункции
&НаСервере
Функция СообщитьОшибкуУдостоверения(Корректно, Префикс, Представление, Постфикс)
Текст = НСтр("ru = 'Заполните поле ""%1"" %2'");
Текст = СокрЛП(СтрШаблон(Текст, Представление, Постфикс));
СообщитьОшибку(Текст, Корректно, Префикс + "ПредставлениеУдостоверения");
КонецФункции
&НаСервере
Процедура ПроверитьДанныеПоПрефиксу(Корректно, Префикс, Постфикс)
РеквизитыФормы = ПолучитьРеквизиты();
Для каждого РеквизитФормы Из РеквизитыФормы Цикл
Имя = РеквизитФормы.Имя;
ПроверитьРеквзит = Лев(Врег(Имя), СтрДлина(Префикс)) = Врег(Префикс);
Если ПроверитьРеквзит Тогда
ПроверитьВидимоеПоле(Корректно, Имя, Постфикс);
Если ЗначениеЗаполнено(ЭтотОбъект[Префикс]) Тогда
Если Имя = Префикс Тогда
ПроверитьФИОПоПрефиксу(Корректно, Префикс, Постфикс);
КонецЕсли;
Если Имя = Префикс + "ПредставлениеУдостоверения" Тогда
ПроверитьУдостоверениеПоПрефиксу(Корректно, Префикс, Постфикс);
КонецЕсли;
Иначе
Прервать;
КонецЕсли;
Если Имя = Префикс + "ИНН" И ЗначениеЗаполнено(ЭтотОбъект[Имя]) Тогда
ТекстОшибки = "";
Соответствует = РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям(ЭтотОбъект[Имя], Ложь, ТекстОшибки);
Если НЕ Соответствует Тогда
Корректно = Ложь;
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , Префикс + "ИНН");
КонецЕсли;
КонецЕсли;
Если Имя = Префикс + "СНИЛС" И ЗначениеЗаполнено(ЭтотОбъект[Имя]) Тогда
ТекстОшибки = "";
Если НЕ ДокументооборотСКОКлиентСервер.ПроверитьСНИЛС(ЭтотОбъект[Имя]) Тогда
ТекстОшибки = НСтр("ru = 'Некорректно указан СНИЛС сотрудника. Не соответствует маске ХХХ-ХХХ-ХХХ ХХ, где X - любая цифра'");
ИначеЕсли НЕ ДокументооборотСКОКлиентСервер.ПроверитьСНИЛС(ЭтотОбъект[Имя], Ложь, Истина) Тогда
ТекстОшибки = НСтр("ru = 'Некорректно указан СНИЛС сотрудника. Не сошлось контрольное число (СНИЛС не существует)'");
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
Корректно = Ложь;
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , Префикс + "СНИЛС");
КонецЕсли;
КонецЕсли;
Если Имя = Префикс + "Почта" И ЗначениеЗаполнено(ЭтотОбъект[Имя]) Тогда
Если НЕ ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(ЭтотОбъект[Имя]) Тогда
ТекстОшибки = "";
Если НЕ СтрНайти(ЭтотОбъект[Имя], "@") Тогда
ТекстОшибки = НСтр("ru = 'Некорректно указана электронная почта. Отсутствует символ @'");
Иначе
ТекстОшибки = НСтр("ru = 'Электронная почта содержит некорректные сочетания символов'");
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
Корректно = Ложь;
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , Префикс + "Почта");
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Имя = Префикс + "Телефон" И ЗначениеЗаполнено(ЭтотОбъект[Имя]) Тогда
ТелефонБезРазделителей = ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер.ТелефонМобильныйБезРазделителей(ЭтотОбъект[Имя]);
Если ЗначениеЗаполнено(ТелефонБезРазделителей) Тогда
Если НЕ ДокументооборотСКОКлиентСервер.ПроверитьЦифровойКодЗаданнойДлины(ТелефонБезРазделителей, 11, Истина) Тогда
Корректно = Ложь;
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Телефон должен иметь формат +7 XXX XXX-XX-XX'"),,Префикс + "Телефон");
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если СоздатьМЧД_ЕФ(ЭтотОбъект) И Имя = Префикс + "АдресЗначение" И ЗначениеЗаполнено(ЭтотОбъект[Имя]) Тогда
ПроверитьАдрес(ЭтотОбъект[Имя], Корректно, Префикс + "АдресПредставление");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПроверитьВидимоеПоле(Корректно, Имя, Постфикс = "")
Если Элементы.Найти(Имя) = Неопределено Тогда
Возврат;
КонецЕсли;
Родитель = Элементы[Имя].Родитель;
Если Родитель.Видимость Тогда
Поле = Элементы["Заголовок" + Имя].Заголовок;
Поле = СтрЗаменить(Поле, ":", "");
Поле = СтрЗаменить(Поле, Символы.ПС, " ");
Текст = НСтр("ru = 'Заполните поле ""%1"" %2'") ;
Текст = СокрЛП(СтрШаблон(Текст, СокрЛП(Поле), Постфикс));
ПроверитьПоле(Корректно, Текст, Имя);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроверитьАдресОрганизации(Корректно)
Если НЕ СоздатьМЧД_ЕФ(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Адрес = МЧДЕФСлужебный.РеквизитыОрганизации(ЭтотОбъект).Реквизиты.ЮридическийАдресЗначение;
ПроверитьАдрес(Адрес, Корректно, "Организация");
КонецПроцедуры
&НаСервере
Процедура ПроверитьАдрес(Адрес, Корректно, Поле)
Если ЗначениеЗаполнено(Адрес) Тогда
ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение, ПроверитьАдрес", Истина, Истина);
АдресСтруктура = РаботаСАдресами.СведенияОбАдресе(Адрес, ДополнительныеПараметры);
Если АдресСтруктура.РезультатПроверкиАдреса <> "Успех" Тогда
Корректно = Ложь;
ТекстОшибки = СтрЗаменить(АдресСтруктура.ОшибкиПроверкиАдреса, "В ГАР", НСтр("ru = 'В системе ""Государственный адресный реестр (ГАР)""'"));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,Поле);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроверитьПоле(Корректно, Текст, Имя)
Если НЕ ЗначениеЗаполнено(ЭтотОбъект[Имя]) Тогда
СообщитьОшибку(Текст, Корректно, Имя);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СообщитьОшибку(Текст, Корректно, Поле)
ОбщегоНазначения.СообщитьПользователю(Текст, , Поле);
Корректно = Ложь;
КонецФункции
&НаСервере
Процедура ОчиститьУдостоверение(Префикс)
Поля =
"ВидДокумента,
|Гражданство,
|ДатаВыдачиДокумента,
|ДатаРождения,
|КемВыданДокумент,
|КодПодразделения,
|МестоРождения,
|НомерДокумента,
|СерияДокумента,
|ПредставлениеУдостоверения,
|ЛицоБезДовЮЛ";
ОчиститьПоля(Поля, Префикс);
ИзменитьОформлениеУдостоверения(Префикс);
КонецПроцедуры
&НаСервере
Процедура ОчиститьПоля(Поля, Префикс = "")
Поля = СтрРазделить(Поля, "," + Символы.ПС, Ложь);
Для каждого Имя Из Поля Цикл
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ЭтотОбъект, Префикс + Имя) Тогда
ЭтотОбъект[Префикс + Имя] = Неопределено;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОчиститьАдрес(Префикс)
ЭтотОбъект[Префикс + "АдресПредставление"] = "";
ЭтотОбъект[Префикс + "АдресЗначение"] = "";
КонецПроцедуры
&НаКлиенте
Процедура ПаспортныеДанныеПриНажатии(Элемент)
Префикс = Префикс(Элемент);
ПараметрыФормы = ОбработкаЗаявленийАбонентаКлиент.ПараметрыОткрытияФормыПаспорта();
Если НЕ ЗначениеЗаполнено(ЭтотОбъект[Префикс + "ВидДокумента"]) Тогда
ЭтотОбъект[Префикс + "ВидДокумента"] = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ");
КонецЕсли;
ДополнительныеПараметры = ПараметрыОткрытияФормыПаспортныхДанных(Префикс);
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПаспортныеДанные_Завершение",
ЭтотОбъект,
Префикс);
ОткрытьФорму("Обработка.ДокументооборотСКонтролирующимиОрганами.Форма.ПомощникМЧД_ПаспортныеДанные",
ДополнительныеПараметры,,,,,
ОписаниеОповещения);
КонецПроцедуры
&НаСервере
Функция СкрытьГражданство()
Возврат НЕ (СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДЦБ ИЛИ СоздатьМЧДФНС);
КонецФункции
&НаСервере
Функция СкрытьДатуРождения()
Возврат НЕ (СоздатьМЧДСФР ИЛИ СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДФНС);
КонецФункции
&НаСервере
Функция СкрытьПол()
Возврат НЕ (СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДФНС);
КонецФункции
&НаСервере
Функция СкрытьМестоРождения()
Возврат НЕ (СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДФНС);
КонецФункции
&НаСервере
Функция СкрытьКемКогдаВыдан()
Возврат НЕ (СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДЦБ);
КонецФункции
&НаКлиенте
Функция ПараметрыОткрытияФормыПаспортныхДанных(Префикс)
ПараметрыФормы = ОбработкаЗаявленийАбонентаКлиент.ПараметрыОткрытияФормыПаспорта();
ДополнительныеПараметры = Новый Структура(ПараметрыФормы);
ДополнительныеПараметры.Вставить("ПараметрыФормы", ПараметрыФормы);
МассивПараметров = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрыФормы,, Истина, Истина);
Для каждого Параметр Из МассивПараметров Цикл
Имя = СтрЗаменить(Параметр, "ВладелецЭЦП", Префикс);
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ЭтотОбъект, Имя) Тогда
ДополнительныеПараметры[Параметр] = ЭтотОбъект[Имя];
КонецЕсли;
КонецЦикла;
ДополнительныеПараметры.ВладелецЭЦПТип = ПредопределенноеЗначение("Перечисление.ТипыВладельцевЭЦП.ДругойСотрудник");
ДополнительныеПараметры.Организация = Организация;
ДополнительныеПараметры.ЗапретитьИзменение = Ложь;
ДополнительныеПараметры.Вставить("ИзПомощникаМЧД", Истина);
ДополнительныеПараметры.Вставить("СкрытьГражданство", СкрытьГражданство());
ДополнительныеПараметры.Вставить("СкрытьДатуРождения", СкрытьДатуРождения());
ДополнительныеПараметры.Вставить("СкрытьПол", СкрытьПол());
ДополнительныеПараметры.Вставить("СкрытьМестоРождения", СкрытьМестоРождения());
ДополнительныеПараметры.Вставить("СкрытьКемКогдаВыдан", СкрытьКемКогдаВыдан());
Возврат ДополнительныеПараметры;
КонецФункции
&НаКлиенте
Процедура ПаспортныеДанные_Завершение(Результат, Префикс) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ПолучитьДанныеИзФормыПаспортныхДанных(Префикс, Результат);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьДанныеИзФормыПаспортныхДанных(Префикс, Результат)
ПараметрыФормы = ОбработкаЗаявленийАбонентаКлиент.ПараметрыОткрытияФормыПаспорта();
МассивПараметров = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрыФормы,, Истина, Истина);
Для каждого Параметр Из МассивПараметров Цикл
Имя = СтрЗаменить(Параметр, "ВладелецЭЦП", Префикс);
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ЭтотОбъект, Имя) Тогда
ЭтотОбъект[Имя] = Результат[Параметр];
КонецЕсли;
КонецЦикла;
ИзменитьОформлениеУдостоверения(Префикс);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция Префикс(Элемент)
Если СтрНайти(ВРег(Элемент.Имя), ВРег("Доверитель")) Тогда
Возврат "Доверитель";
Иначе
Возврат "Представитель";
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПриОткрытии_ПослеПолученияКонтекста(Результат, ДополнительныеПараметры) Экспорт
КонтекстЭДОКлиент = Результат.КонтекстЭДО;
КонецПроцедуры
&НаКлиенте
Процедура АдресПредставлениеНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Префикс = Префикс(Элемент);
ОписаниеОповещения = Новый ОписаниеОповещения(
"АдресПредставлениеНажатие_Завершение",
ЭтотОбъект,
Префикс);
ДополнительныеПараметры = КонтекстЭДОКлиент.ПараметрыПроцедурыРедактироватьАдрес();
ДополнительныеПараметры.Вставить("Адрес", ЭтотОбъект[Префикс + "АдресЗначение"]);
ДополнительныеПараметры.Вставить("АдресИмя", Элемент.Имя);
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ДополнительныеПараметры.Вставить("Оповещение", ОписаниеОповещения);
ДополнительныеПараметры.Вставить("ПринудительноФИАС", Истина);
ДополнительныеПараметры.Вставить("ТолькоПросмотр", Ложь);
КонтекстЭДОКлиент.РедактироватьАдрес(ДополнительныеПараметры);
КонецПроцедуры
&НаКлиенте
Процедура АдресПредставлениеНажатие_Завершение(Результат, Префикс) Экспорт
Если Результат = Неопределено Тогда
Возврат;
Конецесли;
ЭтотОбъект[Префикс + "АдресЗначение"] = Результат.Значение;
ЭтотОбъект[Префикс + "АдресПредставление"] = Результат.Представление;
КонецПроцедуры
&НаКлиенте
Процедура РасширенныеНастройки_ПослеНажатия(Результат, ВходящийКонтекст) Экспорт
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Возврат;
КонецЕсли;
ПараметрыФормы = Результат.ПараметрыФормы;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Результат, ПараметрыФормы);
КонецПроцедуры
&НаКлиенте
Процедура ПредставлениеПолномочийНажатие_ПослеНажатия(Результат, ВходящийКонтекст) Экспорт
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Возврат;
КонецЕсли;
ПараметрыФормы = Результат.ПараметрыФормы;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Результат, ПараметрыФормы);
ИзменитьОформлениеПолномочий();
КонецПроцедуры
&НаСервере
Процедура ОчиститьРасширенныеНастройки() Экспорт
Поля = РасширенныеНастройкиФНС();
ОчиститьПоля(Поля);
Поля = РасширенныеНастройкиМЧДЕдиногоФормата();
ОчиститьПоля(Поля);
Поля = РасширенныеНастройкиМЧДФСС();
ОчиститьПоля(Поля);
Поля = РасширенныеНастройкиМЧДУПУП();
ОчиститьПоля(Поля);
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьПолномочия() Экспорт
ОчиститьПолномочия();
ВидПолномочий = МЧДБРОКлиентСервер.ТолькоДляОтчетности();
МЧДБРО.ИнициализироватьПолномочия(ЭтотОбъект);
МЧДБРОКлиентСервер.ВыделитьПолномочияДляОтчетностиРекурсивно(ЭтотОбъект, Полномочия);
АдресДереваПолномочий = МЧДБРО.АдресДерева(ЭтотОбъект, УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Процедура ОчиститьПолномочия() Экспорт
Поля = ПараметрыПолномочий();
ОчиститьПоля(Поля);
КонецПроцедуры
&НаСервере
Процедура ИзменитьОформлениеПолномочий() Экспорт
Элементы.ПредставлениеПолномочий.Заголовок = ВидПолномочий;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыПолномочийОбщие()
ПараметрыФормы = "Организация,
|СоздатьМЧДФНС,
|СоздатьМЧДФСРАР,
|СоздатьМЧДФТС,
|СоздатьМЧДЦБ,
|СоздатьМЧДСФР,
|СоздатьМЧДРПН,
|СоздатьМЧДРосстат";
Возврат ПараметрыФормы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыПолномочий()
ПараметрыФормы = "ВидПолномочий,
|АдресДереваПолномочий";
Возврат ПараметрыФормы;
КонецФункции
&НаКлиенте
Функция ПроверитьОрганизацию()
Если НЕ ЗначениеЗаполнено(Организация) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Для продолжения выберите организацию'"),,"Организация");
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Функция СоздатьМЧД()
Если СоздатьМЧДФНС Тогда
МЧДФНС = СоздатьМЧДСервер(МЧДФНС);
КонецЕсли;
Если СоздатьМЧДСФР Тогда
МЧДФСС = СоздатьМЧДСервер(МЧДФСС);
МЧДУПУП = СоздатьУПУПСервер(МЧДУПУП);
Если НадоСоздатьЗПЭД() Тогда
ЗПЭД = СоздатьЗПЭДСервер(ЗПЭД);
КонецЕсли;
КонецЕсли;
Если СоздатьМЧД_ЕФ(ЭтотОбъект) Тогда
МЧДЕФ = СоздатьМЧДЕФСервер(МЧДЕФ);
Если НЕ ЗначениеЗаполнено(МЧДЕФ) Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Если СоздатьМЧДЦБ Тогда
МЧДЦБ = СоздатьМЧДСервер(МЧДЦБ);
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Функция НадоСоздатьЗПЭД()
Если НЕ ЗначениеЗаполнено(Организация) ИЛИ НЕ СоздатьМЧДСФР Тогда
Возврат Ложь;
КонецЕсли;
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
Состояние = КонтекстЭДОСервер.СостояниеЭДОсПФР(Организация, Истина);
Если Состояние.НаПодключение.НужноОтправитьЗаявление
И НЕ Состояние.НаОтключение.ОрганизацияОтключена
ИЛИ Состояние.НаПодключение.НужноОтправитьПовторноеЗаявление Тогда
Возврат ЭтоВызовИзЗаявления;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
&НаСервере
Функция СоздатьЗПЭДСервер(Ссылка)
Если Ссылка.Организация = Организация Тогда
Объект = Ссылка.ПолучитьОбъект();
Иначе
Объект = Документы.ЗаявленияПоЭлДокументооборотуСПФР.СоздатьДокумент();
КонецЕсли;
СвойстваОрганизации = СвойстваОрганизации(Организация);
Объект.Вид = Перечисления.ВидыЗаявленийНаЭДОВПФР.НаПодключение;
Объект.Организация = Организация;
Объект.Получатель = Документы.ЗаявленияПоЭлДокументооборотуСПФР.ПолучательЗаявления(Организация);
Объект.РегНомерПФР = РегистрационныйНомерСФРОрганизации(Организация);
Если СвойстваОрганизации.ЭтоЮридическоеЛицо Тогда
Объект.НаименованиеПолное = СвойстваОрганизации.НаимЮЛПол;
Объект.НаименованиеКраткое = ДокументооборотСКОВызовСервера.ПолучитьРеквизит(
Организация, "НаименованиеСокращенное");
Объект.ИНН = СвойстваОрганизации.ИННЮЛ;
Объект.КПП = СвойстваОрганизации.КППЮЛ;
Объект.Фамилия = ?(СвойстваОрганизации.ФамилияРук = "", ДоверительФамилия, СвойстваОрганизации.ФамилияРук);
Объект.Имя = ?(СвойстваОрганизации.ИмяРук = "", ДоверительИмя, СвойстваОрганизации.ИмяРук);
Объект.Отчество = ?(СвойстваОрганизации.ОтчествоРук = "", ДоверительОтчество, СвойстваОрганизации.ОтчествоРук);
Объект.Должность = ?(СвойстваОрганизации.ДолжнРук = "", ДоверительДолжность, СвойстваОрганизации.ДолжнРук);
Иначе
СтруктураФИО = ДокументооборотСКОВызовСервера.РазложитьФИО(СвойстваОрганизации.ФИО);
Объект.Фамилия = ?(СтруктураФИО.Фамилия = "", ДоверительФамилия, СтруктураФИО.Фамилия);
Объект.Имя = ?(СтруктураФИО.Имя = "", ДоверительИмя, СтруктураФИО.Имя);
Объект.Отчество = ?(СтруктураФИО.Отчество = "", ДоверительОтчество, СтруктураФИО.Отчество);
Объект.ИНН = СвойстваОрганизации.ИННФЛ;
Объект.СНИЛС = СвойстваОрганизации.СНИЛС;
Объект.Должность = НСтр("ru = 'Индивидуальный предприниматель'");
КонецЕсли;
Объект.ЭлектроннаяПочта = ДоверительПочта;
Объект.Телефон = ДоверительТелефон;
Если ИспользуетсяРежимТестирования Тогда
Объект.ОператорРегНомерПФР = "010-001-000121";
Иначе
Объект.ОператорРегНомерПФР = "050-026-004654";
КонецЕсли;
Объект.ОператорНаименованиеКраткое = НСтр("ru = 'АО ""КАЛУГА АСТРАЛ""'");
Объект.ОператорНаименованиеПолное = НСтр("ru = 'АКЦИОНЕРНОЕ ОБЩЕСТВО ""КАЛУГА АСТРАЛ""'");
Объект.ОператорИНН = "4029017981";
Объект.ОператорКПП = "402901001";
Объект.Записать();
Возврат Объект.Ссылка;
КонецФункции
&НаСервере
Функция СоздатьМЧДЕФСервер(Ссылка) Экспорт
Попытка
Возврат МЧДЕФСлужебный.СоздатьМЧДЕФСервер(ЭтотОбъект, Ссылка);
Исключение
Ошибка = НСтр("ru = 'Не удалось создать МЧД единого формата для Росстата, ФТС, ФСРАР, РПН.'");
ДокументооборотСКО.ОбработатьИсключениеУниверсальное(
ИнформацияОбОшибке(),
НСтр("ru = 'Электронный документооборот с контролирующими органами.СоздатьМЧДЕФСервер'"),
Ошибка);
ОбщегоНазначения.СообщитьПользователю(Ошибка + НСтр("ru = 'Подробнее см. в Журнале регистраций'"));
Возврат Неопределено;
КонецПопытки;
КонецФункции
&НаСервере
Функция СоздатьУПУПСервер(Ссылка)
Если Ссылка.Организация = Организация Тогда
Объект = Ссылка.ПолучитьОбъект();
Объект.ФИО.Очистить();
Объект.КонтактнаяИнформация.Очистить();
Объект.РеквизитыСубъектов.Очистить();
Иначе
Объект = Документы.УведомлениеОПредоставленииПолномочийПредставителю.СоздатьДокумент();
КонецЕсли;
Объект.Дата = ТекущаяДатаСеанса();
Объект.Организация = Организация;
Объект.НаименованиеДокумента = НаименованиеДокумента;
Объект.НомерДокумента = НомерДокумента;
Объект.КемВыдан = КемВыдан;
Объект.Страхователь = Организация;
Объект.СтраховательСотрудник = Доверитель;
СоздатьУПУП_ПодставитьРеквизитыСтрахователя(Объект);
СоздатьУПУП_ПодставитьРеквизитыСотрудникаСтрахователя(Объект);
Объект.Представитель = Представитель;
СоздатьУПУП_ПодставитьРеквизитыПредставителя(Объект);
Объект.Записать();
Возврат Объект.Ссылка;
КонецФункции
&НаСервере
Процедура СоздатьУПУП_ПодставитьРеквизитыСтрахователя(Объект)
Если ЗначениеЗаполнено(НомерДокумента)
ИЛИ ЗначениеЗаполнено(НаименованиеДокумента)
ИЛИ ЗначениеЗаполнено(КемВыдан) Тогда
Объект.ДатаНачалаДействия = ДатаНачала;
Объект.ДатаОкончанияДействия = ДатаОкончания;
КонецЕсли;
СвойстваОрганизации = СвойстваОрганизации(Объект.Страхователь);
РегистрационныйНомерПФР = РегистрационныйНомерСФРОрганизации(Объект.Страхователь);
Объект.РегНомерПФР = РегистрационныйНомерПФР;
СубъектДоверенности = ?(СвойстваОрганизации.ЭтоЮридическоеЛицо,
ПредопределенноеЗначение("Перечисление.СубъектыДоверенностиСтрахователя.СтраховательЮЛ"),
ПредопределенноеЗначение("Перечисление.СубъектыДоверенностиСтрахователя.СтраховательФЛ"));
РеквизитыСубъекта = Объект.РеквизитыСубъектов.Добавить();
РеквизитыСубъекта.Владелец = СубъектДоверенности;
Если СвойстваОрганизации.ЭтоЮридическоеЛицо Тогда
РеквизитыСубъекта.Наименование = СвойстваОрганизации.НаимЮЛПол;
РеквизитыСубъекта.НаименованиеКраткое = ДокументооборотСКОВызовСервера.ПолучитьРеквизит(
Объект.Страхователь, "НаименованиеСокращенное");
РеквизитыСубъекта.РегистрационныйНомерПФР = РегистрационныйНомерПФР;
РеквизитыСубъекта.ИНН = СвойстваОрганизации.ИННЮЛ;
РеквизитыСубъекта.КПП = СвойстваОрганизации.КППЮЛ;
Иначе
СтруктураФИО = ДокументооборотСКОВызовСервера.РазложитьФИО(СвойстваОрганизации.ФИО);
ФИО = Объект.ФИО.Добавить();
ФИО.Владелец = СубъектДоверенности;
ФИО.Фамилия = СтруктураФИО.Фамилия;
ФИО.Имя = СтруктураФИО.Имя;
ФИО.Отчество = СтруктураФИО.Отчество;
РеквизитыСубъекта.РегистрационныйНомерПФР = РегистрационныйНомерПФР;
РеквизитыСубъекта.ИНН = СвойстваОрганизации.ИННФЛ;
РеквизитыСубъекта.СНИЛС = СвойстваОрганизации.СНИЛС;
КонецЕсли;
Объект.КонтактнаяИнформация.Очистить();
КонтактнаяИнформация = Объект.КонтактнаяИнформация.Добавить();
КонтактнаяИнформация.Владелец = СубъектДоверенности;
КонтактнаяИнформация.Телефон = ДоверительТелефон;
КонтактнаяИнформация.АдресЭлПочты = ДоверительПочта;
КонецПроцедуры
&НаСервереБезКонтекста
Функция РегистрационныйНомерСФРОрганизации(ОрганизацияСсылка)
Если ТипЗнч(ОрганизацияСсылка) = Тип("СправочникСсылка.Организации") Тогда
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
ПараметрыОтправкиВПФР = КонтекстЭДОСервер.СформироватьПараметрыОтправкиВПФР(ОрганизацияСсылка);
Если ЗначениеЗаполнено(ПараметрыОтправкиВПФР.РегНомерСФР) Тогда
Возврат ПараметрыОтправкиВПФР.РегНомерСФР;
КонецЕсли;
КонецЕсли;
Возврат ДокументооборотСКОВызовСервера.ПолучитьРеквизит(
ОрганизацияСсылка,
"РегистрационныйНомерПФР");
КонецФункции
&НаСервере
Процедура СоздатьУПУП_ПодставитьРеквизитыСотрудникаСтрахователя(Объект)
СубъектДоверенности =
ПредопределенноеЗначение("Перечисление.СубъектыДоверенностиСтрахователя.СотрудникСтрахователя");
ФИО = Объект.ФИО.Добавить();
ФИО.Владелец = СубъектДоверенности;
ФИО.Фамилия = ДоверительФамилия;
ФИО.Имя = ДоверительИмя;
ФИО.Отчество = ДоверительОтчество;
ФИО.Должность = ДоверительДолжность;
КонецПроцедуры
&НаСервере
Процедура СоздатьУПУП_ПодставитьРеквизитыПредставителя(Объект)
СубъектДоверенности = ПредопределенноеЗначение("Перечисление.СубъектыДоверенностиСтрахователя.СотрудникПредставителя");
РеквизитыСубъекта = Объект.РеквизитыСубъектов.Добавить();
РеквизитыСубъекта.Владелец = СубъектДоверенности;
ФИО = Объект.ФИО.Добавить();
ФИО.Владелец = СубъектДоверенности;
ФИО.Фамилия = ПредставительФамилия;
ФИО.Имя = ПредставительИмя;
ФИО.Отчество = ПредставительОтчество;
ФИО.Должность = ПредставительДолжность;
РеквизитыСубъекта.СНИЛС = ПредставительСНИЛС;
КонтактнаяИнформация = Объект.КонтактнаяИнформация.Добавить();
КонтактнаяИнформация.Владелец = СубъектДоверенности;
КонтактнаяИнформация.Телефон = ПредставительТелефон;
КонтактнаяИнформация.АдресЭлПочты = ПредставительПочта;
КонецПроцедуры
&НаСервере
Функция СоздатьМЧДСервер(Ссылка)
ИмяСправочника = Ссылка.Метаданные().Имя;
Если Ссылка.Организация = Организация Тогда
Объект = Ссылка.ПолучитьОбъект();
Иначе
Объект = Справочники[ИмяСправочника].СоздатьЭлемент();
КонецЕсли;
Объект.НомерДоверенности = Строка(Новый УникальныйИдентификатор);
Объект.ДатаВыдачи = ДатаНачала;
Объект.ДатаОкончания = ДатаОкончания;
Объект.Статус = Перечисления.СтатусыМашиночитаемойДоверенностиКО.ВРаботе;
Объект.ДатаОтправки = Неопределено;
Объект.ДатаОбновленияСтатуса = Неопределено;
Объект.ИмяФайлаВыгрузки = "";
Объект.ОтпечатокСертификата = "";
Объект.Организация = Организация;
Объект.Доверитель = Организация;
Объект.ЛицоБезДовФЛ = Доверитель;
СоздатьМЧД_ПодставитьРеквизитыДоверителя(Объект);
Объект.Представитель = Представитель;
СоздатьМЧД_ПодставитьРеквизитыПредставителя(Объект);
Если ЭтоМЧДФНС(Объект) Тогда
СоздатьМЧД_ЗаписатьРеквизитыФНС(Объект);
ИначеЕсли ЭтоМЧДФСС(Объект) Тогда
СоздатьМЧД_ЗаписатьРеквизитыФСС(Объект)
ИначеЕсли ЭтоМЧДЦБ(Объект) Тогда
СоздатьМЧД_ПодставитьПолномочияЦБ(Объект)
КонецЕсли;
Объект.Записать();
Возврат Объект.Ссылка;
КонецФункции
&НаСервере
Функция ЭтоМЧДФНС(МЧД)
Возврат
ТипЗнч(МЧД) = Тип("СправочникСсылка.МашиночитаемыеДоверенностиФНС")
ИЛИ ТипЗнч(МЧД) = Тип("СправочникОбъект.МашиночитаемыеДоверенностиФНС");
КонецФункции
&НаСервере
Функция ЭтоМЧДФСС(МЧД)
Возврат
ТипЗнч(МЧД) = Тип("СправочникСсылка.МашиночитаемыеДоверенностиФСС")
ИЛИ ТипЗнч(МЧД) = Тип("СправочникОбъект.МашиночитаемыеДоверенностиФСС");
КонецФункции
&НаСервере
Функция ЭтоМЧДЦБ(МЧД)
Возврат
ДокументооборотСКОКлиентСервер.ПодсистемаЦБСуществует()
И (ТипЗнч(МЧД) = Тип("СправочникСсылка." + ИмяТипаСправочникаМашиночитаемыеДоверенностиЦБ)
ИЛИ ТипЗнч(МЧД) = Тип("СправочникОбъект." + ИмяТипаСправочникаМашиночитаемыеДоверенностиЦБ));
КонецФункции
&НаСервере
Процедура СоздатьМЧД_ПодставитьПолномочияЦБ(Объект)
Объект.ПолномочияПредставителя.Очистить();
Если ЭтоАдресВременногоХранилища(АдресДереваПолномочий) И НЕ ЭтоПолныеПолномочия() Тогда
ДеревоПолномочий = ПолучитьИзВременногоХранилища(АдресДереваПолномочий);
Для Каждого Орган Из ДеревоПолномочий.Строки Цикл
Если Орган.Наименование = МЧДБРОКлиентСервер.МЧД_ЦБ() И Орган.Пометка Тогда
НовСтр = Объект.ПолномочияПредставителя.Добавить();
Для Каждого СтрокаПолномочий ИЗ Орган.Строки Цикл
Код = Формат(СтрокаПолномочий.Код, "ЧЦ=2; ЧВН=");
НовСтр["Признак" + Код] = СтрокаПолномочий.Пометка;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Иначе
Для ВидПолномочия = 1 По ДокументооборотСКОКлиентСервер.КоличествоПолномочийМЧДЦБ() Цикл
НовСтр = Объект.ПолномочияПредставителя.Добавить();
НовСтр.ПризнакПолныеПолномочия = Истина;
Код = Формат(ВидПолномочия, "ЧЦ=2; ЧВН=");
НовСтр["Признак" + Код] = Истина;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьМЧД_ЗаписатьРеквизитыФСС(Объект)
Если ПредставительСертификат Тогда
ДанныеСертификата = Base64Значение(Представитель_СертификатBase64);
Объект.Представитель_Сертификат = Новый ХранилищеЗначения(ДанныеСертификата);
Объект.Представитель_ИдентификаторСертификата = Представитель_ИдентификаторСертификата;
КонецЕсли;
Объект.Представитель_Физлицо = Истина;
Объект.НомерРодительскойДоверенности = НомерРодительскойДоверенностиФСС;
Объект.РодительскаяДоверенность = РодительскаяДоверенностьФСС;
СоздатьМЧД_ПодставитьПолномочияФСС(Объект);
КонецПроцедуры
&НаСервере
Процедура СоздатьМЧД_ПодставитьПолномочияФСС(Объект)
Объект.ПолномочияПредставителя.Очистить();
Если ЭтоАдресВременногоХранилища(АдресДереваПолномочий) И НЕ ЭтоПолныеПолномочия() Тогда
ДеревоПолномочий = ПолучитьИзВременногоХранилища(АдресДереваПолномочий);
Для Каждого Орган Из ДеревоПолномочий.Строки Цикл
Если Орган.Наименование = МЧДБРОКлиентСервер.МЧД_СФР() И Орган.Пометка Тогда
Если Орган.Пометка = 1 Тогда
СоздатьМЧД_СохранитьПолномочиеФСС(Объект, Орган);
Иначе
СоздатьМЧД_СохранитьПолномочияФССРекурсивно(Объект, Орган);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Иначе
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
КорневоеПолномочие = КонтекстЭДОСервер.НачальноеЗаполнениеПолномочийПредставителяФСС(0);
СоздатьМЧД_СохранитьПолномочиеФСС(Объект, КорневоеПолномочие);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьМЧД_ЗаписатьРеквизитыФНС(Объект)
Объект.ВерсияФормата = "5.03";
Объект.РегистрационныйНомерДоверенности = Объект.НомерДоверенности;
Объект.КодНалоговогоОрганаПредставления = КодНалоговогоОрганаПредставления;
Объект.Статус = Перечисления.СтатусыМашиночитаемойДоверенностиКО.ВРаботе;
Объект.НалоговыеОрганыДействия.Очистить();
Если ЗначениеЗаполнено(НалоговыеОрганыДействия) Тогда
Для каждого Код Из НалоговыеОрганыДействия Цикл
НалоговыйОрганДействия = Объект.НалоговыеОрганыДействия.Добавить();
НалоговыйОрганДействия.КодНалоговогоОргана = Код;
КонецЦикла;
КонецЕсли;
Объект.ПередовериеВозможно = ПередовериеВозможно;
Объект.НомерРодительскойДоверенности = НомерРодительскойДоверенности;
Объект.РодительскаяДоверенность = РодительскаяДоверенность;
Объект.НомерКорневойДоверенности = НомерКорневойДоверенности;
Объект.КорневаяДоверенность = КорневаяДоверенность;
Если ЗначениеЗаполнено(Объект.РодительскаяДоверенность) Тогда
Справочники.МашиночитаемыеДоверенностиФНС.НомерРодительскойДоверенностиНачалоВыбораПослеВыбора(Объект, РодительскаяДоверенность);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.КорневаяДоверенность) Тогда
РеквизитыКорневойДоверенности = ЗначенияРеквизитовМЧД(Объект.КорневаяДоверенность, Истина);
Справочники.МашиночитаемыеДоверенностиФНС.ПодставитьРеквизитыКорневойДоверенности(Объект, РеквизитыКорневойДоверенности);
КонецЕсли;
СоздатьМЧД_ПодставитьПолномочияФНС(Объект);
КонецПроцедуры
&НаСервере
Функция ЗначенияРеквизитовМЧД(СсылкаНаОбъект, ПрочитатьКорневуюМЧД = Ложь)
Возврат Справочники.МашиночитаемыеДоверенностиФНС.ЗначенияРеквизитовМЧД(СсылкаНаОбъект, ПрочитатьКорневуюМЧД);
КонецФункции
&НаСервере
Процедура СоздатьМЧД_ПодставитьПолномочияФНС(Объект)
Если ЭтоАдресВременногоХранилища(АдресДереваПолномочий) И НЕ ЭтоПолныеПолномочия() Тогда
ДеревоПолномочий = ПолучитьИзВременногоХранилища(АдресДереваПолномочий);
Для Каждого Орган Из ДеревоПолномочий.Строки Цикл
Если Орган.Наименование = МЧДБРОКлиентСервер.МЧД_ФНС() И Орган.Пометка Тогда
НалоговыйОрганДействия = Объект.ПолномочияПредставителя.Добавить();
ПолномочияСтроки = Орган.Строки;
Для каждого Полномочие Из ПолномочияСтроки Цикл
НалоговыйОрганДействия["Признак" + Полномочие.Код] = Полномочие.Пометка;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Иначе
НоваяСтрока = Объект.ПолномочияПредставителя.Добавить();
НоваяСтрока.ПризнакПолныеПолномочия = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЭтоРоссия()
Если ЗначениеЗаполнено(Организация) Тогда
ЭтоРоссия = СвойстваОрганизации(Организация).ЭтоРоссийскаяОрганизация;
Возврат ЭтоРоссия;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции
&НаСервере
Процедура СоздатьМЧД_ПодставитьРеквизитыДоверителя(Объект)
СвойстваОрганизации = СвойстваОрганизации(Организация);
ЭтоЮрЛицо = СвойстваОрганизации.ЭтоЮридическоеЛицо;
ЭтоРоссия = СвойстваОрганизации.ЭтоРоссийскаяОрганизация;
ЭтоРуссЮрЛицо = ЭтоЮрЛицо И ЭтоРоссия;
ЭтоНеРуссЮрЛицо = ЭтоЮрЛицо И НЕ ЭтоРоссия;
Доверитель_ЮридическоеЛицо = ЭтоЮрЛицо;
Объект.ДоверительЮЛ_ИностраннаяОрганизация = НЕ ЭтоРоссия;
Объект.ДоверительЮЛ_НаимОрг = ?(ЭтоЮрЛицо,
?(НЕ ЭтоРоссия И ЗначениеЗаполнено(СвойстваОрганизации.НаимИОПол),
СвойстваОрганизации.НаимИОПол, СвойстваОрганизации.НаимЮЛПол), "");
Объект.ДоверительЮЛ_ИНН = ?(ЭтоЮрЛицо, СвойстваОрганизации.ИННЮЛ, "");
Если (ЭтоМЧДФНС(Объект) ИЛИ ЭтоМЧДФСС(Объект)) И ВыданаОбособке Тогда
Объект.ДоверительЮЛ_КПП = КППОбособки;
ИначеЕсли ЭтоМЧДФНС(Объект) ИЛИ ЭтоМЧДФСС(Объект) Тогда
Объект.ДоверительЮЛ_КПП = ?(ЭтоЮрЛицо, СвойстваОрганизации.КППЮЛ, "");
КонецЕсли;
Если ЭтоЮрЛицо Тогда
Объект.ДоверительЮЛ_ОГРН = ?(ЭтоРуссЮрЛицо, СвойстваОрганизации.ОГРН, "");
Иначе
Объект.ДоверительФЛ_ОГРН = СвойстваОрганизации.ОГРН;
КонецЕсли;
Если ЭтоМЧДФНС(Объект) ИЛИ ЭтоМЧДЦБ(Объект) Тогда
Объект.ДоверительЮЛ_СтрРег = ?(ЭтоНеРуссЮрЛицо, СвойстваОрганизации.СтранаРегистрацииИностраннойОрганизации, Неопределено);
Объект.ДоверительЮЛ_РегНомер = ДоверительЮЛ_РегНомер;
Объект.ДоверительЮЛ_НаимРегОрг = ?(ЭтоНеРуссЮрЛицо, СвойстваОрганизации.НаименованиеРегистрирующегоОргана, "");
КонецЕсли;
Если ЭтоМЧДФНС(Объект) Тогда
Объект.ДоверительЮЛ_КодНПРег = ?(ЭтоНеРуссЮрЛицо, СвойстваОрганизации.КодИОСтрРег, "");
КонецЕсли;
СоздатьМЧД_ОбновитьПредставителей(Объект);
СоздатьМЧД_ПодставитьРеквизитыДоверителя_Адрес(Объект, СвойстваОрганизации);
СоздатьМЧД_ПодставитьРеквизитыДоверителя_ФИО(Объект, СвойстваОрганизации);
СоздатьМЧД_ПодставитьРеквизитыДоверителя_Удостоверение(Объект, СвойстваОрганизации);
СоздатьМЧД_ПодставитьРеквизитыДоверителя_ЛицоБезДовФЛ(Объект, СвойстваОрганизации);
Если ЭтоМЧДФНС(Объект) Тогда
Объект.ЛицоБезДовЮЛ = ЛицоБезДовЮЛ;
СоздатьМЧД_ПодставитьРеквизитыЛицаБезДоверенностиЮЛ(Объект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьМЧД_ПодставитьРеквизитыДоверителя_ЛицоБезДовФЛ(Объект, СвойстваОрганизации)
ЭтоЮрЛицо = СвойстваОрганизации.ЭтоЮридическоеЛицо;
ЭтоРоссия = СвойстваОрганизации.ЭтоРоссийскаяОрганизация;
ЭтоРуссЮрЛицо = ЭтоЮрЛицо И ЭтоРоссия;
ЭтоНеРуссЮрЛицо = ЭтоЮрЛицо И НЕ ЭтоРоссия;
Объект.ЛицоБезДовФЛ = Доверитель;
Если ЭтоМЧДФНС(Объект) ИЛИ ЭтоМЧДФСС(Объект) Тогда
Объект.ЛицоБезДовФЛ_ИНН = ?(ЭтоРуссЮрЛицо, ДоверительИНН, "");
Объект.ЛицоБезДовФЛ_ДатаРождения = ?(ЭтоРуссЮрЛицо, ДоверительДатаРождения, Неопределено);
Объект.ДоверительФЛ_ДатаРождения = ?(ЭтоНеРуссЮрЛицо ИЛИ НЕ ЭтоЮрЛицо, ДоверительДатаРождения, Неопределено);
КонецЕсли;
Объект.ЛицоБезДовФЛ_СНИЛС = ?(ЭтоРуссЮрЛицо, ДоверительСНИЛС, "");
Если ЭтоМЧДФНС(Объект) ИЛИ ЭтоМЧДЦБ(Объект) Тогда
Объект.ЛицоБезДовФЛ_Гражданство = ?(ЭтоРуссЮрЛицо, ДоверительГражданство, Неопределено);
Объект.ЛицоБезДовФЛ_Должность = ?(ЭтоРуссЮрЛицо, ДоверительДолжность, "");
КонецЕсли;
Объект.ДоверительФЛ_ИНН = ?(ЭтоНеРуссЮрЛицо ИЛИ НЕ ЭтоЮрЛицо, ДоверительИНН, "");
Объект.ДоверительФЛ_СНИЛС = ?(НЕ ЭтоЮрЛицо ИЛИ ЭтоМЧДФСС(Объект) И ЭтоНеРуссЮрЛицо, ДоверительСНИЛС, "");
Если ЭтоМЧДФНС(Объект) ИЛИ ЭтоМЧДЦБ(Объект) Тогда
Объект.ДоверительФЛ_Гражданство = ?(ЭтоНеРуссЮрЛицо ИЛИ НЕ ЭтоЮрЛицо, ДоверительГражданство, Неопределено);
КонецЕсли;
Если ЭтоМЧДФНС(Объект) Тогда
Объект.ДоверительФЛ_Пол = ?(ЭтоНеРуссЮрЛицо, ДоверительПол, Неопределено);
Объект.ДоверительФЛ_МестоРожд = ?(ЭтоНеРуссЮрЛицо, ДоверительМестоРождения, "");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьМЧД_ПодставитьРеквизитыДоверителя_Удостоверение(Объект, СвойстваОрганизации)
СубъектДоверенности = ПредопределенноеЗначение("Перечисление.СубъектыДоверенностиНалогоплательщика.ДоверительФЛ");
СтрокаУдостоверения = СоздатьМЧД_СтрокаТЧ(Объект, "УдостоверенияЛичности", СубъектДоверенности);
СтрокаУдостоверения.ВидДок = СвойстваОрганизации.ВидУдостоверения;
СтрокаУдостоверения.СерДок = ДоверительСерияДокумента;
СтрокаУдостоверения.НомДок = ДоверительНомерДокумента;
СтрокаУдостоверения.ДатаДок = ДоверительДатаВыдачиДокумента;
СтрокаУдостоверения.ВыдДок = ДоверительКемВыданДокумент;
СтрокаУдостоверения.КодВыдДок = ДоверительКодПодразделения;
КонецПроцедуры
&НаСервере
Процедура СоздатьМЧД_ПодставитьРеквизитыДоверителя_ФИО(Объект, СвойстваОрганизации)
ЭтоЮрЛицо = СвойстваОрганизации.ЭтоЮридическоеЛицо;
СубъектДоверенности = ?(ЭтоЮрЛицо,
ПредопределенноеЗначение("Перечисление.СубъектыДоверенностиНалогоплательщика.ДоверительРук"),
ПредопределенноеЗначение("Перечисление.СубъектыДоверенностиНалогоплательщика.ДоверительФЛ"));
СтрокаФИО = СоздатьМЧД_СтрокаТЧ(Объект, "ФИО", СубъектДоверенности);
СтрокаФИО.Фамилия = ДоверительФамилия;
СтрокаФИО.Имя = ДоверительИмя;
СтрокаФИО.Отчество = ДоверительОтчество;
КонецПроцедуры
&НаСервере
Процедура СоздатьМЧД_ПодставитьРеквизитыДоверителя_Адрес(Объект, СвойстваОрганизации)
ЭтоЮрЛицо = СвойстваОрганизации.ЭтоЮридическоеЛицо;
ЭтоРоссия = СвойстваОрганизации.ЭтоРоссийскаяОрганизация;
Если ЭтоМЧДФСС(Объект) Тогда
ИмяПоляАдрес = "ДоверительЮЛ_Адр";
Иначе
ИмяПоляАдрес = "ДоверительЮЛ_АдрРус";
Объект.ДоверительЮЛ_АдрЛат = "";
КонецЕсли;
Если ЭтоЮрЛицо Тогда
Если ЭтоРоссия Тогда
АдресСтруктурой = Новый Структура("Строка, XML, JSON, Представление, Значение",
СвойстваОрганизации.АдрЮР, СвойстваОрганизации.АдрЮР_XML, СвойстваОрганизации.АдрЮР_JSON,
СвойстваОрганизации.АдрЮР, СвойстваОрганизации.АдрЮР_XML);
Иначе
АдресСтруктурой = Новый Структура("Строка, XML, JSON, Представление, Значение",
СвойстваОрганизации.АдрИО, СвойстваОрганизации.АдрИО_XML, СвойстваОрганизации.АдрИО_JSON,
СвойстваОрганизации.АдрИО, СвойстваОрганизации.АдрИО_XML);
КонецЕсли;
ДокументооборотСКОВызовСервера.ПреобразоватьАдресВФорматXML(АдресСтруктурой,
ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.ЮрАдресОрганизации"));
Объект.ДоверительЮЛ_АдрXML = АдресСтруктурой.XML;
Если ЗначениеЗаполнено(АдресСтруктурой.XML) Тогда
Объект[ИмяПоляАдрес] = ДокументооборотСКОВызовСервера.ПредставлениеКонтактнойИнформации(
АдресСтруктурой.XML);
Иначе
Объект[ИмяПоляАдрес] = АдресСтруктурой.Представление;
КонецЕсли;
Иначе
Объект.ДоверительЮЛ_АдрXML = "";
Объект[ИмяПоляАдрес] = "";
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьМЧД_ОбновитьПредставителей(Объект)
Если ЭтоМЧДЦБ(Объект) Тогда
Возврат;
КонецЕсли;
Если ЭтоМЧДФНС(Объект) И ПредставительНеСотрудник
ИЛИ ЭтоМЧДФСС(Объект) Тогда
Объект.ПредставительЮЛ_НаимОрг = "";
Объект.ПредставительЮЛ_ИНН = "";
Объект.ПредставительЮЛ_КПП = "";
Объект.ПредставительЮЛ_ОГРН = "";
Иначе
Объект.ПредставительЮЛ_НаимОрг = Объект.ДоверительЮЛ_НаимОрг;
Объект.ПредставительЮЛ_ИНН = Объект.ДоверительЮЛ_ИНН;
Объект.ПредставительЮЛ_КПП = Объект.ДоверительЮЛ_КПП;
Объект.ПредставительЮЛ_ОГРН = Объект.ДоверительЮЛ_ОГРН;
Если ЭтоМЧДФСС(Объект) Тогда
Объект.ПредставительЮЛ_Адр = Объект.ДоверительЮЛ_Адр;
Объект.ПредставительЮЛ_АдрXML = Объект.ДоверительЮЛ_АдрXML;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьМЧД_ПодставитьРеквизитыПредставителя(Объект)
СубъектДоверенности = ПредопределенноеЗначение("Перечисление.СубъектыДоверенностиНалогоплательщика.ПредставительФЛ");
СтрокаФИО = СоздатьМЧД_СтрокаТЧ(Объект, "ФИО", СубъектДоверенности);
СтрокаФИО.Фамилия = ПредставительФамилия;
СтрокаФИО.Имя = ПредставительИмя;
СтрокаФИО.Отчество = ПредставительОтчество;
СтрокаУдостоверения = СоздатьМЧД_СтрокаТЧ(Объект, "УдостоверенияЛичности", СубъектДоверенности);
СтрокаУдостоверения.ВидДок = ПредставительВидДокумента;
СтрокаУдостоверения.СерДок = ПредставительСерияДокумента;
СтрокаУдостоверения.НомДок = ПредставительНомерДокумента;
СтрокаУдостоверения.ДатаДок = ПредставительДатаВыдачиДокумента;
СтрокаУдостоверения.ВыдДок = ПредставительКемВыданДокумент;
СтрокаУдостоверения.КодВыдДок = ПредставительКодПодразделения;
Объект.ПредставительФЛ_ИНН = ПредставительИНН;
Объект.ПредставительФЛ_СНИЛС = ПредставительСНИЛС;
Если ЭтоМЧДЦБ(Объект) Тогда
Объект.ПредставительФЛ_Должность = ПредставительДолжность;
КонецЕсли;
Если ЭтоМЧДФНС(Объект) ИЛИ ЭтоМЧДЦБ(Объект) Тогда
Объект.ПредставительФЛ_Гражданство = ПредставительГражданство;
КонецЕсли;
Если ЭтоМЧДФНС(Объект) ИЛИ ЭтоМЧДФСС(Объект) Тогда
Объект.ПредставительФЛ_ДатаРождения = ПредставительДатаРождения;
КонецЕсли;
Если ЭтоМЧДФНС(Объект) Тогда
Объект.ПредставителиПредставление = Строка(Объект.Представитель);
Объект.ПредставительЯвляетсяСотрудником = НЕ ПредставительНеСотрудник;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СоздатьМЧД_СтрокаТЧ(Объект, ИмяТЧ, СубъектДоверенности)
Строки = Объект[ИмяТЧ].НайтиСтроки(Новый Структура("Владелец", СубъектДоверенности));
Если Строки.Количество() = 0 Тогда
Строка = Объект[ИмяТЧ].Добавить();
Строка.Владелец = СубъектДоверенности;
Иначе
Строка = Строки[0];
КонецЕсли;
Возврат Строка;
КонецФункции
&НаСервере
Процедура СоздатьМЧД_ПодставитьРеквизитыЛицаБезДоверенностиЮЛ(Объект)
Если ТипЗнч(Объект.ЛицоБезДовЮЛ) = Тип("СправочникСсылка.Организации")
И Объект.ЛицоБезДовЮЛ <> ПредопределенноеЗначение("Справочник.Организации.ПустаяСсылка") Тогда
СвойстваОрганизации = СвойстваОрганизации(Объект.ЛицоБезДовЮЛ);
Объект.ЛицоБезДовЮЛ_НаимОрг = ?(СвойстваОрганизации.ЭтоЮридическоеЛицо,
?(НЕ СвойстваОрганизации.ЭтоРоссийскаяОрганизация И ЗначениеЗаполнено(СвойстваОрганизации.НаимИОПол),
СвойстваОрганизации.НаимИОПол, СвойстваОрганизации.НаимЮЛПол), "");
Объект.ЛицоБезДовЮЛ_ИНН = ?(СвойстваОрганизации.ЭтоЮридическоеЛицо, СвойстваОрганизации.ИННЮЛ, "");
Объект.ЛицоБезДовЮЛ_КПП = ?(СвойстваОрганизации.ЭтоЮридическоеЛицо, СвойстваОрганизации.КППЮЛ, "");
Объект.ЛицоБезДовЮЛ_ОГРН = ?(СвойстваОрганизации.ЭтоЮридическоеЛицо, СвойстваОрганизации.ОГРН, "");
ИначеЕсли ТипЗнч(Объект.ЛицоБезДовЮЛ) = Тип("СправочникСсылка.Контрагенты")
И Объект.ЛицоБезДовЮЛ <> ПредопределенноеЗначение("Справочник.Контрагенты.ПустаяСсылка") Тогда
СвойстваКонтрагента = ДокументооборотСКОВызовСервера.ПолучитьСвойстваКонтрагента(Объект.ЛицоБезДовЮЛ);
Объект.ЛицоБезДовЮЛ_НаимОрг = ?(СвойстваКонтрагента.ЭтоЮридическоеЛицо = Истина,
СвойстваКонтрагента.НаименованиеПолное, "");
Объект.ЛицоБезДовЮЛ_ИНН = ?(СвойстваКонтрагента.ЭтоЮридическоеЛицо = Истина, СвойстваКонтрагента.ИНН, "");
Объект.ЛицоБезДовЮЛ_КПП = ?(СвойстваКонтрагента.ЭтоЮридическоеЛицо = Истина, СвойстваКонтрагента.КПП, "");
Объект.ЛицоБезДовЮЛ_ОГРН = "";
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьМЧД_СохранитьПолномочияФССРекурсивно(Объект, Корень)
Если Корень.Пометка Тогда
СоздатьМЧД_СохранитьПолномочиеФСС(Объект, Корень);
КОнецЕсли;
Строки = Корень.Строки;
Для каждого Строка Из Строки Цикл
Если Строка.Пометка Тогда
СоздатьМЧД_СохранитьПолномочиеФСС(Объект, Строка);
КонецЕсли;
СоздатьМЧД_СохранитьПолномочияФССРекурсивно(Объект, Строка);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СоздатьМЧД_СохранитьПолномочиеФСС(Объект, Строка)
Если Строка.Наименование = НСтр("ru = 'МЧД для СФР (бывш. ФСС)'") Тогда
Наименование = НСтр("ru = 'Все'");
Иначе
Наименование = Строка.Наименование;
КонецЕсли;
СтрокаПолномочия = Объект.ПолномочияПредставителя.Добавить();
СтрокаПолномочия.КодПолномочия = Строка.Код;
СтрокаПолномочия.НаименованиеПолномочия = Наименование;
СтрокаПолномочия.ПризнакПередоверия = ПередовериеВозможноФСС;
СтрокаПолномочия.ДатаНачала = ДатаНачала;
СтрокаПолномочия.ДатаОкончания = ДатаОкончания;
КонецПроцедуры
&НаСервере
Функция ЭтоПолныеПолномочия() Экспорт
Возврат ВидПолномочий = МЧДБРОКлиентСервер.ВсеПолномочия();
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура АктивизироватьСтраницу(МногостраничныйЭлемент, ТекущаяСтраница, МенятьВидимость = Ложь) Экспорт
ДокументооборотСКОКлиентСервер.АктивизироватьСтраницу(
МногостраничныйЭлемент,
ТекущаяСтраница,
МенятьВидимость);
КонецПроцедуры
&НаКлиенте
Функция ЭтоСозданиеТолькоЦБ()
Возврат СоздатьМЧДЦБ
И НЕ СоздатьМЧДРосстат
И НЕ СоздатьМЧДСФР
И НЕ СоздатьМЧДФНС
И НЕ СоздатьМЧДФСРАР
И НЕ СоздатьМЧДФТС
И НЕ СоздатьМЧДРПН;
КонецФункции
&НаКлиенте
Процедура ИзменитьОформлениеСтраницыСертификат()
Если ОтправкаВозможна И НЕ ЭтоСозданиеТолькоЦБ() Тогда
Элементы.Сертификат_Заголовок.Заголовок = НСтр("ru = 'Отправка МЧД'");
Элементы.Сертификат_Далее.Заголовок = НСтр("ru = 'Отправить'");
Элементы.ГруппаШаг3_Заголовок.Заголовок = НСтр("ru = 'Нажмите кнопку ""Отправить""'");
Элементы.Сертификат_ОтменитьСоздание.Заголовок = НСтр("ru = 'Отменить отправку'");
Иначе
Элементы.Сертификат_Заголовок.Заголовок = НСтр("ru = 'Подписание МЧД'");
Элементы.Сертификат_Далее.Заголовок = НСтр("ru = 'Подписать'");
Элементы.ГруппаШаг3_Заголовок.Заголовок = НСтр("ru = 'Нажмите кнопку ""Подписать""'");
Элементы.Сертификат_ОтменитьСоздание.Заголовок = НСтр("ru = 'Отменить подписание'");
КонецЕсли;
Элементы.ГруппаШаг3_ПояснениеПроЦБ.Видимость = ОтправкаВозможна И СоздатьМЧДЦБ И НЕ ЭтоСозданиеТолькоЦБ();
Элементы.ГруппаШаг3_ПояснениеПроОдобрение.Видимость = НЕ ОтправкаВозможна;
Элементы.ГруппаШаг3_ПояснениеПроРПН.Видимость = СоздатьМЧДРПН;
Количество = КоличествоМЧДсУчетомЗПЭД();
Подстроки = Новый Массив;
Если ОтправкаВозможна И НЕ ЭтоСозданиеТолькоЦБ() Тогда
ТекстЗаголовка = НСтр("ru = 'Будет подписана и отправлена '");
Иначе
ТекстЗаголовка = НСтр("ru = 'Будет подписана '");
КонецЕсли;
Если Количество > 1 Тогда
ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "на", "ны");
ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "Будет", "Будут");
КонецЕсли;
Подстроки.Добавить(ТекстЗаголовка);
Подстроки.Добавить(Новый ФорматированнаяСтрока(Строка(Количество) + НСтр("ru = ' МЧД'"),,,, "МЧД"));
Если Количество > 1 Тогда
Подстроки.Добавить(НСтр("ru = ' разных форматов'"));
КонецЕсли;
Если НадоСоздатьЗПЭД Тогда
Подстроки.Добавить(НСтр("ru = ' и '"));
Подстроки.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'заявление'"),,,, ПолучитьНавигационнуюСсылку(ЗПЭД)));
Подстроки.Добавить(НСтр("ru = ' на подключение к ЭДО СФР. '"));
Если ОтправкаВозможна Тогда
Подстроки.Добавить(НСтр("ru = 'После одобрения заявления на ЭДО СФР программа предложит отправить '"));
Подстроки.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'МЧД'"),,,, ПолучитьНавигационнуюСсылку(МЧДУПУП)));
Подстроки.Добавить(НСтр("ru = ' в СФР.'"));
Иначе
КонецЕсли;
Иначе
Подстроки.Добавить(НСтр("ru = '.'"));
КонецЕсли;
Элементы.ГруппаШаг3_Пояснение.Заголовок = Новый ФорматированнаяСтрока(Подстроки);
Если ЭтоВызовИзЗаявления Тогда
Текст = НСтр("ru = 'Отправка отчетности в %1 станет возможной после одобрения заявления по 1С-Отчетности и регистрации МЧД в гос. органах.'");
Иначе
Текст = НСтр("ru = 'Отправка отчетности в %1 станет возможной после регистрации МЧД в гос. органах.'");
КонецЕсли;
Элементы.Сертификат_ИнформацияТекст.Заголовок = СтрШаблон(Текст, ОрганыОтправкиСтрокой());
Элементы.Сертификат_ИнформацияТекст.Видимость = ОрганыОтправки().Количество() > 0;
Элементы.Сертификат_Подсказка.Видимость = НЕ ЭтоСозданиеТолькоЦБ();
КонецПроцедуры
&НаКлиенте
Функция ОрганыОтправкиСтрокой()
ПодстрокиМЧД = ОрганыОтправки();
ПодстрокиМЧД = СтрСоединить(ПодстрокиМЧД, ", ");
ПодстрокиМЧД = ДлительнаяОтправкаКлиентСервер.ЗаменитьПоследнююЗапятуюНаИ(ПодстрокиМЧД);
Возврат ПодстрокиМЧД;
КонецФункции
&НаКлиенте
Функция ОрганыОтправки()
Органы = Новый Массив;
Если СоздатьМЧДФНС Тогда
Органы.Добавить("ФНС");
КонецЕсли;
Если СоздатьМЧДРосстат Тогда
Органы.Добавить("Росстат");
КонецЕсли;
Если СоздатьМЧДСФР Тогда
Органы.Добавить("СФР");
КонецЕсли;
Если СоздатьМЧДФСРАР Тогда
Органы.Добавить("ФСРАР");
КонецЕсли;
Если СоздатьМЧДФТС Тогда
Органы.Добавить("ФТС");
КонецЕсли;
Возврат Органы;
КонецФункции
&НаКлиенте
Функция КоличествоМЧДсУчетомЗПЭД()
Если НадоСоздатьЗПЭД Тогда
Возврат ТаблицаДокументов.Количество() - 1;
Иначе
Возврат ТаблицаДокументов.Количество();
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура СертификатРуководителяПослеВыбора(Сертификат, ДополнительныеПараметры) Экспорт
Если Сертификат = Неопределено Тогда
Возврат;
КонецЕсли;
ИзменитьОформлениеСертификатаРуководителя(Сертификат);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьОформлениеСертификатаРуководителя(Сертификат)
СертификатРуководителяОтпечаток = Сертификат.Отпечаток;
СертификатРуководителяПредставление = ДокументооборотСКОКлиентСервер.ПредставлениеСертификата(Сертификат, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораМЧД(Результат, ВходящийКонтекст) Экспорт
Если Результат <> Неопределено Тогда
ПоказатьЗначение(,Результат.Значение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СообщитьОбОтсутствииПодходящихСертификатов(Форма) Экспорт
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Сертификаты не обнаружены'"));
КонецПроцедуры
&НаСервере
Процедура РазобратьПараметры(Параметры)
Параметры.Свойство("ЭтоВызовИзЗаявления", ЭтоВызовИзЗаявления);
Параметры.Свойство("Организация", Организация);
Если ЭтоВызовИзЗаявления Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры, "ВладелецЭЦП, Организация, ЗПЭД");
Представитель = ВладелецЭЦП;
КонецЕсли;
ИспользуетсяРежимТестирования = ДокументооборотСКОВызовСервера.ИспользуетсяРежимТестирования();
ИмяТипаСправочникаМашиночитаемыеДоверенностиЦБ = "МашиночитаемыеДоверенностиЦБ";
ИмяТипаСправочникаМашиночитаемыеДоверенности = "МашиночитаемыеДоверенности";
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьСтраницуОшибка()
АктивизироватьСтраницу(
Элементы.Страницы,
Элементы.Ошибка);
Если ОтправкаВозможна Тогда
Элементы.Ошибка_Заголовок.Заголовок = НСтр("ru = 'Некоторые документы не отправлены из-за ошибок:'");
Элементы.Ошибка_ПодписатьИОтправить.Заголовок = НСтр("ru = 'Повторить отправку'");
Элементы.Ошибка_ОтправитьПозже.Заголовок = НСтр("ru = 'Отправить позже'");
Иначе
Элементы.Ошибка_Заголовок.Заголовок = НСтр("ru = 'Некоторые документы не подписаны из-за ошибок:'");
Элементы.Ошибка_ПодписатьИОтправить.Заголовок = НСтр("ru = 'Повторить подписание'");
Элементы.Ошибка_ОтправитьПозже.Заголовок = НСтр("ru = 'Подписать позже'");
КонецЕсли;
ПодстрокиМЧД = Новый Массив;
Для каждого Строка Из ТаблицаДокументов Цикл
Если НЕ Строка.Выполнено И ЗначениеЗаполнено(Строка.ОписаниеОшибки) Тогда
ПодстрокиМЧД.Добавить(Новый ФорматированнаяСтрока(Строка.Представление,,,,ПолучитьНавигационнуюСсылку(Строка.Ссылка)));
ПодстрокиМЧД.Добавить(":" + Символы.ПС);
ПодстрокиМЧД.Добавить(Строка.ОписаниеОшибки);
ПодстрокиМЧД.Добавить(Символы.ПС + Символы.ПС);
КонецЕсли;
КонецЦикла;
Элементы.Ошибка_Подсказка.Заголовок = Новый ФорматированнаяСтрока(ПодстрокиМЧД);
КонецПроцедуры
&НаСервере
Функция ПроверитьНаОшибки()
Результат =
(СоздатьМЧДФНС И Корректно(МЧДФНС) ИЛИ НЕ СоздатьМЧДФНС)
И (СоздатьМЧДСФР И Корректно(МЧДФСС) ИЛИ НЕ СоздатьМЧДСФР)
И (СоздатьМЧД_ЕФ(ЭтотОбъект) И Корректно(МЧДЕФ) ИЛИ НЕ СоздатьМЧД_ЕФ(ЭтотОбъект))
И (СоздатьМЧДЦБ И Корректно(МЧДЦБ) ИЛИ НЕ СоздатьМЧДЦБ);
Возврат Результат;
КонецФункции
&НаСервере
Функция Корректно(Ссылка)
Результат = Ссылка.ПолучитьОбъект().ПроверитьЗаполнение();
Если НЕ Результат Тогда
Отбор = Новый Структура("Ссылка", Ссылка);
НайденныеСтроки = ТаблицаДокументов.НайтиСтроки(Отбор);
Представление = НайденныеСтроки[0].Представление;
Текст = СтрШаблон(НСтр("ru = 'Зайдите в ""%1"" в п.3 и исправьте найденные ошибки'"), Представление);
ОбщегоНазначения.СообщитьПользователю(Текст);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция ОтпечатокРуководителя()
Возврат ДокументооборотСКОВызовСервера.ОтпечатокРуководителя(Организация, ВладелецЭЦП);
КонецФункции
&НаСервере
Процедура ИзменитьОформлениеРасширенныхНастроек() Экспорт
Элементы.РасширенныеНастройки.Видимость = СоздатьМЧДФНС ИЛИ СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДСФР;
КонецПроцедуры
&НаСервере
Функция КППОрганизации() Экспорт
Возврат ОбработкаЗаявленийАбонента.КППОрганизации(Организация);
КонецФункции
&НаКлиенте
Процедура ОткрытьСтраницуСертификат()
АктивизироватьСтраницу(
Элементы.Страницы,
Элементы.Сертификат);
АктивизироватьСтраницу(
Элементы.Сертификат_Страницы,
Элементы.СтраницаВыборСертификата);
КонецПроцедуры
&НаКлиенте
Процедура ИнициализироватьСертификатРуководителя()
СертификатРуководителяОтпечаток = ОтпечатокРуководителя();
Если ЗначениеЗаполнено(СертификатРуководителяОтпечаток) Тогда
ОписаниеОповещения = Новый ОписаниеОповещения(
"Далее_ПослеПоискаСертификата",
ЭтотОбъект);
Сертификат = Новый Структура();
Сертификат.Вставить("Отпечаток", СертификатРуководителяОтпечаток);
КриптографияЭДКОКлиент.НайтиСертификат(
ОписаниеОповещения,
Сертификат);
Иначе
СертификатРуководителяПредставление = "";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Далее_ПослеПоискаСертификата(Результат, ВходящийКонтекст)Экспорт
Если Результат.Выполнено Тогда
ИзменитьОформлениеСертификатаРуководителя(Результат.СвойстваСертификата);
Иначе
СертификатРуководителяПредставление = "";
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПредставительНеЗаполнен()
Пустой =
НЕ ЗначениеЗаполнено(Представитель)
ИЛИ ТипЗнч(Представитель) = Тип("Строка");
Возврат Пустой;
КонецФункции
&НаСервере
Функция ПредставительЭтоСтрока()
Возврат ТипЗнч(Представитель) = Тип("Строка") И ЗначениеЗаполнено(Представитель);
КонецФункции
&НаСервере
Процедура НайтиИлиСоздатьПредставителя()
Если ПредставительНеЗаполнен() И ЗначениеЗаполнено(ПредставительИНН) Тогда
ФизЛицо = Мультирежим.ФизЛицоПоИНН(ПредставительИНН);
Если ЗначениеЗаполнено(ФизЛицо) Тогда
Представитель = ФизЛицо;
КонецЕсли;
КонецЕсли;
Если ПредставительНеЗаполнен() И ЗначениеЗаполнено(ПредставительСНИЛС) Тогда
ФизЛицо = Мультирежим.ФизЛицоПоСНИЛС(ПредставительСНИЛС);
Если ЗначениеЗаполнено(ФизЛицо) Тогда
Представитель = ФизЛицо;
КонецЕсли;
КонецЕсли;
Если ПредставительНеЗаполнен() И ПредставительЭтоСтрока() Тогда
ФизЛицо = ОбработкаЗаявленийАбонента.ФизЛицоПоФИО(Представитель);
Если ЗначениеЗаполнено(ФизЛицо) Тогда
Представитель = ФизЛицо;
КонецЕсли;
КонецЕсли;
Если ПредставительНеЗаполнен() И ПредставительЭтоСтрока() Тогда
ФизЛицо = Справочники.ФизическиеЛица.ПустаяСсылка();
ЭлектронныйДокументооборотСКонтролирующимиОрганамиПереопределяемый.СоздатьФизЛицоПоФИОиИНН(
Представитель,
ПредставительИНН,
ФизЛицо);
Если ЗначениеЗаполнено(ФизЛицо) Тогда
Представитель = ФизЛицо;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачатьПолучениеСертификатовПредставителя()
МестоХраненияКлючаУчетнойЗаписи = Новый ФиксированнаяСтруктура(ЭлектроннаяПодписьВМоделиСервисаБРОВызовСервера.ОпределитьМестоХраненияКлюча(УчетнаяЗапись));
ИнициализироватьТаблицуСопоставлениеМЧД();
ОписаниеЗавершения = Новый ОписаниеОповещения(
"НачатьПолучениеСертификатовПредставителя_ПослеПоискаСертификатаУчетнойЗаписи",
ЭтотОбъект);
ПолучитьСертификатУчетнойЗаписи(ОписаниеЗавершения);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСертификатУчетнойЗаписи(ОписаниеЗавершения)
Отпечаток = ОтпечатокСертификатаУчетнойЗаписи();
Органы = Новый Массив;
ДобавитьОрганДляПоискаСертификата(Органы, СоздатьМЧДФНС, ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФНС"));
ДобавитьОрганДляПоискаСертификата(Органы, СоздатьМЧДРосстат, ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФСГС"));
ДобавитьОрганДляПоискаСертификата(Органы, СоздатьМЧДЦБ, ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ЦБ"));
ПолучитьСертификатПредставителяПоОтпечатку(
ОписаниеЗавершения,
Отпечаток,
МестоХраненияКлючаУчетнойЗаписи.МодельХраненияЗакрытогоКлюча,
Органы);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьОрганДляПоискаСертификата(Органы, Условие, НовыйОрган)
Если Условие Тогда
Органы.Добавить(НовыйОрган);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ИспользоватьАвтонастройку(ОрганСтрокой)
Возврат Мультирежим.РеквизитНастроекОбмена(Организация, ОрганСтрокой, "ИспользоватьАвтонастройку");
КонецФункции
&НаКлиенте
Процедура ПолучитьСертификатПредставителяПоОтпечатку(ОписаниеЗавершения, Отпечаток, МестоХранения, Органы)
Если Органы.Количество() = 0 Тогда
ВыполнитьОбработкуОповещения(ОписаниеЗавершения);
Возврат;
КонецЕсли;
Если КриптографияЭДКОКлиентСервер.ЭтоОблачнаяПодпись(МестоХранения) Тогда
ДанныеСертификата = ЭлектроннаяПодписьВМоделиСервисаБРОВызовСервера.НайтиСертификатОблачнойПодписиПоОрганизации(Организация, ПредставительПользователь);
ПолучитьСертификатПредставителяПоСертификату(ДанныеСертификата, Органы, Отпечаток);
ВыполнитьОбработкуОповещения(ОписаниеЗавершения);
Возврат;
ИначеЕсли КриптографияЭДКОКлиентСервер.ЭтоПодписьСервиса(МестоХранения) Тогда
ДанныеСертификата = ЭлектроннаяПодписьВМоделиСервисаБРОВызовСервера.ПолучитьСертификатПоОрганизации(Организация, ПредставительПользователь);
ПолучитьСертификатПредставителяПоСертификату(ДанныеСертификата, Органы, Отпечаток);
ВыполнитьОбработкуОповещения(ОписаниеЗавершения);
Возврат;
Иначе
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("ОписаниеЗавершения", ОписаниеЗавершения);
ДополнительныеПараметры.Вставить("Органы", Органы);
ДополнительныеПараметры.Вставить("МестоХранения", МестоХранения);
ДополнительныеПараметры.Вставить("Отпечаток", Отпечаток);
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПолучитьСертификатПредставителяПоОтпечатку_ПослеПолученияBase64",
ЭтотОбъект,
ДополнительныеПараметры);
Сертификат = Новый Структура();
Сертификат.Вставить("Отпечаток", Отпечаток);
КриптографияЭДКОКлиент.ЭкспортироватьСертификатВBase64(ОписаниеОповещения, Сертификат, Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСертификатПредставителяПоОтпечатку_ПослеПолученияBase64(Результат, ВходящийКонтекст) Экспорт
Если Результат.Выполнено Тогда
ПолучитьСертификатПредставителяПоBase64(
Результат.СтрокаBase64,
ВходящийКонтекст.Органы,
ВходящийКонтекст.Отпечаток);
ВыполнитьОбработкуОповещения(ВходящийКонтекст.ОписаниеЗавершения, Истина);
Иначе
ВыполнитьОбработкуОповещения(ВходящийКонтекст.ОписаниеЗавершения, Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПолучитьСертификатПредставителяПоBase64(СтрокаBase64, Органы, Отпечаток)
ДвДанныеЛокальногоСертификата = Base64Значение(СтрокаBase64);
Сертификат = Новый СертификатКриптографии(ДвДанныеЛокальногоСертификата);
ПолучитьСертификатПредставителяПоСертификату(Сертификат, Органы, Отпечаток);
КонецПроцедуры
&НаСервере
Процедура ПолучитьСертификатПредставителяПоСертификату(Сертификат, Органы, Отпечаток)
Владелец = ДокументооборотСКОКлиентСервер.ВладелецСертификат(Сертификат);
ИННы = ДокументооборотСКОКлиентСервер.ИННыИзСертификата(Владелец);
Если ИННы.ФЛ = ПредставительИНН Тогда
ДобавитьСертификатВТаблицуСопоставления(Органы, Отпечаток);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДобавитьСертификатВТаблицуСопоставления(Органы, Отпечаток)
Для каждого Орган Из Органы Цикл
Отбор = Новый Структура();
Отбор.Вставить("Орган", Орган);
НайденныеСтроки = СопоставлениеМЧД.НайтиСтроки(Отбор);
Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл
НайденнаяСтрока.Отпечаток = Отпечаток;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ОтпечатокСертификатаУчетнойЗаписи()
Возврат Мультирежим.ОтпечатокСертификатаПользователя(УчетнаяЗапись, ПредставительПользователь);
КонецФункции
&НаКлиенте
Процедура НачатьПолучениеСертификатовПредставителя_ПослеПоискаСертификатаУчетнойЗаписи(Результат, ВходящийКонтекст) Экспорт
Если Результат <> Истина Тогда
НайтиСертификатПользователяВРегФайле();
КонецЕсли;
ОписаниеЗавершения = Новый ОписаниеОповещения(
"НачатьПолучениеСертификатовПредставителя_ПослеПоискаСертификатаФСС",
ЭтотОбъект);
Отпечаток = ОтпечатокФСС();
Если ЗначениеЗаполнено(Отпечаток) Тогда
Органы = Новый Массив;
ДобавитьОрганДляПоискаСертификата(Органы, СоздатьМЧДСФР, ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФСС"));
Если ИспользоватьАвтонастройку("ФСС") Тогда
МестоХраненияКлюча = МестоХраненияКлючаУчетнойЗаписи.МодельХраненияЗакрытогоКлюча;
Иначе
МестоХраненияКлюча = ПредопределенноеЗначение("Перечисление.МодельХраненияЗакрытогоКлюча.ЛокальныйКлюч");
КонецЕсли;
ПолучитьСертификатПредставителяПоОтпечатку(ОписаниеЗавершения, Отпечаток, МестоХраненияКлюча, Органы);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеЗавершения);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НайтиСертификатПользователяВРегФайле() Экспорт
Если НЕ ЗначениеЗаполнено(УчетнаяЗапись) Тогда
Возврат;
КонецЕсли;
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
Адрес = РегФайлКА.АдресРегФайлаПоУчетнойЗаписи(УчетнаяЗапись);
ДокументDOM = РегФайлКА.ДокументDOMПоАдресу(Адрес);
ВладелецыЭЦП = ДокументDOM.ПолучитьЭлементыПоИмени("ВладелецЭЦП");
Для каждого ДанныеВладельцаЭЦП Из ВладелецыЭЦП Цикл
СНИЛСВладельца = КонтекстЭДОСервер.ПолучитьЗначениеУзлаXML(ДанныеВладельцаЭЦП, "СНИЛС");
Если СНИЛСВладельца = ПредставительСНИЛС Тогда
Отпечаток = СокрЛП(КонтекстЭДОСервер.ПолучитьЗначениеУзлаXML(ДанныеВладельцаЭЦП, "Отпечаток"));
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(Отпечаток) Тогда
Органы = Новый Массив;
ДобавитьОрганДляПоискаСертификата(Органы, СоздатьМЧДФНС, ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФНС"));
ДобавитьОрганДляПоискаСертификата(Органы, СоздатьМЧДРосстат, ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФСГС"));
ДобавитьОрганДляПоискаСертификата(Органы, СоздатьМЧДЦБ, ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ЦБ"));
ДобавитьСертификатВТаблицуСопоставления(Органы, Отпечаток);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ОтпечатокФСС()
Возврат ОтпечатокИзНастрокиОбмена("ФСС", "СертификатСтрахователяОтпечаток");
КонецФункции
&НаСервере
Функция ОтпечатокФТС()
Возврат ОтпечатокИзНастрокиОбмена("ФТС", "СертификатАбонентаОтпечаток");
КонецФункции
&НаСервере
Функция ОтпечатокИзНастрокиОбмена(ОрганСтрокой, ИмяПоляОтпечатка)
УстановитьПривилегированныйРежим(Истина);
Если ЗначениеЗаполнено(УчетнаяЗапись) И ИспользоватьАвтонастройку(ОрганСтрокой) Тогда
Возврат ОтпечатокСертификатаУчетнойЗаписи();
Иначе
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| НастройкиОбменаФТС.СертификатАбонентаОтпечаток КАК Отпечаток
|ИЗ
| РегистрСведений.НастройкиОбменаФТС КАК НастройкиОбменаФТС
|ГДЕ
| НастройкиОбменаФТС.ИспользоватьОбмен
| И НЕ НастройкиОбменаФТС.Организация.ПометкаУдаления
| И НастройкиОбменаФТС.Пользователь = &Пользователь";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ФТС", ОрганСтрокой);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "СертификатАбонентаОтпечаток", ИмяПоляОтпечатка);
Запрос.УстановитьПараметр("Пользователь", ПредставительПользователь);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Отпечаток;
Иначе
Возврат Мультирежим.РеквизитНастроекОбмена(Организация, ОрганСтрокой, ИмяПоляОтпечатка);
КонецЕсли;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура НачатьПолучениеСертификатовПредставителя_ПослеПоискаСертификатаФСС(Результат, ВходящийКонтекст) Экспорт
ОписаниеЗавершения = Новый ОписаниеОповещения(
"НачатьПолучениеСертификатовПредставителя_ПослеПоискаСертификатаФТС",
ЭтотОбъект);
Отпечаток = ОтпечатокФТС();
Если ЗначениеЗаполнено(Отпечаток) Тогда
Органы = Новый Массив;
ДобавитьОрганДляПоискаСертификата(Органы, СоздатьМЧДФТС, ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФТС"));
Если ИспользоватьАвтонастройку("ФТС") Тогда
МестоХраненияКлюча = МестоХраненияКлючаУчетнойЗаписи.МодельХраненияЗакрытогоКлюча;
Иначе
МестоХраненияКлюча = ПредопределенноеЗначение("Перечисление.МодельХраненияЗакрытогоКлюча.ЛокальныйКлюч");
КонецЕсли;
ПолучитьСертификатПредставителяПоОтпечатку(ОписаниеЗавершения, Отпечаток, МестоХраненияКлюча, Органы);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеЗавершения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачатьПолучениеСертификатовПредставителя_ПослеПоискаСертификатаФТС(Результат, ВходящийКонтекст) Экспорт
Если ВсеСертификатыПустые() Тогда
ПерейтиНаШагПослеСоздания();
Иначе
ПодобратьПодходящийСертификатПриОтсутствии();
ПроставитьПризнакОшибки();
ПерейтиНаШагПослеСоздания();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиНаШагПослеСоздания() Экспорт
Если СопоставлениеМЧД.Количество() = 0 ИЛИ ВсеСертификатыПустые() Тогда
ПерейтиНаСтраницуСертификат();
Иначе
АктивизироватьСтраницуСопоставление();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура АктивизироватьСтраницуСопоставление() Экспорт
ИзменитьОформлениеСтраницыСопоставление();
АктивизироватьСтраницу(
Элементы.Страницы,
Элементы.Сопоставление);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьОформлениеСтраницыСопоставление() Экспорт
Отбор = Новый Структура();
Отбор.Вставить("ЕстьОшибка", Истина);
ЕстьОшибки = СопоставлениеМЧД.НайтиСтроки(Отбор).Количество() > 0;
ОрганыСОшибками = ОрганыСОшибками();
Если ЕстьОшибки Тогда
Если ОрганыСОшибками.Количество() = 1 Тогда
Шаблон = НСтр("ru = 'Обратите внимание! Для успешного обмена с гос. органами нужен сертификат представителя и МЧД. В настройках обмена с гос. органом %2 не удалось найти сертификат представителя %1. Поэтому МЧД будет выпущен, но отправка отчетности в этот орган в программе будет недоступна.'");
Иначе
Шаблон = НСтр("ru = 'Обратите внимание! Для успешного обмена с гос. органами нужен сертификат представителя и МЧД. В настройках обмена с гос. органами %2 не удалось найти сертификат представителя %1. Поэтому МЧД будут выпущены, но отправка отчетности в эти органы в программе будет недоступна.'");
КонецЕсли;
Текст = СтрШаблон(Шаблон, ФИОвРодительном(Представитель), ОрганыСОшибкамиСтрокой());
Элементы.Сопоставление_ТекстОшибки.Заголовок = Текст;
Иначе
Если ЭтоВызовИзЗаявления Тогда
Шаблон = НСтр("ru = 'Для успешного обмена с гос.органами от лица %1 необходимо будет сохранить новые МЧД в настройки обмена с гос. органами. Сохранение будет выполнено автоматически после одобрения заявления и регистрации МЧД в гос. органах. Снимите флажок, если в этой программе МЧД использоваться не будет.'");
Иначе
Шаблон = НСтр("ru = 'Для успешного обмена с гос.органами от лица %1 необходимо будет сохранить новые МЧД в настройки обмена с гос. органами. Сохранение будет выполнено автоматически после регистрации МЧД в гос. органах. Снимите флажок, если в этой программе МЧД использоваться не будет.'");
КонецЕсли;
Текст = СтрШаблон(Шаблон, ФИОвРодительном(Представитель));
Элементы.Сопоставление_Текст.Заголовок = Текст;
КонецЕсли;
Элементы.Сопоставление_ГруппаОшибка.Видимость = ЕстьОшибки;
Элементы.Сопоставление_Текст.Видимость = НЕ ЕстьОшибки;
КонецПроцедуры
&НаСервере
Процедура ПодобратьПодходящийСертификатПриОтсутствии()
ЛюбойСертификат = ЛюбойСертификатИзТаблицыСопоставленияМЧД();
Если ЗначениеЗаполнено(ЛюбойСертификат) Тогда
Для каждого Строка Из СопоставлениеМЧД Цикл
Если НЕ ЗначениеЗаполнено(Строка.Отпечаток)
И (Строка.Орган = Перечисления.ТипыКонтролирующихОрганов.ФСС
ИЛИ Строка.Орган = Перечисления.ТипыКонтролирующихОрганов.ФТС
ИЛИ Строка.Орган = Перечисления.ТипыКонтролирующихОрганов.ФТС) Тогда
Строка.Отпечаток = ЛюбойСертификат;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ИгнорироватьОшибки()
Возврат ЭтоВызовИзЗаявленияНаПодключение И НЕ ЗначениеЗаполнено(УчетнаяЗапись);
КонецФункции
&НаСервере
Процедура ПроставитьПризнакОшибки()
Если ИгнорироватьОшибки() Тогда
Возврат;
КонецЕсли;
Для каждого Строка Из СопоставлениеМЧД Цикл
Строка.ЕстьОшибка = НЕ ЗначениеЗаполнено(Строка.Отпечаток);
Если Строка.ЕстьОшибка Тогда
Строка.Пометка = Ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ВсеСертификатыПустые()
Если ЭтоВызовИзЗаявленияНаПодключение Тогда
Возврат СопоставлениеМЧД.Количество() = 0 И ОтправкаВозможна;
КонецЕсли;
Отбор = Новый Структура();
Отбор.Вставить("Отпечаток", "");
ВсеПустые = СопоставлениеМЧД.Количество() = СопоставлениеМЧД.НайтиСтроки(Отбор).Количество();
Возврат ВсеПустые;
КонецФункции
&НаСервере
Функция ЛюбойСертификатИзТаблицыСопоставленияМЧД()
Для каждого Строка Из СопоставлениеМЧД Цикл
Если ЗначениеЗаполнено(Строка.Отпечаток) Тогда
Возврат Строка.Отпечаток;
КонецЕсли;
КонецЦикла;
Возврат "";
КонецФункции
&НаСервере
Процедура ИнициализироватьТаблицуСопоставлениеМЧД()
СопоставлениеМЧД.Очистить();
ИнициализироватьТаблицуСопоставлениеМЧД_ИФНС();
ИнициализироватьТаблицуСопоставлениеМЧД_Росстат();
ИнициализироватьТаблицуСопоставлениеМЧД_ФСС();
ИнициализироватьТаблицуСопоставлениеМЧД_ФТС();
ИнициализироватьТаблицуСопоставлениеМЧД_ЦБ();
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьТаблицуСопоставлениеМЧД_Росстат()
Если НЕ СоздатьМЧДРосстат
ИЛИ НЕ ПодключенОрган(Перечисления.ТипыКонтролирующихОрганов.ФСГС) И НЕ ЭтоВызовИзЗаявленияНаПодключение Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ЭтоМультиРежим = Мультирежим.ЭтоМультиРежим(УчетнаяЗапись);
ТаблицаМЧД = ДокументооборотСКОВызовСервера.МЧДОбмена(Организация, "ФСГС");
Строка = СопоставлениеМЧД.Добавить();
СтрокаМЧД = ТаблицаМЧД.Найти(Справочники.Пользователи.ПустаяСсылка(), "Пользователь");
Строка.ИспользоватьНесколько = ТаблицаМЧД.Количество() > 0 И СтрокаМЧД = Неопределено ИЛИ ЭтоМультиРежим;
Строка.ОрганПредставление = НСтр("ru = 'Росстат'");
Строка.Орган = ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФСГС");
Строка.Пометка = Истина;
Для каждого СтрокаТаблицы Из ТаблицаМЧД Цикл
Если СтрокаТаблицы.Пользователь = ПредставительПользователь
ИЛИ ПредставительИзМЧД(СтрокаТаблицы.Доверенность) = Представитель Тогда
Если ТипЗнч(СтрокаТаблицы.Доверенность) = Тип("Строка") Тогда
Строка.СтараяМЧД = НСтр("ru = 'МЧД №'") + СтрокаТаблицы.Доверенность;
Иначе
Строка.СтараяМЧД = СтрокаТаблицы.Доверенность;
КонецЕсли;
ИначеЕсли НЕ ЗначениеЗаполнено(СтрокаТаблицы.Пользователь) И ТипЗнч(СтрокаТаблицы.Доверенность) = Тип("Строка") Тогда
Строка.СтараяМЧД = НСтр("ru = 'МЧД №'") + СтрокаТаблицы.Доверенность;
КонецЕсли;
КонецЦикла;
Строка.НоваяМЧД = МЧДЕФ;
Если ТаблицаМЧД.Количество() = 0 Тогда
Если ЭтоЮридическоеЛицо Тогда
Строка.СтараяМЧД_Представление = НСтр("ru = '<МЧД отсутствует. Отправка от лица руководителя>'");
Иначе
Строка.СтараяМЧД_Представление = НСтр("ru = '<МЧД отсутствует. Отправка от лица ИП>'");
КонецЕсли;
Иначе
Строка.СтараяМЧД_Представление = ПредставлениеМЧД(Строка.СтараяМЧД, Строка.ОрганПредставление, НСтр("ru = 'Росстат'"));
КонецЕсли;
Строка.НоваяМЧД_Представление = ПредставлениеМЧД(МЧДЕФ, Строка.ОрганПредставление, НСтр("ru = 'Росстат'"));
КонецПроцедуры
&НаСервере
Функция ВыборкаИзНастроекОбмена(ИмяРегистра, ИмяСертификата)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| НастройкиОбменаФСС.Организация КАК Организация,
| НастройкиОбменаФСС.ИспользоватьОбмен КАК ИспользоватьОбмен,
| НастройкиОбменаФСС.ИспользоватьНесколько КАК ИспользоватьНесколько,
| НастройкиОбменаФСС.Доверенность КАК Доверенность
|ПОМЕСТИТЬ ВТСписокОрганизаций
|ИЗ
| РегистрСведений.НастройкиОбменаФСС КАК НастройкиОбменаФСС
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации
| ПО (Организации.Ссылка = НастройкиОбменаФСС.Организация)
|ГДЕ
| НастройкиОбменаФСС.Пользователь = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
| И НастройкиОбменаФСС.ИспользоватьОбмен = ИСТИНА
| И НЕ Организации.ПометкаУдаления
| И НастройкиОбменаФСС.Организация = &Организация
|;
|
|
|ВЫБРАТЬ
| ВТСписокОрганизаций.Организация КАК Организация,
| ВТСписокОрганизаций.ИспользоватьОбмен КАК ИспользоватьОбмен,
| ВТСписокОрганизаций.ИспользоватьНесколько КАК ИспользоватьНесколько,
| ВЫБОР
| КОГДА ВТСписокОрганизаций.ИспользоватьНесколько
| ТОГДА НастройкиОбменаФСС.Доверенность
| ИНАЧЕ ВТСписокОрганизаций.Доверенность
| КОНЕЦ КАК Доверенность
|ИЗ
| ВТСписокОрганизаций КАК ВТСписокОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиОбменаФСС КАК НастройкиОбменаФСС
| ПО ВТСписокОрганизаций.Организация = НастройкиОбменаФСС.Организация
| И (НастройкиОбменаФСС.Пользователь = &Пользователь)
| И (НЕ НастройкиОбменаФСС.СертификатСтрахователяОтпечаток = """")
|ГДЕ
| (ВТСписокОрганизаций.ИспользоватьНесколько = ЛОЖЬ
| ИЛИ ВТСписокОрганизаций.ИспользоватьНесколько = ИСТИНА
| И НЕ НастройкиОбменаФСС.Пользователь ЕСТЬ NULL)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "НастройкиОбменаФСС", ИмяРегистра);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "СертификатСтрахователяОтпечаток", ИмяСертификата);
Запрос.УстановитьПараметр("Пользователь", ПредставительПользователь);
Запрос.УстановитьПараметр("Организация", Организация);
Выборка = Запрос.Выполнить().Выбрать();
Возврат Выборка;
КонецФункции
&НаСервере
Процедура ИнициализироватьТаблицуСопоставлениеМЧД_ФТС()
Если НЕ СоздатьМЧДФТС
ИЛИ НЕ ПодключенОрган(Перечисления.ТипыКонтролирующихОрганов.ФТС) И НЕ ЭтоВызовИзЗаявленияНаПодключение Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ИнициализироватьТаблицуСопоставлениеМЧД_ИзНастроекОбмена(
МЧДЕФ,
"ФТС",
НСтр("ru = 'ФТС'"),
НСтр("ru = 'ФТС'"),
"СертификатАбонентаОтпечаток");
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьТаблицуСопоставлениеМЧД_ЦБ()
Если НЕ СоздатьМЧДЦБ
ИЛИ НЕ ПодключенОрган(Перечисления.ТипыКонтролирующихОрганов.ЦБ) И НЕ ЭтоВызовИзЗаявленияНаПодключение Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
УчетнаяЗапись = ДокументооборотСКОВызовСервера.УчетнаяЗаписьОрганизации(Организация);
Строка = СопоставлениеМЧД.Добавить();
Строка.ОрганПредставление = НСтр("ru = 'Банк России'");
Строка.Орган = ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ЦБ");
Строка.Пометка = Истина;
Строка.СтараяМЧД = УчетнаяЗапись.ДоверенностьЦБ;
Строка.НоваяМЧД = МЧДЦБ;
Строка.СтараяМЧД_Представление = ПредставлениеМЧД(УчетнаяЗапись.ДоверенностьЦБ, Строка.ОрганПредставление, НСтр("ru = 'ЦБ'"));
Строка.НоваяМЧД_Представление = ПредставлениеМЧД(МЧДЦБ, Строка.ОрганПредставление, НСтр("ru = 'ЦБ'"));
Строка.СтараяМЧД_Представитель = ПредставительИзМЧД(Строка.СтараяМЧД);
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьТаблицуСопоставлениеМЧД_ФСС()
Если НЕ СоздатьМЧДСФР
ИЛИ НЕ ПодключенОрган(Перечисления.ТипыКонтролирующихОрганов.ФСС) И НЕ ЭтоВызовИзЗаявленияНаПодключение Тогда
Возврат;
КонецЕсли;
ИнициализироватьТаблицуСопоставлениеМЧД_ИзНастроекОбмена(
МЧДФСС,
"ФСС",
НСтр("ru = 'СФР (бывш. ФСС)'"),
НСтр("ru = 'СФР'"),
"СертификатСтрахователяОтпечаток");
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьТаблицуСопоставлениеМЧД_ИзНастроекОбмена(МЧД, ОрганСтрокой, ОрганПредставление, ОрганПредставлениеКраткое, ИмяПоляСертификата)
УстановитьПривилегированныйРежим(Истина);
Выборка = ВыборкаИзНастроекОбмена("НастройкиОбмена" + ОрганСтрокой, ИмяПоляСертификата);
Если Выборка.Следующий() Тогда
Строка = СопоставлениеМЧД.Добавить();
Строка.ИспользоватьНесколько = Выборка.ИспользоватьНесколько;
Строка.СтараяМЧД = Выборка.Доверенность;
Строка.СтараяМЧД_Представитель = ПредставительИзМЧД(Строка.СтараяМЧД);
Иначе
Строка = СопоставлениеМЧД.Добавить();
Строка.ИспользоватьНесколько = Мультирежим.РеквизитНастроекОбмена(Организация, ОрганСтрокой, "ИспользоватьНесколько");
Строка.СтараяМЧД = Неопределено;
Строка.СтараяМЧД_Представитель = "";
КонецЕсли;
Строка.Пометка = Истина;
Строка.ОрганПредставление = ОрганПредставление;
Строка.Орган = Перечисления.ТипыКонтролирующихОрганов[ОрганСтрокой];
Строка.НоваяМЧД = МЧД;
Строка.СтараяМЧД_Представление = ПредставлениеМЧД(Строка.СтараяМЧД, Строка.ОрганПредставление, ОрганПредставлениеКраткое);
Строка.НоваяМЧД_Представление = ПредставлениеМЧД(Строка.НоваяМЧД, Строка.ОрганПредставление, ОрганПредставлениеКраткое);
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьТаблицуСопоставлениеМЧД_ИФНС()
Если НЕ СоздатьМЧДФНС
ИЛИ НЕ ПодключенОрган(Перечисления.ТипыКонтролирующихОрганов.ФНС) И НЕ ЭтоВызовИзЗаявленияНаПодключение Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| РегистрацияВИФНС.Ссылка КАК ИФНС,
| ЕСТЬNULL(ТЧПодписанты.Представитель, РегистрацияВИФНС.Представитель) КАК Представитель,
| ЕСТЬNULL(ТЧПодписанты.Доверенность, РегистрацияВИФНС.Доверенность) КАК СтараяМЧД,
| РегистрацияВИФНС.Код КАК Код,
| РегистрацияВИФНС.КПП КАК КПП
|ИЗ
| Справочник.РегистрацииВНалоговомОргане КАК РегистрацияВИФНС
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РегистрацииВНалоговомОргане.Подписанты КАК ТЧПодписанты
| ПО (ТЧПодписанты.Ссылка = РегистрацияВИФНС.Ссылка)
| И (ТЧПодписанты.Представитель = &Представитель)
|ГДЕ
| РегистрацияВИФНС.Владелец = &Владелец
| И НЕ РегистрацияВИФНС.ПометкаУдаления");
Запрос.УстановитьПараметр("Владелец", Организация);
Запрос.УстановитьПараметр("Представитель", Представитель);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Строка = СопоставлениеМЧД.Добавить();
Строка.ИФНС = Выборка.ИФНС;
Строка.ИспользоватьНесколько = Выборка.ИФНС.Подписанты.Количество() > 0;
ОрганПредставление = СтрШаблон(НСтр("ru = 'ИФНС %1
|КПП %2'"), Выборка.Код, Выборка.КПП);
Строка.ОрганПредставление = ОрганПредставление;
Строка.Орган = ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФНС");
Строка.Пометка = Истина;
Строка.СтараяМЧД = Выборка.СтараяМЧД;
Строка.НоваяМЧД = МЧДФНС;
Строка.СтараяМЧД_Представление = ПредставлениеМЧД(Выборка.СтараяМЧД, Строка.ОрганПредставление, НСтр("ru = 'ФНС'"), Выборка);
Строка.НоваяМЧД_Представление = ПредставлениеМЧД(МЧДФНС, Строка.ОрганПредставление, НСтр("ru = 'ФНС'"));
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПредставлениеМЧД(МЧД, ОрганПредставление, ОрганКратко, Выборка = Неопределено)
Текст = Строка(МЧД);
Если (ТипЗнч(МЧД) = Тип("СправочникСсылка.МашиночитаемыеДоверенностиФНС")
ИЛИ ТипЗнч(МЧД) = Тип("СправочникСсылка.МашиночитаемыеДоверенностиРаспределенныйРеестр")
ИЛИ ТипЗнч(МЧД) = Тип("СправочникСсылка.МашиночитаемыеДоверенностиФСС")
ИЛИ ДокументооборотСКОКлиентСервер.ПодсистемаЦПРРМЧДСуществует()
И ТипЗнч(МЧД) = Тип("СправочникСсылка." + ИмяТипаСправочникаМашиночитаемыеДоверенности)
ИЛИ ДокументооборотСКОКлиентСервер.ПодсистемаЦБСуществует()
И ТипЗнч(МЧД) = Тип("СправочникСсылка." + ИмяТипаСправочникаМашиночитаемыеДоверенностиЦБ))
И ЗначениеЗаполнено(МЧД) Тогда
ФИО = ФИОвРодительном(ПредставительИзМЧД(МЧД));
Текст = НСтр("ru = 'МЧД для %1 на %2
|(%3 - %4)'");
Текст = СтрШаблон(Текст, ОрганКратко, ФИО, Формат(МЧД.ДатаВыдачи, "ДЛФ=D"), Формат(МЧД.ДатаОкончания, "ДЛФ=D"));
ИначеЕсли ТипЗнч(МЧД) = Тип("СправочникСсылка.ДоверенностиНалогоплательщика") И ЗначениеЗаполнено(МЧД) Тогда
Текст = НСтр("ru = 'МЧД для %1
|(%2 - %3)'");
Текст = СтрШаблон(Текст, ОрганКратко, Формат(МЧД.ДатаВыдачи, "ДЛФ=D"), Формат(МЧД.ДатаОкончания, "ДЛФ=D"));
ИначеЕсли НЕ ЗначениеЗаполнено(МЧД) И СтрНайти(ОрганПредставление, "ИФНС")
И НЕ ЗначениеЗаполнено(Выборка.ИФНС.Представитель) И Выборка.ИФНС.Подписанты.Количество() = 0 Тогда
Если ЭтоЮридическоеЛицо Тогда
Текст = НСтр("ru = '<МЧД отсутствует. Отправка от лица руководителя>'");
Иначе
Текст = НСтр("ru = '<МЧД отсутствует. Отправка от лица ИП>'");
КонецЕсли;
ИначеЕсли НЕ ЗначениеЗаполнено(МЧД) Тогда
ФИО = ФИОвРодительном(Представитель);
Текст = НСтр("ru = '<МЧД на %1 отсутствует>'");
Текст = СтрШаблон(Текст, ФИО);
КонецЕсли;
Текст = СокрЛП(СтрЗаменить(Текст, "( - )", ""));
Возврат Текст;
КонецФункции
&НаСервере
Функция ПредставительИзМЧД(МЧД)
Если (ТипЗнч(МЧД) = Тип("СправочникСсылка.МашиночитаемыеДоверенностиФНС")
ИЛИ ТипЗнч(МЧД) = Тип("СправочникСсылка.МашиночитаемыеДоверенностиРаспределенныйРеестр")
ИЛИ ТипЗнч(МЧД) = Тип("СправочникСсылка.МашиночитаемыеДоверенностиФСС")
ИЛИ ДокументооборотСКОКлиентСервер.ПодсистемаЦБСуществует()
И ТипЗнч(МЧД) = Тип("СправочникСсылка." + ИмяТипаСправочникаМашиночитаемыеДоверенностиЦБ))
И ЗначениеЗаполнено(МЧД) Тогда
Возврат МЧД.Представитель;
ИначеЕсли ДокументооборотСКОКлиентСервер.ПодсистемаЦПРРМЧДСуществует()
И ТипЗнч(МЧД) = Тип("СправочникСсылка." + ИмяТипаСправочникаМашиночитаемыеДоверенности) И МЧД.Представители.Количество() > 0 Тогда
Возврат МЧД.Представители[0].Представитель;
КонецЕсли;
КонецФункции
&НаСервере
Функция ФИОвРодительном(Знач ФИО)
Если ТипЗнч(ФИО) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
ФИО = Строка(ФИО);
ФИО = КонтекстЭДОСервер.ОберткаСклонения(ФИО, 2);
ФИО = ФамилияИнициалыПоФИО(ФИО);
Возврат ФИО;
Иначе
Возврат Строка(ФИО);
КонецЕсли;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ФамилияИнициалыПоФИО(Знач ФИО)
ФИО = ДокументооборотСКОВызовСервера.РазложитьФИО(ФИО);
ФИО = ДокументооборотСКОКлиентСервер.ФамилияИнициалы(ФИО.Фамилия, ФИО.Имя, ФИО.Отчество);
Возврат ФИО;
КонецФункции
&НаКлиенте
Процедура ПроверитьПредставителяЦБ(ОписаниеЗавершения)
Если НЕ СоздатьМЧДЦБ Тогда
ВыполнитьОбработкуОповещения(ОписаниеЗавершения);
КонецЕсли;
Отбор = Новый Структура();
Отбор.Вставить("ОрганПредставление", НСтр("ru = 'Банк России'"));
Отбор.Вставить("Пометка", Истина);
НайденныеСтроки = СопоставлениеМЧД.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() = 0 Тогда
ВыполнитьОбработкуОповещения(ОписаниеЗавершения);
Возврат;
КонецЕсли;
СтарыйПредставитель = НайденныеСтроки[0].СтараяМЧД_Представитель;
Если СтарыйПредставитель <> Представитель И ЗначениеЗаполнено(СтарыйПредставитель) Тогда
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(НСтр("ru = 'Заменить'"));
Кнопки.Добавить(НСтр("ru = 'Не менять'"));
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("ОписаниеЗавершения", ОписаниеЗавершения);
ДополнительныеПараметры.Вставить("СтрокаЦБ", НайденныеСтроки[0]);
ДополнительныеПараметры.Вставить("Кнопки", Кнопки);
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПроверитьПредставителяЦБ_ПослеВопроса",
ЭтотОбъект,
ДополнительныеПараметры);
Текст = НСтр("ru = 'Поскольку в настройках обмена с Банком России можно указать только одну МЧД, то при смене текущей МЧД на МЧД %1 представитель %2 не сможет отправлять отчетность в Банк России.
|
|Заменить текущую МЧД на МЧД %1?'");
Текст = СтрШаблон(
Текст,
ФИОвРодительном(Представитель),
ФамилияИнициалыПоФИО(Строка(СтарыйПредставитель)));
ПоказатьВопрос(ОписаниеОповещения, Текст, Кнопки,,Кнопки[0].Значение);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеЗавершения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьПредставителяЦБ_ПослеВопроса(Ответ, ВходящийКонтекст) Экспорт
Кнопки = ВходящийКонтекст.Кнопки;
Если Ответ = Кнопки[1].Значение Тогда
ВходящийКонтекст.СтрокаЦБ.Пометка = Ложь;
КонецЕсли;
ВыполнитьОбработкуОповещения(ВходящийКонтекст.ОписаниеЗавершения);
КонецПроцедуры
&НаСервере
Процедура ЗаписатьМЧДвРегистр()
Для каждого Строка Из СопоставлениеМЧД Цикл
Если НЕ Строка.Пометка ИЛИ Строка.ЕстьОшибка ИЛИ Строка.Орган = Перечисления.ТипыКонтролирующихОрганов.ЦБ Тогда
Продолжить;
КонецЕсли;
НаборЗаписей = РегистрыСведений.МЧДкСопоставлению.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.МЧД.Установить(Строка.НоваяМЧД);
НаборЗаписей.Отбор.Орган.Установить(Строка.Орган);
НаборЗаписей.Отбор.ИФНС.Установить(Строка.ИФНС);
НаборЗаписей.Очистить();
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.МЧД = Строка.НоваяМЧД;
НоваяЗапись.Орган = Строка.Орган;
НоваяЗапись.ИФНС = Строка.ИФНС;
НоваяЗапись.ДатаДобавления = ТекущаяДатаСеанса();
НоваяЗапись.Ответственный = Пользователи.ТекущийПользователь();
НоваяЗапись.ПредставительПользователь = ПредставительПользователь;
НоваяЗапись.Отпечаток = Строка.Отпечаток;
НоваяЗапись.ИспользоватьНесколько = Строка.ИспользоватьНесколько;
НоваяЗапись.Представитель = Представитель;
НоваяЗапись.Организация = Организация;
НаборЗаписей.Записать();
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция СвойстваОрганизации(Источник)
Возврат ДокументооборотСКОВызовСервера.ПолучитьСвойстваОрганизации(Источник);
КонецФункции
#КонецОбласти