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

файл

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

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

	ПереопределитьТекстЗапросаДинамическогоСписка(Список);
	
	ЗаполнитьСпискиВыбора();
	ПодготовитьОтборПоПериоду(Список.Отбор);
	ПодготовитьОтборПоКонтрагенту(Список.Отбор);

	Если НЕ ЭлектронныйДокументооборотСКонтролирующимиОрганами.СправочникКонтрагентовДоступен() Тогда
		Элементы.ОтборКонтрагентПредставление.КнопкаВыбора = Ложь;
		Элементы.ОтборКонтрагентПредставление.ПодсказкаВвода = "Введите ИНН контрагента";
	КонецЕсли;
	
	МассивДоступныхВидовДокументовИсточников = ЭлектронныйДокументооборотСКонтролирующимиОрганами.МассивДоступныхВидовДокументовИсточников();
	РежимБезДокументовИсточников = (МассивДоступныхВидовДокументовИсточников.Количество() = 0);
	Если РежимБезДокументовИсточников Тогда
		// В прикладном решении нет ни одного документа-источника
		// В списке будут отражаться лишь независимые сканированные документы
		// Убираем поля «Готовность» и «Документ-источник», отбор по готовности
		// Гиперссылка "Подготовить" не будет появляться, поскольку в списке будут присутствовать лишь готовые к отправке документы
		// Поэтому теряет смысл возможность отмечать строки в режиме независимого открытия 
		
		Элементы.Список.ПодчиненныеЭлементы.Источник.Видимость 		= Ложь;
		Элементы.Список.ПодчиненныеЭлементы.Готовность.Видимость 	= Ложь;
		
		Элементы.СписокКомандаПодготовитьОтмеченные.Видимость = Ложь;

		Элементы.ОтборГотовность.Видимость = Ложь;
		УстановитьОтборСписка(Список.Отбор, "Готовность", Истина); 
		
	КонецЕсли;
			
	// ИнтернетПоддержкаПользователей.Новости.КонтекстныеНовости_ПриСозданииНаСервере
	Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.Новости") Тогда
		
		ИдентификаторыСобытийПриОткрытии = "ПриОткрытии";
		
		МодульОбработкаНовостей = ОбщегоНазначения.ОбщийМодуль("ОбработкаНовостей");
		
		МодульОбработкаНовостей.КонтекстныеНовости_ПриСозданииНаСервере(
			ЭтаФорма,
			"БП.РегистрСведений.ДокументыПоТребованиюФНС",
			"ФормаСписка",
			,
			НСтр("ru='Новости: Документы по требованию ФНС'"),
			Ложь,
			Новый Структура("ПолучатьНовостиНаСервере, ХранитьМассивНовостейТолькоНаСервере", Истина, Ложь),
			ИдентификаторыСобытийПриОткрытии);
		
	КонецЕсли;
	// Конец ИнтернетПоддержкаПользователей.Новости.КонтекстныеНовости_ПриСозданииНаСервере
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// ИнтернетПоддержкаПользователей.Новости.ПриОткрытии
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.Новости") Тогда
		
		МодульОбработкаНовостейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбработкаНовостейКлиент");
		
		МодульОбработкаНовостейКлиент.КонтекстныеНовости_ПриОткрытии(ЭтаФорма);
		
	КонецЕсли;
	// Конец ИнтернетПоддержкаПользователей.Новости.ПриОткрытии
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если СтрНайти(ИмяСобытия, "Запись_") > 0 Тогда
		
		ОбновитьСписокНаСервере();	
		
		Если ЗначениеЗаполнено(ОтборКонтрагент) ИЛИ ЗначениеЗаполнено(ОтборКонтрагентИНН) Тогда
			Если ЗначениеЗаполнено(ОтборКонтрагент) Тогда
				
				ОтбработатьВыборКонтрагентаНаСервере(ОтборКонтрагент)	
				
			ИначеЕсли ЗначениеЗаполнено(ОтборКонтрагентИНН) Тогда
				
				ОтбработатьИзменениеИННКонтрагента(ОтборКонтрагентИНН);
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
	// ИнтернетПоддержкаПользователей.Новости.ОбработкаОповещения
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.Новости") Тогда
		
		МодульОбработкаНовостейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбработкаНовостейКлиент");
		
		МодульОбработкаНовостейКлиент.КонтекстныеНовости_ОбработкаОповещения(ЭтаФорма, ИмяСобытия, Параметр, Источник);
		
	КонецЕсли;
	// Конец ИнтернетПоддержкаПользователей.Новости.ОбработкаОповещения
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ОтборОрганизацияПриИзменении(Элемент)
	
	СписокОтбор = Список.Отбор;
	
	Если ЗначениеЗаполнено(ОтборОрганизация) Тогда
		
		УстановитьОтборСписка(СписокОтбор, "Организация", ОтборОрганизация); 
		
	Иначе
		
		ОтключитьОтборСписка(СписокОтбор, "Организация"); 
		
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ОтборВидДокументаФНСПриИзменении(Элемент)
	
	ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер.ОтборВидДокументаФНСПриИзменении(ЭтотОбъект);

КонецПроцедуры

&НаКлиенте
Процедура ОтборНаправлениеПриИзменении(Элемент)

	СписокОтбор = Список.Отбор;
	
	Если ЗначениеЗаполнено(ОтборНаправление) Тогда
		Если ОтборНаправление = ПредопределенноеЗначение("Перечисление.НаправленияДокументаПоТребованиюФНС.Получен") Тогда
			ОтборНаправлениеЧисло = 1;
		ИначеЕсли ОтборНаправление = ПредопределенноеЗначение("Перечисление.НаправленияДокументаПоТребованиюФНС.Выдан") Тогда
			ОтборНаправлениеЧисло = 2;
		КонецЕсли;
		
		УстановитьОтборСписка(СписокОтбор, "Направление", ОтборНаправлениеЧисло); 
		
	Иначе
		ОтключитьОтборСписка(СписокОтбор, "Направление"); 
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОтборГотовностьПриИзменении(Элемент)
	
	СписокОтбор = Список.Отбор;
	
	Если ОтборГотовностьСтрока = "Готов" Тогда
		УстановитьОтборСписка(СписокОтбор, "Готовность", Истина); 
	ИначеЕсли ОтборГотовностьСтрока = "Не готов" Тогда
		УстановитьОтборСписка(СписокОтбор, "Готовность", Ложь); 
	Иначе
		ОтключитьОтборСписка(СписокОтбор, "Готовность"); 
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ДатаКонцаПериодаОтчетаПриИзменении(Элемент)
	
	УстановитьОтборПоПериоду(Список.Отбор, ДатаНачалаПериода, ДатаКонцаПериода);
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаНачалаПериодаПриИзменении(Элемент)
	
	УстановитьОтборПоПериоду(Список.Отбор, ДатаНачалаПериода, ДатаКонцаПериода);
	
КонецПроцедуры

&НаКлиенте
Процедура ОтборКонтрагентПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	Оповещение = Новый ОписаниеОповещения("ВыборКонтрагентаЗавершение", ЭтотОбъект);
	
	ДополнительныеПараметры = Новый Структура();
	ДополнительныеПараметры.Вставить("РежимВыбора", Истина);
	
	ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора",ДополнительныеПараметры, ЭтаФорма,,,,
		Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

КонецПроцедуры

&НаКлиенте
Процедура ОтборКонтрагентПредставлениеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	
	ИНН = ПолучитьИННИзСтроки(Текст);
	Если ЗначениеЗаполнено(ИНН) Тогда
		
		ОтборКонтрагентПредставление = ИНН + " (ИНН)";
		ОтборКонтрагент = Неопределено;
		ОтборКонтрагентИНН = ИНН;
		
	Иначе
		
		ОтборКонтрагентПредставление = "";
		ОтборКонтрагентИНН = "";
		
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ОтборКонтрагентПредставлениеПриИзменении(Элемент)
	
	Если ЗначениеЗаполнено(ОтборКонтрагентИНН) Тогда
		//введен вручную ИНН
		ОтбработатьИзменениеИННКонтрагента(ОтборКонтрагентИНН);
		
	Иначе
		//поле очищено
		УстановитьОтборПоКонтрагенту(Список.Отбор, Неопределено, Неопределено);	
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ОтборКонтрагентПредставлениеОчистка(Элемент, СтандартнаяОбработка)
	
	ОтборКонтрагент = Неопределено;
	ОтборКонтрагентИНН = "";
	
КонецПроцедуры

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

&НаКлиенте
Процедура СписокПередНачаломИзменения(Элемент, Отказ)
	
	Отказ = Истина;
	
	ТекущиеДанные = Элементы.Список.ТекущиеДанные;
	
	Если ЗначениеЗаполнено(ТекущиеДанные.Источник) И ТекущиеДанные.ЕстьЭлектронныйДокумент Тогда
		//Если есть электронный документ - откроем его
		ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентПереопределяемый.ОткрытьАктуальныйЭД(ТекущиеДанные.Источник);
	ИначеЕсли ЗначениеЗаполнено(ТекущиеДанные.СканированныйДокумент) Тогда
		//Если есть сканированный документ - откроем его
		ПоказатьЗначение(, ТекущиеДанные.СканированныйДокумент);
	Иначе
		//создадим новый сканированный документ на основе документа источника
		ПараметрыИсточника = Новый Структура;
		ПараметрыИсточника.Вставить("Источник", ТекущиеДанные.Источник);
		ПараметрыИсточника.Вставить("ВидДокументаФНС", ТекущиеДанные.ВидДокументаФНС);
		ПараметрыИсточника.Вставить("НомерСтрокиИсточника", ТекущиеДанные.НомерСтрокиИсточника);
		
		ПараметрыФормы = Новый Структура;
		ПараметрыФормы.Вставить("ПараметрыИсточникаПодготовки", ПараметрыИсточника);
		
		ОткрытьФорму("Справочник.СканированныеДокументыДляПередачиВЭлектронномВиде.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект);			
	КонецЕсли;
	
КонецПроцедуры
	
&НаКлиенте
Процедура СписокПередУдалением(Элемент, Отказ)
	
	Отказ = Истина;
	
	СканированныйДокумент = Элемент.ТекущиеДанные.СканированныйДокумент;
	Источник = Элемент.ТекущиеДанные.Источник;
	
	Если ЗначениеЗаполнено(СканированныйДокумент) Тогда
		
		ТекстВопроса = НСтр("ru = 'Удалить данные, подготовленные к отправке?'");
		
		Если ЗначениеЗаполнено(Источник) Тогда
			
			ТекстВопроса = ТекстВопроса + НСтр("ru = ' Документ-источник при этом сохранится.'");	
			
		КонецЕсли;
		
		ДополнительныеПараметры = Новый Структура;					
		ДополнительныеПараметры.Вставить("СканированныйДокумент", СканированныйДокумент);
		ОписаниеОповещения = Новый ОписаниеОповещения("ПометитьНаУдалениеСканированныйДокументПослеОтветаНаВопрос", ЭтотОбъект, ДополнительныеПараметры); 
		ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
		Возврат;
		
	ИначеЕсли Элемент.ТекущиеДанные.ЕстьЭлектронныйДокумент Тогда
		
		ПоказатьПредупреждение(, НСтр("ru = 'Данные  документа-источника и связанные с ним данные электронного документооборота с контрагентом нельзя удалить из списка'"));	
		Возврат;
		
	Иначе
		
		ПоказатьПредупреждение(, НСтр("ru = 'Данные документа-источника нельзя удалить из списка'"));	
		Возврат;
		
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиенте
Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	
	Отказ = Истина;
	
	// создим новый сканированный документ, заполнив его значениями отбора (Организация, вид документа и направление)
	СтруктураПараметров = Новый Структура;
	СтруктураПараметров.Вставить("Организация", 	ОтборОрганизация);
	СтруктураПараметров.Вставить("ВидДокумента", 	ОтборВидДокументаФНС);
	СтруктураПараметров.Вставить("Направление", 	ОтборНаправление);
	ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", СтруктураПараметров);
	ПараметрыФормы.Вставить("ДобавитьВОтобранные", 	Истина);    	
	
	ОткрытьФорму("Справочник.СканированныеДокументыДляПередачиВЭлектронномВиде.ФормаОбъекта", ПараметрыФормы);	
	
КонецПроцедуры

&НаКлиенте
Процедура ОтборКонтрагентПредставлениеОткрытие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Если ЗначениеЗаполнено(ОтборКонтрагент) Тогда
		ПоказатьЗначение(, ОтборКонтрагент);
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормы

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ВыбратьПроизвольныйПериод(Команда)
	
	Диалог = Новый ДиалогРедактированияСтандартногоПериода();
	
	Диалог.Период.ДатаНачала    = ДатаНачалаПериода;
	Диалог.Период.ДатаОкончания = ДатаКонцаПериода;
	
	ДополнительныеПараметры = Новый Структура("Диалог", Диалог);
	ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьПроизвольныйПериодЗавершение", ЭтотОбъект, ДополнительныеПараметры);
	Диалог.Показать(ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаПодготовитьОтмеченные(Команда)
	
	МассивВыделенныхКлючейЗаписи = Новый Массив;
	
	Для каждого ЗаписьРС Из Элементы.Список.ВыделенныеСтроки Цикл
		МассивВыделенныхКлючейЗаписи.Добавить(ЗаписьРС);		
	КонецЦикла; 
	
	Если МассивВыделенныхКлючейЗаписи.Количество() > 0 Тогда
		
		МассивПараметровИсточниковПодготовки = ПолучитьМассивПараметровИсточниковВыделенныхНеготовыхДокументов(МассивВыделенныхКлючейЗаписи);
		
		НомерДокументаПодготовки = 1;
		КоличествоДокументовПодготовки = МассивПараметровИсточниковПодготовки.Количество();	
		
		Если КоличествоДокументовПодготовки > 0 Тогда
			ВыполнитьЭтапЦиклаПодготовки(МассивПараметровИсточниковПодготовки, 1);
			Возврат;
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура ОбновитьСписокНаСервере()
	
	Элементы.Список.Обновить();
	
КонецПроцедуры  

&НаСервере
Процедура ПереопределитьТекстЗапросаДинамическогоСписка(ДинСписок)
	
	Если ЭлектронныйДокументооборотСКонтролирующимиОрганами.СправочникКонтрагентовДоступен() Тогда
		ДинСписок.ТекстЗапроса = СтрЗаменить(ДинСписок.ТекстЗапроса, 
		"РегистрСведенийДокументыПоТребованиюФНС.КонтрагентПредставление",
		"ВЫБОР
		|	КОГДА РегистрСведенийДокументыПоТребованиюФНС.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
		|		ТОГДА РегистрСведенийДокументыПоТребованиюФНС.КонтрагентПредставление
		|	ИНАЧЕ РегистрСведенийДокументыПоТребованиюФНС.Контрагент
		|КОНЕЦ КАК КонтрагентПредставление");	
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьПроизвольныйПериодЗавершение(Период, ДополнительныеПараметры) Экспорт
	
	Диалог = ДополнительныеПараметры.Диалог;
	
	Если Период <> Неопределено Тогда
		
		ДатаНачалаПериода = Диалог.Период.ДатаНачала;
		ДатаКонцаПериода  = Диалог.Период.ДатаОкончания;
	
		УстановитьОтборПоПериоду(Список.Отбор, ДатаНачалаПериода, ДатаКонцаПериода);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыборКонтрагентаЗавершение(РезультатВыбора, Параметры) Экспорт
	
	Если РезультатВыбора = Неопределено Тогда
		Возврат;
	КонецЕсли;   

	ОтборКонтрагент = РезультатВыбора;
	ОтборКонтрагентИНН = "";	
	
	ОтбработатьВыборКонтрагентаНаСервере(ОтборКонтрагент);

КонецПроцедуры

&НаСервере
Процедура ОтбработатьВыборКонтрагентаНаСервере(Контрагент)
	
	//определяем реквизиты контрагента по ссылке
	РеквизитыКонтрагента = Новый Структура;
	
	Если ЭлектронныйДокументооборотСКонтролирующимиОрганами.РеквизитыСправочникаКонтрагентовДоступны() Тогда
		//наличие всех реквизитов предварительно проверяется
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	Контрагенты.Представление,
		|	Контрагенты.ИНН,
		|	Контрагенты.КПП
		|ИЗ
		|	Справочник.Контрагенты КАК Контрагенты
		|ГДЕ
		|	Контрагенты.Ссылка = &КонтрагентСсылка";
		
		Запрос.УстановитьПараметр("КонтрагентСсылка", Контрагент);
		
		Результат = Запрос.Выполнить();
		Выборка = Результат.Выбрать();
		
		Если Выборка.Следующий() Тогда
			
			РеквизитыКонтрагента.Вставить("ИНН", 			Выборка.ИНН);
			РеквизитыКонтрагента.Вставить("КПП", 			Выборка.КПП);
			РеквизитыКонтрагента.Вставить("Представление", 	Выборка.Представление);
			
		КонецЕсли;	
		
	Иначе
		
		ЭлектронныйДокументооборотСКонтролирующимиОрганамиПереопределяемый.ПолучитьРеквизитыКонтрагента(Контрагент, РеквизитыКонтрагента);
		
	КонецЕсли;

	Если ЗначениеЗаполнено(РеквизитыКонтрагента) Тогда
		
		КонтрагентИНН 					= РеквизитыКонтрагента.ИНН; 
		КонтрагентКПП 					= РеквизитыКонтрагента.КПП;
		ОтборКонтрагентПредставление 	= РеквизитыКонтрагента.Представление;	//заполним реквизит формы
		
		//найдем сканированные документы по ИНН и КПП контрагента
		МассивСканированныхДокументов = ПолучитьСканированныеДокументыПоИННКПП(КонтрагентИНН, КонтрагентКПП);
		
		МассивКонтрагентов = Новый Массив;
		МассивКонтрагентов.Добавить(Контрагент);
		
		УстановитьОтборПоКонтрагенту(Список.Отбор, МассивКонтрагентов, МассивСканированныхДокументов);	
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
 Процедура ОтбработатьИзменениеИННКонтрагента(КонтрагентИНН)
	
	 МассивКонтрагентов = Новый Массив;
	 
	 Если ЭлектронныйДокументооборотСКонтролирующимиОрганами.РеквизитыСправочникаКонтрагентовДоступны() Тогда
		 
		 Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	Контрагенты.Ссылка
		|ИЗ
		|	Справочник.Контрагенты КАК Контрагенты
		|ГДЕ
		|	Контрагенты.ИНН = &ОтборИНН";
		
		Запрос.УстановитьПараметр("ОтборИНН", КонтрагентИНН);
		
		Результат = Запрос.Выполнить();
		Выборка = Результат.Выбрать();
		
		Пока Выборка.Следующий() Цикл
			МассивКонтрагентов.Добавить(Выборка.Ссылка);
		КонецЦикла;
		
	 Иначе
		 
		 ЭлектронныйДокументооборотСКонтролирующимиОрганамиПереопределяемый.ПолучитьМассивКонтрагентовПоИНН(КонтрагентИНН, МассивКонтрагентов);
		 
	 КонецЕсли;
	 
	//найдем сканированные документы по ИНН контрагента
	МассивСканированныхДокументов = ПолучитьСканированныеДокументыПоИННКПП(КонтрагентИНН);
	
	УстановитьОтборПоКонтрагенту(Список.Отбор, МассивКонтрагентов, МассивСканированныхДокументов);
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьМассивПараметровИсточниковВыделенныхНеготовыхДокументов(МассивВыделенныхКлючейЗаписи)
	
	МассивИдентификаторовВыделенныхСтрок = Новый Массив;
	
	Для каждого КлючЗаписи Из МассивВыделенныхКлючейЗаписи Цикл
		
		МенеджерЗаписи = РегистрыСведений.ДокументыПоТребованиюФНС.СоздатьМенеджерЗаписи();
		
		ЗаполнитьЗначенияСвойств(МенеджерЗаписи,КлючЗаписи);
		
		МенеджерЗаписи.Прочитать();
		
		Если МенеджерЗаписи.Выбран() тогда 
			ИдентификаторЗаписи = МенеджерЗаписи.ИдентификаторВыбора;
			
			мИндекс = МассивИдентификаторовВыделенныхСтрок.Найти(ИдентификаторЗаписи);
			Если мИндекс = Неопределено Тогда
				МассивИдентификаторовВыделенныхСтрок.Добавить(ИдентификаторЗаписи);       
			КонецЕсли;
			
		КонецЕсли	
		
	КонецЦикла;
	
	Возврат ПолучитьМассивПараметровИсточниковВыбранныхНеготовыхДокументов(МассивИдентификаторовВыделенныхСтрок);

КонецФункции

&НаКлиенте
Процедура ВыполнитьЭтапЦиклаПодготовки(МассивПараметровИсточниковПодготовки, НомерДокументаПодготовки)
	
	КоличествоДокументовПодготовки = МассивПараметровИсточниковПодготовки.Количество();
	
	Если НомерДокументаПодготовки <= КоличествоДокументовПодготовки Тогда
		// откроем форму нового сканированного документа в режиме подготовки
		ПараметрыИсточникаПодготовки = МассивПараметровИсточниковПодготовки[НомерДокументаПодготовки - 1];
		
		ПараметрыФормы = Новый Структура;
		ПараметрыФормы.Вставить("РежимПодготовки", Истина);
		ПараметрыФормы.Вставить("ПараметрыИсточникаПодготовки", ПараметрыИсточникаПодготовки);
		ПараметрыФормы.Вставить("КоличествоДокументовПодготовки", КоличествоДокументовПодготовки);
		ПараметрыФормы.Вставить("НомерДокументаПодготовки", НомерДокументаПодготовки);
		
		ДополнительныеПараметры = Новый Структура;
		ДополнительныеПараметры.Вставить("МассивПараметровИсточниковПодготовки", МассивПараметровИсточниковПодготовки);
		ДополнительныеПараметры.Вставить("НомерДокументаПодготовки", НомерДокументаПодготовки);
		
		ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьЭтапЦиклаПодготовкиЗавершение", ЭтотОбъект, ДополнительныеПараметры);
		
		ОткрытьФорму("Справочник.СканированныеДокументыДляПередачиВЭлектронномВиде.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект, ,,, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);			
	Иначе
		// подготовка документов завершена
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЭтапЦиклаПодготовкиЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	//Результат = Неопределено	: подготовка документов завершена принудительно
	//Результат = Истина		: документ подготовлен, переходим к следующему этапу
	//Результат = Ложь			: подготовка документа пропущена, переходим к следующему этапу
	
	Если Результат <> Неопределено Тогда
		МассивПараметровИсточниковПодготовки 	= ДополнительныеПараметры.МассивПараметровИсточниковПодготовки;
		НомерДокументаПодготовки 	= ДополнительныеПараметры.НомерДокументаПодготовки;
		
		//переходим к следующему этапу
		ВыполнитьЭтапЦиклаПодготовки(МассивПараметровИсточниковПодготовки, НомерДокументаПодготовки + 1);
	Иначе
		// подготовка документов завершена принудительно
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПометитьНаУдалениеСканированныйДокументПослеОтветаНаВопрос(Ответ, ДополнительныеПараметры) Экспорт
	
	Если Ответ <> КодВозвратаДиалога.Да Тогда
        Возврат;
    КонецЕсли;
	
	СканированныйДокумент = ДополнительныеПараметры.СканированныйДокумент;

	ПометитьНаУдалениеСканированныйДокументПослеОтветаНаВопросНаСервере(СканированныйДокумент);

	Оповестить("Запись_СканированныеДокументыДляПередачиВЭлектронномВиде", , СканированныйДокумент);
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПометитьНаУдалениеСканированныйДокументПослеОтветаНаВопросНаСервере(СканированныйДокумент)
	
	СканированныйДокументОбъект = СканированныйДокумент.ПолучитьОбъект();	
	СканированныйДокументОбъект.ПометкаУдаления = Истина;
	СканированныйДокументОбъект.Записать();
	
КонецПроцедуры
	
&НаСервереБезКонтекста
Функция ПолучитьМассивПараметровИсточниковВыбранныхНеготовыхДокументов(МассивИдентификаторов)
	
	МассивПараметровИсточников = Новый Массив;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДокументыПоТребованиюФНС.Источник,
		|	ДокументыПоТребованиюФНС.ВидДокументаФНС,
		|	ДокументыПоТребованиюФНС.НомерСтрокиИсточника
		|ИЗ
		|	РегистрСведений.ДокументыПоТребованиюФНС КАК ДокументыПоТребованиюФНС
		|ГДЕ
		|	ДокументыПоТребованиюФНС.ИдентификаторВыбора В(&МассивИдентификаторов)
		|	И ДокументыПоТребованиюФНС.Готовность = ЛОЖЬ";
	
	Запрос.УстановитьПараметр("МассивИдентификаторов", МассивИдентификаторов);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		
		ПараметрыИсточника = Новый Структура;
		ПараметрыИсточника.Вставить("Источник", 			Выборка.Источник);
		ПараметрыИсточника.Вставить("ВидДокументаФНС", 		Выборка.ВидДокументаФНС);
		ПараметрыИсточника.Вставить("НомерСтрокиИсточника", Выборка.НомерСтрокиИсточника);
			
		МассивПараметровИсточников.Добавить(ПараметрыИсточника);
		
	КонецЦикла;
	
	Возврат МассивПараметровИсточников;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьСпискиВыбора()
	
	КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
	
	КонтекстЭДОСервер.ЗаполнитьСписокВыбораВидДокументаФНС(Элементы.ОтборВидДокументаФНС);
	КонтекстЭДОСервер.ЗаполнитьСписокВыбораНаправление(Элементы.ОтборНаправление);
	КонтекстЭДОСервер.ЗаполнитьСписокВыбораГотовность(Элементы.ОтборГотовность);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ПодготовитьОтборПоКонтрагенту(ОтборСписка)
	
	//добавим группу
	ГруппаОтбораИЛИ = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора(ОтборСписка.Элементы, Неопределено, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли);
	
	ЭлементОтбораКонтрагентСсылка = ГруппаОтбораИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбораКонтрагентСсылка.ЛевоеЗначение 		= Новый ПолеКомпоновкиДанных("Контрагент");
	ЭлементОтбораКонтрагентСсылка.Представление 		= "Контрагент";
	ЭлементОтбораКонтрагентСсылка.Использование 		= Ложь;
	
	ЭлементОтбораСканированныйДокумент = ГруппаОтбораИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбораСканированныйДокумент.ЛевоеЗначение 	= Новый ПолеКомпоновкиДанных("СканированныйДокумент");
	ЭлементОтбораСканированныйДокумент.Представление 	= "СканированныйДокумент";
	ЭлементОтбораСканированныйДокумент.Использование 	= Ложь;

КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ПодготовитьОтборПоПериоду(ОтборСписка)
	
	//добавим группу
	ГруппаОтбораИ = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора(ОтборСписка.Элементы, Неопределено, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ);

	ОтборДатаНачала = ГруппаОтбораИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборДатаНачала.ЛевоеЗначение 		= Новый ПолеКомпоновкиДанных("ДатаДокумента");
	ОтборДатаНачала.ВидСравнения 		= ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
	ОтборДатаНачала.Представление 		= "ДатаНачала";
	ОтборДатаНачала.Использование 		= Ложь;
	
	ОтборДатаОкончания = ГруппаОтбораИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборДатаОкончания.ЛевоеЗначение 	= Новый ПолеКомпоновкиДанных("ДатаДокумента");
	ОтборДатаОкончания.ВидСравнения 	= ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
	ОтборДатаОкончания.Представление 	= "ДатаОкончания";
	ОтборДатаОкончания.Использование 	= Ложь;

КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтборСписка(ОтборСписка, ИмяПоля, ПравоеЗначение, ВидСравненияОтбора = Неопределено)
	
	ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер.УстановитьОтборСписка(ОтборСписка, ИмяПоля, ПравоеЗначение, ВидСравненияОтбора);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ОтключитьОтборСписка(ОтборСписка, СтрокаЛевоеЗначение)
	
	ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер.ОтключитьОтборСписка(ОтборСписка, СтрокаЛевоеЗначение);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтборПоПериоду(ОтборСписка, НачалоПериода, КонецПериода)
	
	МассивЭлементов = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(ОтборСписка, , "ДатаНачала");
	ОтборДатаНачала = МассивЭлементов[0];
	
	МассивЭлементов = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(ОтборСписка, , "ДатаОкончания");
	ОтборДатаОкончания = МассивЭлементов[0];
	
	Если ЗначениеЗаполнено(НачалоПериода) Тогда
		ОтборДатаНачала.Использование = Истина;
		ОтборДатаНачала.ПравоеЗначение = НачалоДня(НачалоПериода);
	Иначе
		ОтборДатаНачала.Использование = Ложь;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(КонецПериода) Тогда
		ОтборДатаОкончания.Использование = Истина;
		ОтборДатаОкончания.ПравоеЗначение = КонецДня(КонецПериода);
	Иначе
		ОтборДатаОкончания.Использование = Ложь;
	КонецЕсли;
	
КонецПроцедуры
	
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтборПоКонтрагенту(ОтборСписка, МассивКонтрагентов, МассивСканированныхДокументов)
	
	МассивЭлементов = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(ОтборСписка, , "Контрагент");
	ОтборКонтрагент = МассивЭлементов[0];
	
	МассивЭлементов = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(ОтборСписка, , "СканированныйДокумент");
	ОтборСканированныйДокумент = МассивЭлементов[0];
	
	Если МассивКонтрагентов <> Неопределено Тогда
		// в том числе, если массив - пустой
		
		ОтборКонтрагент.Использование = Истина;
		
		Если МассивКонтрагентов.Количество() = 1 Тогда
			//всего один контрагент в массиве, вид сравнения Равно
			ОтборКонтрагент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
			ОтборКонтрагент.ПравоеЗначение = МассивКонтрагентов[0];
		Иначе
			//много контрагентов в массиве, вид сравнения ВСписке
			ОтборКонтрагент.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
			ОтборКонтрагент.ПравоеЗначение = МассивКонтрагентов;
		КонецЕсли;
		
	Иначе
		// не нужно накладывать отбор
		ОтборКонтрагент.Использование = Ложь;
		
	КонецЕсли;
	
	Если МассивСканированныхДокументов <> Неопределено Тогда
		// в том числе, если массив - пустой
		
		ОтборСканированныйДокумент.Использование = Истина;
		
		Если МассивСканированныхДокументов.Количество() = 1 Тогда
			//всего один сканированный документ в массиве, вид сравнения Равно
			ОтборСканированныйДокумент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
			ОтборСканированныйДокумент.ПравоеЗначение = МассивСканированныхДокументов[0];
		Иначе
			//много сканированных документов в массиве, вид сравнения ВСписке
			ОтборСканированныйДокумент.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
			ОтборСканированныйДокумент.ПравоеЗначение = МассивСканированныхДокументов;
		КонецЕсли;
		
	Иначе
		// не нужно накладывать отбор
		ОтборСканированныйДокумент.Использование = Ложь;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьСканированныеДокументыПоИННКПП(ОтборИНН, ОтборКПП = "")
	
	МассивСканированныхДокументов = Новый Массив;
	
	Запрос = Новый Запрос;
	
	Если СтрДлина(ОтборИНН) = 10 Тогда
		Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	СканированныеДокументыДляПередачиВЭлектронномВидеРеквизитыУчастников.Ссылка
		|ИЗ
		|	Справочник.СканированныеДокументыДляПередачиВЭлектронномВиде.РеквизитыУчастников КАК СканированныеДокументыДляПередачиВЭлектронномВидеРеквизитыУчастников
		|ГДЕ
		|	СканированныеДокументыДляПередачиВЭлектронномВидеРеквизитыУчастников.ЮрЛицоИНН = &ЮрЛицоИНН";
		
		Если ЗначениеЗаполнено(ОтборКПП) Тогда
		    Запрос.Текст = Запрос.Текст + "
				|	И СканированныеДокументыДляПередачиВЭлектронномВидеРеквизитыУчастников.ЮрЛицоКПП = &ЮрЛицоКПП";
			Запрос.УстановитьПараметр("ЮрЛицоКПП", ОтборКПП);
		КонецЕсли;
		
		Запрос.УстановитьПараметр("ЮрЛицоИНН", ОтборИНН);
		
	ИначеЕсли СтрДлина(ОтборИНН) = 12 Тогда
		
		Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	СканированныеДокументыДляПередачиВЭлектронномВидеРеквизитыУчастников.Ссылка
		|ИЗ
		|	Справочник.СканированныеДокументыДляПередачиВЭлектронномВиде.РеквизитыУчастников КАК СканированныеДокументыДляПередачиВЭлектронномВидеРеквизитыУчастников
		|ГДЕ
		|	СканированныеДокументыДляПередачиВЭлектронномВидеРеквизитыУчастников.ФизЛицоИНН = &ФизЛицоИНН";
		
		Запрос.УстановитьПараметр("ФизЛицоИНН", ОтборИНН);
		
	Иначе
		
		Возврат МассивСканированныхДокументов;
		
	КонецЕсли;
	
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		МассивСканированныхДокументов.Добавить(Выборка.Ссылка);
	КонецЦикла;
	
	Возврат МассивСканированныхДокументов;

КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьИННИзСтроки(ИННСтрока)
	
	КодПоиска = СокрЛП(ИННСтрока);
	
	КодПоискаТолькоЦифры = "";
	Для Индекс = 1 По СтрДлина(КодПоиска) Цикл
		Символ = Сред(КодПоиска, Индекс, 1);
		Если Не ЗначениеЗаполнено(Символ) Тогда
			Продолжить;
		КонецЕсли;
		Если СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Символ,, Ложь) Тогда
			КодПоискаТолькоЦифры = КодПоискаТолькоЦифры + Символ;
		Иначе
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	ДлинаСтроки = СтрДлина(КодПоискаТолькоЦифры);
	СтрокаПодсказки = "";
	
	Если ДлинаСтроки = 10 ИЛИ ДлинаСтроки = 12 Тогда
		Возврат КодПоискаТолькоЦифры;
	Иначе
		Возврат "";
	КонецЕсли;
	
КонецФункции

#Область Новости

&НаКлиенте
// Процедура показывает новости, требующие прочтения (важные и очень важные)
//
// Параметры:
//  Нет
//
Процедура Подключаемый_ПоказатьНовостиТребующиеПрочтенияПриОткрытии()

	// ИнтернетПоддержкаПользователей.Новости.Подключаемый_ПоказатьНовостиТребующиеПрочтенияПриОткрытии
	ИдентификаторыСобытийПриОткрытии = "ПриОткрытии";
	
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.Новости") Тогда
		
		МодульОбработкаНовостейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбработкаНовостейКлиент");
		
		МодульОбработкаНовостейКлиент.КонтекстныеНовости_ПоказатьНовостиТребующиеПрочтенияПриОткрытии(ЭтаФорма, ИдентификаторыСобытийПриОткрытии);
		
	КонецЕсли;
	// Конец ИнтернетПоддержкаПользователей.Новости.Подключаемый_ПоказатьНовостиТребующиеПрочтенияПриОткрытии

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаКомандыНовости(Команда)

	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.Новости") Тогда
		
		МодульОбработкаНовостейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбработкаНовостейКлиент");
		
		МодульОбработкаНовостейКлиент.КонтекстныеНовости_ОбработкаКомандыНовости(ЭтаФорма, Команда);
		
	КонецЕсли;

КонецПроцедуры

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

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

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