#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) МашиночитаемыеДоверенности.ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка); КонецПроцедуры Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) МашиночитаемыеДоверенности.ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс // Параметры: // Доверитель - см. МашиночитаемыеДоверенности.НовыеРеквизитыОтбора // Представитель - см. МашиночитаемыеДоверенности.НовыеРеквизитыОтбора // ДействительныеНаДату - Дата // // Возвращаемое значение: // ТаблицаЗначений - см. МашиночитаемыеДоверенности.НоваяТаблицаДоверенностей Функция ПолучитьДоверенностиПоОтбору(Доверитель, Представитель, ДействительныеНаДату) Экспорт Результат = МашиночитаемыеДоверенности.НоваяТаблицаДоверенностей(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | МашиночитаемыеДоверенностиКонтрагентов.Ссылка КАК Ссылка, | МашиночитаемыеДоверенностиКонтрагентов.ДатаВыдачи КАК ДатаВыдачи, | МашиночитаемыеДоверенностиКонтрагентов.ДатаОкончания КАК ДатаОкончания, | МашиночитаемыеДоверенностиКонтрагентов.СтатусВРеестреФНС КАК СтатусВРеестреФНС, | МашиночитаемыеДоверенностиКонтрагентов.Верна КАК Верна, | МашиночитаемыеДоверенностиКонтрагентов.Отозвана КАК Отозвана, | МашиночитаемыеДоверенностиКонтрагентов.ДатаОтзыва КАК ДатаОтзыва, | МашиночитаемыеДоверенностиКонтрагентов.ПолномочияОграничены КАК ПолномочияОграничены, | МашиночитаемыеДоверенностиКонтрагентов.ВариантЗаполненияПолномочий = ЗНАЧЕНИЕ(Перечисление.ВариантыЗаполненияПолномочийМЧД.Классификатор) КАК | ПолномочияУказаныИзКлассификатора, | МашиночитаемыеДоверенностиКонтрагентов.НомерДоверенности КАК НомерДоверенности, | МашиночитаемыеДоверенностиКонтрагентов.XMLфайлМЧД КАК ФайлМЧД, | МашиночитаемыеДоверенностиКонтрагентов.Представление КАК Представление, | ЕСТЬNULL(ПравилаПроверкиПолномочийПоМЧД.ПравилоПроверки, | ЗНАЧЕНИЕ(Справочник.ПравилаПроверкиПолномочийМЧД.ПустаяСсылка)) КАК ПравилоПроверки, | МашиночитаемыеДоверенностиКонтрагентов.ИННДоверителяРодительскойДоверенности КАК | ИННДоверителяРодительскойДоверенности, | МашиночитаемыеДоверенностиКонтрагентов.ДоверительИНН КАК ИННДоверителя, | МашиночитаемыеДоверенностиКонтрагентов.ДоверительКПП КАК КППДоверителя |ИЗ | Справочник.МашиночитаемыеДоверенностиКонтрагентов КАК МашиночитаемыеДоверенностиКонтрагентов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.МашиночитаемыеДоверенностиКонтрагентов.Представители КАК ТаблицаПредставителей | ПО МашиночитаемыеДоверенностиКонтрагентов.Ссылка = ТаблицаПредставителей.Ссылка | И НЕ МашиночитаемыеДоверенностиКонтрагентов.ПометкаУдаления | И МашиночитаемыеДоверенностиКонтрагентов.СтатусВРеестреФНС В (&СтатусВРеестреФНС) | И НЕ МашиночитаемыеДоверенностиКонтрагентов.СовместныеПолномочия | И &ДополнительныйОтбор | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПравилаПроверкиПолномочийПоМЧД КАК ПравилаПроверкиПолномочийПоМЧД | ПО МашиночитаемыеДоверенностиКонтрагентов.Ссылка = ПравилаПроверкиПолномочийПоМЧД.Доверенность"; Запрос.УстановитьПараметр("СтатусВРеестреФНС", МашиночитаемыеДоверенности.СтатусыДействительнойДоверенности()); ДоверительИНН = СокрЛП(Доверитель.ИНН); ДоверительКПП = СокрЛП(Доверитель.КПП); ПредставительИНН = СокрЛП(Представитель.ИНН); ТекстыУсловий = Новый Массив; Если Не ПустаяСтрока(ДоверительИНН) Тогда Запрос.УстановитьПараметр("ДоверительИНН", ДоверительИНН); ТекстыУсловий.Добавить("(МашиночитаемыеДоверенностиКонтрагентов.ДоверительИНН = &ДоверительИНН | ИЛИ МашиночитаемыеДоверенностиКонтрагентов.ИННДоверителяРодительскойДоверенности = &ДоверительИНН)"); КонецЕсли; Если Не ПустаяСтрока(ПредставительИНН) Тогда Запрос.УстановитьПараметр("ПредставительИНН", ПредставительИНН); ТекстыУсловий.Добавить("ТаблицаПредставителей.ПредставительИНН = &ПредставительИНН"); КонецЕсли; // Формируем тексты отбора ТекстУсловий = МашиночитаемыеДоверенности.ТекстОтбора(ТекстыУсловий); // Подставляем условия в запрос Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ДополнительныйОтбор", ТекстУсловий); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат Результат; КонецЕсли; Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл СвойстваДоверенности = МашиночитаемыеДоверенности.НовыеСвойстваДоверенности(); ЗаполнитьЗначенияСвойств(СвойстваДоверенности, Выборка); Если МашиночитаемыеДоверенности.ДоверенностьДействительнаПоСвойствам(СвойстваДоверенности, ДействительныеНаДату) Тогда КППДоверителяТекущейМЧД = Выборка.КППДоверителя; Если ЗначениеЗаполнено(ДоверительКПП) Тогда Если Не ЗаполненКППЮЛ(Выборка.ИННДоверителя, КППДоверителяТекущейМЧД) Тогда ИННКППДоверителей = МашиночитаемыеДоверенности.ИННКППДоверителей(Выборка.ФайлМЧД.Получить()); КППДоверителяТекущейМЧД = ИННКППДоверителей.КПП; УстановитьКППДоверителяВДоверенность(Выборка.Ссылка, КППДоверителяТекущейМЧД); КонецЕсли; Если ДоверительКПП <> КППДоверителяТекущейМЧД И Не МашиночитаемыеДоверенности.КППСоответствуетГоловнойОрганизации(КППДоверителяТекущейМЧД) Тогда Продолжить; КонецЕсли КонецЕсли; СтрокаТаблицыМЧД = Результат.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаТаблицыМЧД, Выборка); СтрокаТаблицыМЧД.КППДоверителя = КППДоверителяТекущейМЧД; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции // Получает данные МЧД. // // Параметры: // МЧД - СправочникСсылка.МашиночитаемыеДоверенностиКонтрагентов - Ссылка на МЧД контрагента // // Возвращаемое значение: // См. МашиночитаемыеДоверенности.НовыеДанныеДоверенности // Функция ПолучитьДанныеМЧД(МЧД) Экспорт РеквизитыМЧД = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(МЧД, "НомерДоверенности, ДоверительИНН"); ДанныеМЧД = МашиночитаемыеДоверенности.НовыеДанныеДоверенности(); ДанныеМЧД.НомерДоверенности = РеквизитыМЧД.НомерДоверенности; ДанныеМЧД.ИННДоверителя = РеквизитыМЧД.ДоверительИНН; Возврат ДанныеМЧД; КонецФункции // Возвращает сведения МЧД. // // Параметры: // МЧД - СправочникСсылка.МашиночитаемыеДоверенностиКонтрагентов // // Возвращаемое значение: // См. МашиночитаемыеДоверенности.НовыеСведенияМЧД // Функция СведенияМЧД(МЧД) Экспорт Реквизиты = "ДоверительИНН, ДоверительКПП, СтатусВРеестреФНС, ДатаВыдачи, ДатаОкончания, ДатаЗагрузкиИзРеестра, |Подписана, Верна, Отозвана, ДатаОтзыва, ПолномочияОграничены, ВариантЗаполненияПолномочий, |СовместныеПолномочия, НесколькоПредставителей, |ИННДоверителяРодительскойДоверенности, НомерДоверенности, НомерРодительскойДоверенности, Представители, |ЭлектроннаяПодпись, XMLфайлМЧД"; РеквизитыМЧД = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(МЧД, Реквизиты); Результат = МашиночитаемыеДоверенности.НовыеСведенияМЧД(); Результат.Ссылка = МЧД; Результат.НомерДоверенности = РеквизитыМЧД.НомерДоверенности; Результат.НомерРодительскойДоверенности = РеквизитыМЧД.НомерРодительскойДоверенности; Результат.ДатаВыдачи = РеквизитыМЧД.ДатаВыдачи; Результат.ДатаОкончания = РеквизитыМЧД.ДатаОкончания; Результат.ИННДоверителя = РеквизитыМЧД.ДоверительИНН; Результат.ИННДоверителяРодительскойДоверенности = РеквизитыМЧД.ИННДоверителяРодительскойДоверенности; Результат.КППДоверителя = РеквизитыМЧД.ДоверительКПП; Представители = РеквизитыМЧД.Представители.Выбрать(); ИННПредставителей = Новый Массив; Пока Представители.Следующий() Цикл ИННПредставителей.Добавить(Представители.ПредставительИНН); КонецЦикла; Результат.ИННПредставителей = ИННПредставителей; Если ЗначениеЗаполнено(Результат.ИННДоверителяРодительскойДоверенности) Тогда Результат.ИННПредставителейРодительскойДоверенности.Добавить(Результат.ИННДоверителя); КонецЕсли; Результат.СтатусВРеестреФНС = РеквизитыМЧД.СтатусВРеестреФНС; Результат.ДатаПолученияСведений = РеквизитыМЧД.ДатаЗагрузкиИзРеестра; Результат.Подписана = РеквизитыМЧД.Подписана; Результат.Верна = РеквизитыМЧД.Верна; Результат.Отозвана = РеквизитыМЧД.Отозвана; Результат.ДатаОтзыва = РеквизитыМЧД.ДатаОтзыва; Результат.ПолномочияОграничены = Не МашиночитаемыеДоверенности.ЭтоМЧДСПолнымиПолномочиями(МЧД); Результат.ПолномочияУказаныИзКлассификатора = МашиночитаемыеДоверенности.ПолномочияМЧДУказаныИзКлассификатора( , РеквизитыМЧД.ВариантЗаполненияПолномочий); Результат.ПравилоПроверки = РегистрыСведений.ПравилаПроверкиПолномочийПоМЧД.ПравилоПроверки(МЧД).Правило; Результат.СовместныеПолномочия = РеквизитыМЧД.СовместныеПолномочия; Результат.НесколькоПредставителей = РеквизитыМЧД.НесколькоПредставителей; Результат.ДанныеФайла = РеквизитыМЧД.XMLфайлМЧД.Получить(); Результат.ДанныеПодписи = РеквизитыМЧД.ЭлектроннаяПодпись.Получить(); Возврат Результат; КонецФункции // Заполняет элемент справочника МЧД сведениями. // // Параметры: // НомерДоверенности - Строка // ИННДоверителя - Строка // ИННПредставителя - Строка // Сведения - См. МашиночитаемыеДоверенности.ПолучитьСведенияДоверенностиНаСервереМЧД // // Возвращаемое значение: // См. МашиночитаемыеДоверенности.НовыеДанныеСтатусаМЧД // Функция ЗаполнитьМЧД(НомерДоверенности, ИННДоверителя, ИННПредставителя, Сведения) Экспорт Результат = МашиночитаемыеДоверенности.НовыеДанныеСтатусаМЧД(); ДанныеДоверенности = МашиночитаемыеДоверенности.НовыеДанныеДоверенности(); ДанныеДоверенности.НомерДоверенности = НомерДоверенности; ДанныеДоверенности.ИННДоверителя = ИННДоверителя; ДанныеДоверенности.ИННПредставителя = ИННПредставителя; РезультатСоздания = НайтиСоздатьМЧД(ДанныеДоверенности); Если РезультатСоздания.Ошибка Тогда Результат.Ошибка = Истина; Результат.ОписаниеОшибки = РезультатСоздания.ОписаниеОшибки; Возврат Результат; КонецЕсли; МЧД = РезультатСоздания.Ссылка; ДанныеПодготовлены = 0; КлючевыеРеквизиты = ""; ДанныеДляЗагрузки = МашиночитаемыеДоверенностиКлиентСервер.НовыеДанныеДляЗагрузкиМЧД(); Попытка ДанныеДляЗагрузки.ДанныеДоверенности = Сведения.ПолныеДанные.ДанныеВыгрузки; ДанныеДляЗагрузки.ДанныеПодписи = Сведения.ПолныеДанные.ДанныеПодписи; ДанныеДляЗагрузки.ДанныеПодписиЗаявленияНаОтмену = Сведения.ПолныеДанные.ДанныеПодписиЗаявленияНаОтмену; РезультатЧтения = МашиночитаемыеДоверенности.ДанныеИзФайлаОбмена(ДанныеДляЗагрузки.ДанныеДоверенности); Если НЕ РезультатЧтения.Успех Тогда Результат.Ошибка = Истина; Результат.ОписаниеОшибки = РезультатЧтения.ТекстОшибки; Возврат Результат; КонецЕсли; ДанныеДоверенности = РезультатЧтения.ДанныеДоверенности; Исключение Результат.Ошибка = Истина; Результат.ОписаниеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат Результат; КонецПопытки; СтатусДоверенности = МашиночитаемыеДоверенностиКлиентСервер.СтатусВРеестреФНС(Сведения.ЧастичныеДанные.СтатусДоверенности); ДанныеДоверенности.Вставить("СтатусВРеестреФНС", СтатусДоверенности); ДанныеДоверенности.Вставить("ДатаЗагрузкиИзРеестра", Сведения.ДатаЗагрузкиИзРеестра); Если ДанныеДоверенности.ТипОрганизации = "ЮЛ" Тогда КлючевыеРеквизиты = "ДоверительЮЛ_ИНН, ДоверительЮЛ_КПП"; ИначеЕсли ДанныеДоверенности.ТипОрганизации = "ФЛ" Тогда КлючевыеРеквизиты = "ДоверительФЛ_ИНН, ДоверительФЛ_СНИЛС"; Иначе КлючевыеРеквизиты = ?(ЗначениеЗаполнено(ДанныеДоверенности.ДоверительЮЛ_ИНН), "ДоверительЮЛ_ИНН", "ДоверительФЛ_ИНН"); КонецЕсли; КлючевыеРеквизиты = КлючевыеРеквизиты + ", НомерДоверенности, ДатаВыдачи, ДатаОкончания, Представители"; КлючевыеРеквизиты = Новый Структура(КлючевыеРеквизиты); ТекстОшибки = ""; Для Каждого СтрокаКлюча Из КлючевыеРеквизиты Цикл Если ДанныеДоверенности.Свойство(СтрокаКлюча.Ключ) И ЗначениеЗаполнено(ДанныеДоверенности[СтрокаКлюча.Ключ]) Тогда ДанныеПодготовлены = ДанныеПодготовлены + 1; ИначеЕсли ПустаяСтрока(ТекстОшибки) Тогда ТекстОшибки = НСтр("ru = 'Не заполнены реквизиты справочника'") + ": " + СтрокаКлюча.Ключ; Иначе ТекстОшибки = ТекстОшибки + ", " + СтрокаКлюча.Ключ; КонецЕсли; КонецЦикла; Если КлючевыеРеквизиты.Количество() <> ДанныеПодготовлены Тогда Результат.Ошибка = Истина; Результат.ОписаниеОшибки = ТекстОшибки; Возврат Результат; КонецЕсли; РезультатЗаписи = ЗаписатьЭлементСправочника(МЧД, РезультатЧтения, ДанныеДляЗагрузки); ЗаполнитьЗначенияСвойств(Результат, РезультатЗаписи); Возврат Результат; КонецФункции // Загружает в элемент справочника данные из архива с файлом МЧД и подписью. // Если доверенности с таким номером нет, то создает новую, иначе перезаполняет существующую. // // Параметры: // ДанныеФайла - ДвоичныеДанные, Строка - Двоичные данные архива или адрес во временном хранилище, // - см. МашиночитаемыеДоверенностиКлиентСервер.НовыеДанныеДляЗагрузкиМЧД. // МЧД - Неопределено // - СправочникСсылка.МашиночитаемыеДоверенностиКонтрагентов // ДополнительныеСведения - См. МашиночитаемыеДоверенностиКлиентСервер.ДополнительныеСведенияПоЗагрузкеМЧД // - Неопределено // // Возвращаемое значение: // Структура: // * ТекстОшибки - Строка // * МЧД - СправочникСсылка.МашиночитаемыеДоверенностиКонтрагентов - Ссылка на МЧД контрагента. // * ТребуетсяПроверкаМЧДНаКлиенте - Булево - Флаг устанавливается в Истина, // если отсутствует возможность проверить подпись МЧД на сервере // (в настройках установлена проверка подписи на клиенте) // и необходимо выполнить проверку на клиенте. // * ВариантПроверкиСертификатовМЧДЭДО - ПеречислениеСсылка.ВариантыПроверкиСертификатовМЧДЭДО // * ДанныеДляПроверки - Неопределено // - см. МашиночитаемыеДоверенностиКлиентСервер.НовыеДанныеДляПроверкиМЧД // Функция ЗагрузитьМЧДИзФайла(ДанныеФайла, МЧД = Неопределено, ДополнительныеСведения = Неопределено) Экспорт ТребуетсяПроверкаМЧДНаКлиенте = Ложь; Результат = Новый Структура; Результат.Вставить("МЧД", ПустаяСсылка()); Результат.Вставить("ТребуетсяПроверкаМЧДНаКлиенте", ТребуетсяПроверкаМЧДНаКлиенте); Результат.Вставить("ДанныеДляПроверки", Неопределено); Результат.Вставить("ТекстОшибки", ""); Результат.Вставить("ВариантПроверкиСертификатовМЧДЭДО", МашиночитаемыеДоверенности.ВариантПроверкиСертификатаДоверителя()); Данные = Неопределено; Если ТипЗнч(ДанныеФайла) = Тип("Структура") Тогда Данные = ДанныеФайла; Иначе Данные = МашиночитаемыеДоверенности.ПрочитатьАрхив(ДанныеФайла); Если Данные = Неопределено Тогда Возврат Результат; КонецЕсли; КонецЕсли; ДанныеДляПроверки = МашиночитаемыеДоверенностиКлиентСервер.НовыеДанныеДляПроверкиМЧД(); ДанныеДляПроверки.ДанныеДоверенности = Данные.ДанныеДоверенности; ДанныеДляПроверки.ДанныеПодписи = Данные.ДанныеПодписи; Результат.ДанныеДляПроверки = ДанныеДляПроверки; ДанныеДляЗагрузки = МашиночитаемыеДоверенностиКлиентСервер.НовыеДанныеДляЗагрузкиМЧД(); ДанныеДляЗагрузки.ДанныеДоверенности = Данные.ДанныеДоверенности; ДанныеДляЗагрузки.ДанныеПодписи = Данные.ДанныеПодписи; ДанныеДляЗагрузки.ДанныеПодписиЗаявленияНаОтмену = Данные.ДанныеПодписиЗаявленияНаОтмену; ВидОперации = НСтр("ru = 'Загрузка машиночитаемой доверенности из файла.'"); ДанныеДоверенности = Неопределено; Попытка ДанныеИзФайлаОбмена = МашиночитаемыеДоверенности.ДанныеИзФайлаОбмена(ДанныеДляЗагрузки.ДанныеДоверенности); Если НЕ ДанныеИзФайлаОбмена.Успех Тогда Результат.ТекстОшибки = ДанныеИзФайлаОбмена.ТекстОшибки; Возврат Результат; КонецЕсли; ДанныеДоверенности = ДанныеИзФайлаОбмена.ДанныеДоверенности; Исключение ТекстОшибки = НСтр("ru = 'Ошибка при чтении файла доверенности: файл не соответствует формату ФНС.'"); ПодробныйТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЭлектронноеВзаимодействие.ОбработатьОшибку(ВидОперации, ПодробныйТекстОшибки, ТекстОшибки); Возврат Результат; КонецПопытки; РезультатПроверки = МашиночитаемыеДоверенности.ПроверитьКлючевыеРеквизитыДанныхФайлаДоверенности(ДанныеДоверенности); Если РезультатПроверки.ЕстьОшибки Тогда ТекстОшибки = НСтр("ru = 'Ошибка при заполнении доверенности из файла:'") + Символы.ПС + РезультатПроверки.ТекстОшибки; ЭлектронноеВзаимодействие.ОбработатьОшибку(ВидОперации, ТекстОшибки, ТекстОшибки); Возврат Результат; КонецЕсли; Если ЗначениеЗаполнено(ДополнительныеСведения) И ЗначениеЗаполнено(ДополнительныеСведения.СтатусВРеестреФНС) Тогда ДанныеДоверенности.СтатусВРеестреФНС = ДополнительныеСведения.СтатусВРеестреФНС; КонецЕсли; РезультатПроверкиНаСервере = МашиночитаемыеДоверенности.НовыйОбщийРезультатПроверкиПодписиДоверенности(Истина); РезультатЗаписи = ЗаписатьЭлементСправочника(МЧД, ДанныеИзФайлаОбмена, ДанныеДляЗагрузки, РезультатПроверкиНаСервере); Результат.Вставить("РезультатПроверкиНаСервере", РезультатПроверкиНаСервере); Если РезультатЗаписи.Ошибка Тогда Результат.ТекстОшибки = РезультатЗаписи.ОписаниеОшибки; Возврат Результат; КонецЕсли; Результат.ТребуетсяПроверкаМЧДНаКлиенте = РезультатЗаписи.ТребуетсяПроверкаМЧДНаКлиенте; Результат.МЧД = РезультатЗаписи.Сведения.Ссылка; Возврат Результат; КонецФункции // Определяет наличие у пользователя прав на изменение машиночитаемых доверенностей контрагентов. // // Возвращаемое значение: // Булево - Истина, если у пользователя есть право на изменение, иначе Ложь. // Функция ЕстьПравоИзменения() Экспорт Возврат ПравоДоступа("Изменение", Метаданные.Справочники.МашиночитаемыеДоверенностиКонтрагентов); КонецФункции // Возвращает имя файла машиночитаемой доверенности. // // Параметры: // Ссылка - СправочникСсылка.МашиночитаемыеДоверенностиКонтрагентов // // Возвращаемое значение: // Строка - Имя файла машиночитаемой доверенности. // Функция ПолучитьИмяФайлаМЧД(Ссылка) Экспорт Реквизиты = "НомерДоверенности"; ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, Реквизиты); ЭлементыИмениФайла = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ФорматыЭДО_ФНС.ПространствоИмен_МЧД()); ДатаФайла = ТекущаяДатаСеанса(); ЭлементыИмениФайла.Добавить(Формат(ДатаФайла, "ДФ=ггггММдд;")); ЭлементыИмениФайла.Добавить(ЗначенияРеквизитов.НомерДоверенности); Возврат СтрСоединить(ЭлементыИмениФайла, "_"); КонецФункции // Проверяет заполненность ИНН и КПП доверителя из доверенности // // Параметры: // Доверенность - СправочникОбъект.МашиночитаемыеДоверенностиКонтрагентов // // Возвращаемое значение: // Булево - Не заполнены регистрационные данные доверителя Функция ЗаполненыРегистрационныеДанныеДоверителя(Доверенность) Экспорт Если Не ТипЗнч(Доверенность) = Тип("СправочникОбъект.МашиночитаемыеДоверенностиКонтрагентов") Тогда Возврат Истина; КонецЕсли; Возврат ЗначениеЗаполнено(Доверенность.ДоверительИНН) И ЗаполненКППЮЛ(Доверенность.ДоверительИНН, Доверенность.ДоверительКПП); КонецФункции // Параметры: // ЭлементСправочника - СправочникСсылка.МашиночитаемыеДоверенностиКонтрагентов // ДанныеСтатуса - См. МашиночитаемыеДоверенности.НовыйСтатусВРеестреФНС // // Возвращаемое значение: // Булево - Истина в случае успешной записи. Функция УстановитьСтатус(ЭлементСправочника, ДанныеСтатуса) Экспорт СтатусУстановлен = Ложь; Если Не ЗначениеЗаполнено(ЭлементСправочника) Тогда Возврат СтатусУстановлен; КонецЕсли; Если Не ЗначениеЗаполнено(ДанныеСтатуса.СтатусВРеестреФНС) И Не ЗначениеЗаполнено(ДанныеСтатуса.ДатаПолученияСтатуса) Тогда Возврат СтатусУстановлен; КонецЕсли; ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект(); Если ЗначениеЗаполнено(ДанныеСтатуса.ДатаПолученияСтатуса) Тогда ОбъектСправочника.ДатаОбновленияСтатуса = ДанныеСтатуса.ДатаПолученияСтатуса; КонецЕсли; Если ЗначениеЗаполнено(ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДанныеСтатуса, "СтатусВРеестреФНС")) Тогда Если Не ЗначениеЗаполнено(ОбъектСправочника.СтатусВРеестреФНС) И ЗначениеЗаполнено(ОбъектСправочника.ДатаОтзыва) Тогда ОбъектСправочника.Отозвана = Ложь; ОбъектСправочника.ДатаОтзыва = Дата(1, 1, 1); КонецЕсли; ОбъектСправочника.СтатусВРеестреФНС = ДанныеСтатуса.СтатусВРеестреФНС; Если ЗначениеЗаполнено(ДанныеСтатуса.ДатаОтзыва) Тогда ОбъектСправочника.Отозвана = Истина; ОбъектСправочника.ДатаОтзыва = ДанныеСтатуса.ДатаОтзыва; КонецЕсли; КонецЕсли; РезультатЗаписи = ЗаписатьОбъектВБазу(ОбъектСправочника); Если Не РезультатЗаписи.Ошибка Тогда СтатусУстановлен = Истина; КонецЕсли; Возврат СтатусУстановлен; КонецФункции // Параметры: // Доверенность - СправочникСсылка.МашиночитаемыеДоверенностиКонтрагентов // Значение - Булево Процедура УстановитьПометкуВерна(Доверенность, Значение) Экспорт ДоверенностьОбъект = Доверенность.ПолучитьОбъект(); ДоверенностьОбъект.Верна = Значение; Если Значение Тогда ДоверенностьОбъект.ТекстОшибкиПроверкиМЧД = СтрШаблон(НСтр("ru='Проверена вручную: %1, %2'"), Пользователи.ТекущийПользователь(), ТекущаяДатаСеанса()); КонецЕсли; ДоверенностьОбъект.Записать(); КонецПроцедуры // Параметры: // Доверенность - СправочникСсылка.МашиночитаемыеДоверенностиКонтрагентов // Значение - Булево // ДатаОтзыва - Дата Процедура УстановитьПометкуОтозвана(Доверенность, Значение, ДатаОтзыва) Экспорт ДоверенностьОбъект = Доверенность.ПолучитьОбъект(); ДоверенностьОбъект.Отозвана = Значение; ДоверенностьОбъект.ДатаОтзыва = ?(Значение, ДатаОтзыва, '00010101'); ДоверенностьОбъект.Записать(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции #Область ПолучениеСтатусаВРеестреФНС // Параметры: // Доверенность - СправочникСсылка.МашиночитаемыеДоверенностиОрганизаций // // Возвращаемое значение: // См. МашиночитаемыеДоверенностиКлиентСервер.ДанныеДляПроверкиВРеестреФНС Функция ДанныеДляПроверкиВРеестреФНС(Доверенность) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | МашиночитаемыеДоверенностиКонтрагентов.НомерДоверенности КАК НомерДоверенности, | МашиночитаемыеДоверенностиКонтрагентов.СтатусВРеестреФНС КАК СтатусВРеестреФНС, | МашиночитаемыеДоверенностиКонтрагентов.ДатаОтзыва КАК ДатаОтзыва |ИЗ | Справочник.МашиночитаемыеДоверенностиКонтрагентов КАК МашиночитаемыеДоверенностиКонтрагентов |ГДЕ | МашиночитаемыеДоверенностиКонтрагентов.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Доверенность); РезультатЗапроса = Запрос.Выполнить(); ДанныеДоверенности = МашиночитаемыеДоверенностиКлиентСервер.ДанныеДляПроверкиВРеестреФНС(); Выборка = РезультатЗапроса.Выбрать(); Если Выборка.Следующий() Тогда ДанныеДоверенности.НомерДоверенности = Выборка.НомерДоверенности; ДанныеДоверенности.СтатусВРеестреФНС = Выборка.СтатусВРеестреФНС; ДанныеДоверенности.ДатаОтзыва = Выборка.ДатаОтзыва; КонецЕсли; Возврат ДанныеДоверенности; КонецФункции #КонецОбласти // Ищет доверенности // // Параметры: // НомерДоверенности - Строка // ВключаяПомеченныеНаУдаление - Булево // // Возвращаемое значение: // Массив из СправочникСсылка.МашиночитаемыеДоверенностиКонтрагентов Функция НайтиДоверенности(НомерДоверенности, ВключаяПомеченныеНаУдаление = Ложь) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | МашиночитаемыеДоверенностиКонтрагентов.Ссылка КАК Ссылка |ИЗ | Справочник.МашиночитаемыеДоверенностиКонтрагентов КАК МашиночитаемыеДоверенностиКонтрагентов |ГДЕ | МашиночитаемыеДоверенностиКонтрагентов.НомерДоверенности = &НомерДоверенности | И МашиночитаемыеДоверенностиКонтрагентов.Подписана | И (&ВключаяПомеченныеНаУдаление ИЛИ НЕ МашиночитаемыеДоверенностиКонтрагентов.ПометкаУдаления)"; Запрос.УстановитьПараметр("НомерДоверенности", НомерДоверенности); Запрос.УстановитьПараметр("ВключаяПомеченныеНаУдаление", ВключаяПомеченныеНаУдаление); Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); КонецФункции // Записывает элемент справочника, заполнив переданными данными. // // Параметры: // МЧД - СправочникСсылка.МашиночитаемыеДоверенностиКонтрагентов - МЧД // ДанныеИзФайлаОбмена - см. МашиночитаемыеДоверенности.ДанныеИзФайлаОбмена // ДанныеДляЗагрузки - см. МашиночитаемыеДоверенностиКлиентСервер.НовыеДанныеДляЗагрузкиМЧД // РезультатПроверкиНаСервере - Неопределено // - Структура: // * Результат - Булево // * ТекстОшибки - Строка // // Возвращаемое значение: // См. МашиночитаемыеДоверенности.НовыеДанныеСтатусаМЧД // Функция ЗаписатьЭлементСправочника(МЧД, ДанныеИзФайлаОбмена, ДанныеДляЗагрузки, РезультатПроверкиНаСервере = Неопределено) ДанныеДоверенности = ДанныеИзФайлаОбмена.ДанныеДоверенности; ТребуетсяПроверкаМЧДНаКлиенте = Ложь; Результат = МашиночитаемыеДоверенности.НовыеДанныеСтатусаМЧД(); НеочищаемыеРеквизиты = Новый Массив; НеочищаемыеРеквизиты.Добавить("НомерДоверенности"); НеочищаемыеРеквизиты.Добавить("ДоверительИНН"); НеочищаемыеРеквизиты.Добавить("ДоверительКПП"); НашлиЭлемент = ПустаяСсылка(); Если ЗначениеЗаполнено(МЧД) Тогда НашлиЭлемент = МЧД; КонецЕсли; Если Не ЗначениеЗаполнено(НашлиЭлемент) Тогда НашлиЭлемент = НайтиПоРеквизиту("НомерДоверенности", ДанныеДоверенности.НомерДоверенности); КонецЕсли; ЭтоНайденнаяНеРеестроваяМЧД = ЗначениеЗаполнено(НашлиЭлемент) И МашиночитаемыеДоверенности.ЭтоНеРеестроваяМЧД(НашлиЭлемент); ЗагружаемРеестровуюМЧД = ДанныеДоверенности.Свойство("СтатусВРеестреФНС") И ЗначениеЗаполнено(ДанныеДоверенности.СтатусВРеестреФНС); ЕстьПодписи = МашиночитаемыеДоверенности.ПодписиДоверенностиЗаполнены(НашлиЭлемент); Если ЕстьПодписи И ЭтоНайденнаяНеРеестроваяМЧД И Не ЗагружаемРеестровуюМЧД Тогда ХранилищеДанныхДоверенности = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НашлиЭлемент, "XMLфайлМЧД"); ДвоичныеДанныеДоверенности = ХранилищеДанныхДоверенности.Получить(); Если ДвоичныеДанныеДоверенности <> Неопределено Тогда Результат.Сведения = СведенияМЧД(НашлиЭлемент); Возврат Результат; КонецЕсли; КонецЕсли; Если Не ЗначениеЗаполнено(НашлиЭлемент) Тогда ОбъектСправочника = СоздатьЭлемент(); Иначе ОбъектСправочника = НашлиЭлемент.ПолучитьОбъект(); КонецЕсли; ДанныеДляПроверки = МашиночитаемыеДоверенностиКлиентСервер.НовыеДанныеДляПроверкиМЧД(); ДанныеДляПроверки.ДанныеДоверенности = ДанныеДляЗагрузки.ДанныеДоверенности; ДанныеДляПроверки.ДанныеПодписи = ДанныеДляЗагрузки.ДанныеПодписи; Если МашиночитаемыеДоверенности.ТребуетсяПерезаполнениеМЧД(ОбъектСправочника, ДанныеДляЗагрузки) Тогда Для Каждого СтрокаРеквизита Из ОбъектСправочника.Метаданные().Реквизиты Цикл Если НеочищаемыеРеквизиты.Найти(СтрокаРеквизита.Имя) = Неопределено Тогда ОбъектСправочника[СтрокаРеквизита.Имя] = Неопределено; КонецЕсли; КонецЦикла; ЗаполнитьЭлементСправочника(ОбъектСправочника, ДанныеИзФайлаОбмена, ДанныеДляЗагрузки, ТребуетсяПроверкаМЧДНаКлиенте, РезультатПроверкиНаСервере); Результат.ТребуетсяПроверкаМЧДНаКлиенте = ТребуетсяПроверкаМЧДНаКлиенте; КонецЕсли; ИзменилсяСтатусВРеестре = ЗагружаемРеестровуюМЧД И ДанныеДоверенности.СтатусВРеестреФНС <> ОбъектСправочника.СтатусВРеестреФНС; Если ИзменилсяСтатусВРеестре И ОбъектСправочника.СтатусВРеестреФНС <> Перечисления.СтатусыМашиночитаемойДоверенностиВРеестреФНС.Отозвано Тогда ОбъектСправочника.СтатусВРеестреФНС = ДанныеДоверенности.СтатусВРеестреФНС; КонецЕсли; ИзмениласьДатаОтзыва = ЗагружаемРеестровуюМЧД И ЗначениеЗаполнено(ДанныеДоверенности.ДатаОтзыва) И ДанныеДоверенности.ДатаОтзыва <> ОбъектСправочника.ДатаОтзыва; Если ИзмениласьДатаОтзыва Тогда ОбъектСправочника.ДатаОтзыва = ДанныеДоверенности.ДатаОтзыва; КонецЕсли; Если Не ЗагружаемРеестровуюМЧД И ЗначениеЗаполнено(ДанныеДляЗагрузки.ДанныеПодписиЗаявленияНаОтмену) И ЗначениеЗаполнено(ДанныеДоверенности.ДатаОтзыва) Тогда ОбъектСправочника.ДатаОтзыва = ДанныеДоверенности.ДатаОтзыва; ОбъектСправочника.СтатусВРеестреФНС = Перечисления.СтатусыМашиночитаемойДоверенностиВРеестреФНС.Отозвано; КонецЕсли; Если ЗагружаемРеестровуюМЧД Тогда ОбъектСправочника.ДатаОбновленияСтатуса = ТекущаяДатаСеанса(); КонецЕсли; ОтсутствуетВозможностьПроверитьНаСервере = Не ЭлектроннаяПодпись.ПроверятьЭлектронныеПодписиНаСервере(); ЭтоПровереннаяРеестроваяМЧД = МашиночитаемыеДоверенности.ЭтоПровереннаяРеестроваяМЧД(ДанныеДляПроверки, ДанныеДоверенности); ПроверенаВручную = МашиночитаемыеДоверенности.ПроверенаВручную(ОбъектСправочника); Если ЭтоПровереннаяРеестроваяМЧД И ОтсутствуетВозможностьПроверитьНаСервере И Не ПроверенаВручную Тогда ОбъектСправочника.Верна = Истина; ТребуетсяПроверкаМЧДНаКлиенте = Истина; КонецЕсли; Если ЗначениеЗаполнено(ОбъектСправочника.СтатусВРеестреФНС) И Не ЗначениеЗаполнено(ДанныеДоверенности.СтатусВРеестреФНС) И Не ПроверенаВручную Тогда ОбъектСправочника.Верна = Истина; ТребуетсяПроверкаМЧДНаКлиенте = Истина; КонецЕсли; ОбъектСправочника.ПолномочияОграничены = МашиночитаемыеДоверенности.ПолномочияОграничены(ДанныеДоверенности); РезультатЗаписи = ЗаписатьОбъектВБазу(ОбъектСправочника); Если РезультатЗаписи.Ошибка Тогда Результат.Ошибка = РезультатЗаписи.Ошибка; Результат.ОписаниеОшибки = РезультатЗаписи.ОписаниеОшибки; Возврат Результат; КонецЕсли; СведенияМЧД = МашиночитаемыеДоверенности.НовыеСведенияМЧД(); СведенияМЧД.Ссылка = ОбъектСправочника.Ссылка;; СведенияМЧД.ИННДоверителя = ОбъектСправочника.ДоверительИНН; СведенияМЧД.КППДоверителя = ОбъектСправочника.ДоверительКПП; ИННПредставителей = Новый Массив(); Для Каждого Представитель Из ОбъектСправочника.Представители Цикл ИННПредставителей.Добавить(Представитель.ПредставительИНН); КонецЦикла; СведенияМЧД.ИННПредставителей = ИННПредставителей; СведенияМЧД.ДатаПолученияСведений = ОбъектСправочника.ДатаЗагрузкиИзРеестра; СведенияМЧД.Полномочия = ДанныеДоверенности.Полномочия; Свойства = "ДатаВыдачи, ДатаОкончания, СтатусВРеестреФНС, Подписана, Верна, Отозвана, ДатаОтзыва, |ПолномочияОграничены, ВариантЗаполненияПолномочий, СовместныеПолномочия, НесколькоПредставителей, |ИННДоверителяРодительскойДоверенности, НомерРодительскойДоверенности"; ЗаполнитьЗначенияСвойств(СведенияМЧД, ОбъектСправочника, Свойства); СведенияМЧД.ПравилоПроверки = РегистрыСведений.ПравилаПроверкиПолномочийПоМЧД.ПравилоПроверки(ОбъектСправочника.Ссылка).Правило; СведенияМЧД.ПолномочияУказаныИзКлассификатора = МашиночитаемыеДоверенности.ПолномочияМЧДУказаныИзКлассификатора( , ОбъектСправочника.ВариантЗаполненияПолномочий); Результат.Сведения = СведенияМЧД; Возврат Результат; КонецФункции // Параметры: // ОбъектСправочника - СправочникОбъект.МашиночитаемыеДоверенностиКонтрагентов // // Возвращаемое значение: // Структура - Записать объект в базу: // * Ошибка - Булево - Истина если были ошибки // * ОписаниеОшибки - Строка - подробное описание ошибки Функция ЗаписатьОбъектВБазу(ОбъектСправочника) РезультатЗаписи = Новый Структура("Ошибка, ОписаниеОшибки", Ложь, ""); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.МашиночитаемыеДоверенностиКонтрагентов"); ЭлементБлокировки.УстановитьЗначение("Ссылка", ОбъектСправочника.Ссылка); НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); ОбъектСправочника.Записать(); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ИмяСобытия = НСтр("ru = 'Ошибка изменения МЧД.'", ОбщегоНазначения.КодОсновногоЯзыка()); ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); РезультатЗаписи.Ошибка = Истина; РезультатЗаписи.ОписаниеОшибки = ТекстОшибки; Возврат РезультатЗаписи; КонецПопытки; Возврат РезультатЗаписи; КонецФункции // Заполняет элемент справочника. // // Параметры: // ОбъектСправочника - СправочникОбъект.МашиночитаемыеДоверенностиКонтрагентов // ДанныеИзФайлаОбмена - см. МашиночитаемыеДоверенности.ДанныеИзФайлаОбмена // ДанныеДляЗагрузки - см. МашиночитаемыеДоверенностиКлиентСервер.НовыеДанныеДляЗагрузкиМЧД // ТребуетсяПроверкаМЧДНаКлиенте - Булево - Флаг устанавливается в Истина, // если отсутствует возможность проверить подпись МЧД на сервере // (в настройках установлена проверка подписи на клиенте) // и необходимо выполнить проверку на клиенте. // РезультатПроверкиНаСервере - Неопределено // - Структура: // * Результат - Булево // * ТекстОшибки - Строка // Процедура ЗаполнитьЭлементСправочника(ОбъектСправочника, ДанныеИзФайлаОбмена, ДанныеДляЗагрузки, ТребуетсяПроверкаМЧДНаКлиенте, РезультатПроверкиНаСервере = Неопределено) ДанныеДоверенности = ДанныеИзФайлаОбмена.ДанныеДоверенности; ЗаполнитьЗначенияСвойств(ОбъектСправочника, ДанныеДоверенности); ДоверительФЛ = ""; Для каждого Строка Из ДанныеДоверенности.ФИО Цикл ФИО = Строка.Фамилия + " " + Строка.Имя; Если Строка.Отчество <> Неопределено Тогда ФИО = ФИО + " " + Строка.Отчество; КонецЕсли; Если Строка.Владелец = Перечисления.СубъектыДоверенности.ДоверительФЛ Тогда ДоверительФЛ = ФИО; КонецЕсли; КонецЦикла; Если ДанныеДоверенности.ТипОрганизации = "ФЛ" Тогда ОбъектСправочника.Доверитель = ДоверительФЛ; ОбъектСправочника.ДоверительИНН = ДанныеДоверенности.ДоверительФЛ_ИНН; ОбъектСправочника.ДоверительКПП = ""; Иначе ОбъектСправочника.Доверитель = ДанныеДоверенности.ДоверительЮЛ_НаимОрг; ОбъектСправочника.ДоверительИНН = ?(ЗначениеЗаполнено(ДанныеДоверенности.ДоверительЮЛ_ИНН), ДанныеДоверенности.ДоверительЮЛ_ИНН, ДанныеДоверенности.ДоверительФЛ_ИНН); ОбъектСправочника.ДоверительКПП = ДанныеДоверенности.ДоверительЮЛ_КПП; КонецЕсли; Если ОбъектСправочника.Представители.Количество() > 0 Тогда ОбъектСправочника.Представители.Очистить(); КонецЕсли; Для Каждого Представитель Из ДанныеДоверенности.Представители Цикл НовыйПредставитель = ОбъектСправочника.Представители.Добавить(); Если Представитель.Свойство("ПредставительФЛ_ИНН") Тогда ФИО = Представитель.Фамилия + " " + Представитель.Имя; Если Строка.Отчество <> Неопределено Тогда ФИО = ФИО + " " + Представитель.Отчество; КонецЕсли; НовыйПредставитель.Представитель = ФИО; НовыйПредставитель.ПредставительИНН = Представитель.ПредставительФЛ_ИНН; Иначе НовыйПредставитель.Представитель = Представитель.ПредставительЮЛ_НаимОрг; НовыйПредставитель.ПредставительИНН = Представитель.ПредставительЮЛ_ИНН; КонецЕсли; КонецЦикла; ОбъектСправочника.ЕстьВРеестреФНС = ЗначениеЗаполнено(ОбъектСправочника.ДатаЗагрузкиИзРеестра); МашиночитаемыеДоверенности.ЗаполнитьРеквизитыОтзыва(ОбъектСправочника, ДанныеДляЗагрузки); Если Не ЗначениеЗаполнено(ОбъектСправочника.ДатаОтзыва) И ОбъектСправочника.СтатусВРеестреФНС = Перечисления.СтатусыМашиночитаемойДоверенностиВРеестреФНС.Отозвано Тогда ОбъектСправочника.Отозвана = Истина; ОбъектСправочника.ДатаОтзыва = ОбъектСправочника.ДатаЗагрузкиИзРеестра; КонецЕсли; ДанныеДляПроверки = МашиночитаемыеДоверенностиКлиентСервер.НовыеДанныеДляПроверкиМЧД(); ДанныеДляПроверки.ДанныеДоверенности = ДанныеДляЗагрузки.ДанныеДоверенности; ДанныеДляПроверки.ДанныеПодписи = ДанныеДляЗагрузки.ДанныеПодписи; Если Не МашиночитаемыеДоверенности.ПроверенаВручную(ДанныеДляПроверки.ДанныеДоверенности) Тогда МашиночитаемыеДоверенности.ЗаполнитьПодписанаВерна(ОбъектСправочника, ДанныеДляПроверки, ТребуетсяПроверкаМЧДНаКлиенте,, РезультатПроверкиНаСервере); КонецЕсли; Если Не ЗначениеЗаполнено(ОбъектСправочника.ВариантЗаполненияПолномочий) Тогда Если МашиночитаемыеДоверенности.ФорматМЧДПоддерживаетКлассификаторПолномочий(ДанныеИзФайлаОбмена.ВерсияФорматаМЧД) И ДанныеДоверенности.Полномочия.Количество() > 0 Тогда ПолномочияКодифицированы = Истина; Для Каждого Полномочие Из ДанныеДоверенности.Полномочия Цикл Если Не ЗначениеЗаполнено(Полномочие.Код) Тогда ПолномочияКодифицированы = Ложь; Прервать; КонецЕсли; КонецЦикла; Если ПолномочияКодифицированы Тогда ОбъектСправочника.ВариантЗаполненияПолномочий = Перечисления.ВариантыЗаполненияПолномочийМЧД.Классификатор; Иначе ОбъектСправочника.ВариантЗаполненияПолномочий = Перечисления.ВариантыЗаполненияПолномочийМЧД.Текст; КонецЕсли; Иначе ОбъектСправочника.ВариантЗаполненияПолномочий = Перечисления.ВариантыЗаполненияПолномочийМЧД.Текст; КонецЕсли; КонецЕсли; КонецПроцедуры // Ищет МЧД контрагента, а в случае неудачного поиска создает новую МЧД // // Параметры: // ДанныеДоверенности - см. МашиночитаемыеДоверенности.НовыеДанныеДоверенности // // Возвращаемое значение: // Структура: // * Ссылка - СправочникСсылка.МашиночитаемыеДоверенностиКонтрагентов // * Ошибка - Булево // * ОписаниеОшибки - Строка // Функция НайтиСоздатьМЧД(ДанныеДоверенности) Результат = Новый Структура(); Результат.Вставить("Ссылка", ПустаяСсылка()); Результат.Вставить("Ошибка", Ложь); Результат.Вставить("ОписаниеОшибки", ""); МЧД = НайтиПоРеквизиту("НомерДоверенности", ДанныеДоверенности.НомерДоверенности); Если ЗначениеЗаполнено(МЧД) Тогда Результат.Ссылка = МЧД; Иначе НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных(); ЭлементБлокировки = Блокировка.Добавить("Справочник.МашиночитаемыеДоверенностиКонтрагентов"); ЭлементБлокировки.УстановитьЗначение("НомерДоверенности", ДанныеДоверенности.НомерДоверенности); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); МЧД = НайтиПоРеквизиту("НомерДоверенности", ДанныеДоверенности.НомерДоверенности); Если ЗначениеЗаполнено(МЧД) Тогда Результат.Ссылка = МЧД; Иначе УстановитьПривилегированныйРежим(Истина); МЧД = СоздатьЭлемент(); МЧД.НомерДоверенности = ДанныеДоверенности.НомерДоверенности; МЧД.ДоверительИНН = ДанныеДоверенности.ИННДоверителя; МЧД.Записать(); Результат.Ссылка = МЧД.Ссылка; КонецЕсли; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); Результат.Ошибка = Истина; Результат.ОписаниеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; КонецЕсли; Возврат Результат; КонецФункции // Параметры: // ИНН - Строка // КПП - Строка // // Возвращаемое значение: // Булево Функция ЗаполненКППЮЛ(ИНН, КПП) Возврат СтрДлина(СокрЛП(ИНН)) = 10 И ЗначениеЗаполнено(КПП); КонецФункции // Параметры: // Ссылка - СправочникСсылка.МашиночитаемыеДоверенностиКонтрагентов // КПП - Строка Процедура УстановитьКППДоверителяВДоверенность(Ссылка, КПП) Если ТранзакцияАктивна() Или Не ЗначениеЗаполнено(КПП) Или Не ЗначениеЗаполнено(Ссылка) Тогда Возврат; КонецЕсли; НачатьТранзакцию(); Попытка ОбъектСправочника = ОбщегоНазначенияБЭД.ОбъектПоСсылкеДляИзменения(Ссылка); ОбъектСправочника.ДоверительКПП = КПП; ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ОбъектСправочника); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); Операция = НСтр("ru = 'Обновление данных доверенности из файла'"); ПодробныйТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ТекстСообщения = НСтр("ru = 'Не удалось обновить данные доверенности. Подробности в журнале регистрации'"); ОбработкаНеисправностейБЭД.ОбработатьОшибку(Операция, ОбщегоНазначенияБЭДКлиентСервер.ПодсистемыБЭД().ОбменСКонтрагентами, ПодробныйТекстОшибки, ТекстСообщения, Ссылка); КонецПопытки; КонецПроцедуры #КонецОбласти #КонецЕсли