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