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