Документы по требованию ФНС / Подбор документов в ответ на требование ФНС / Модуль формы

файл
&НаКлиенте
Перем МассивОтобранныхЗаписей;

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	ПереопределитьТекстЗапросаДинамическогоСписка(Список);
	ПереопределитьТекстЗапросаДинамическогоСписка(Корзина);
	
	ЗаполнитьСпискиВыбора();
	ПодготовитьОтборПоПериоду(Список.Отбор);
	ПодготовитьОтборПоКонтрагенту(Список.Отбор);

	Если НЕ ЭлектронныйДокументооборотСКонтролирующимиОрганами.СправочникКонтрагентовДоступен() Тогда
		Элементы.ОтборКонтрагентПредставление.КнопкаВыбора = Ложь;
		Элементы.ОтборКонтрагентПредставление.ПодсказкаВвода = "Введите ИНН контрагента";
	КонецЕсли;
	
	МассивДоступныхВидовДокументовИсточников = ЭлектронныйДокументооборотСКонтролирующимиОрганами.МассивДоступныхВидовДокументовИсточников();
	РежимБезДокументовИсточников = (МассивДоступныхВидовДокументовИсточников.Количество() = 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 Тогда
		Возврат КодПоискаТолькоЦифры;
	Иначе
		Возврат "";
	КонецЕсли;
	
КонецФункции

&НаСервере
Процедура СкрытьПанельИнформацииНаСервере()
	
	Элементы.ГруппаПанельИнформации.Видимость = Ложь;
	ХранилищеОбщихНастроек.Сохранить("ДокументыПоТребованиюФНС", "ВидимостьПанелиИнформации", Ложь);
		
КонецПроцедуры

#КонецОбласти

Связанные материалы