Государственные контракты / Форма элемента / Модуль формы

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;
	
	МакетПоставляемыеДанные = Справочники.ГосударственныеКонтракты.ПолучитьМакет("ИдентификаторыИнформацииОЗакупке").ПолучитьТекст();
	ИдентификаторыИнформацииОЗакупке = ОбщегоНазначения.ПрочитатьXMLВТаблицу(МакетПоставляемыеДанные).Данные;
	
	КодСпособаОпределенияПоставщикаСписокВыбора = Элементы.КодСпособаОпределенияПоставщика.СписокВыбора;
	Для каждого СтрокаТаблицы Из ИдентификаторыИнформацииОЗакупке Цикл
		КодСпособаОпределенияПоставщикаСписокВыбора.Добавить(Число(СтрокаТаблицы.Код), "(" + СтрокаТаблицы.Код + ") " + СтрокаТаблицы.Наименование);
	КонецЦикла;

	// ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС
	ИспользуетсяНесколькоОрганизаций =
		ЭлектронноеАктированиеЕИСВызовСервера.ИспользуетсяНесколькоОрганизаций(); 

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

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

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

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
	// Конец СтандартныеПодсистемы.Свойства
	
КонецПроцедуры

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

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

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

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

	// ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС	
	СформироватьНаименованиеКонтракта();
	// Конец ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда)

	ЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект);
	
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
	 РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

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

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

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

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

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

&НаКлиенте
Процедура ДополнительныеРазрядыПриИзменении(Элемент)
	
	Объект.ДополнительныеРазряды = СтрЗаменить(Объект.ДополнительныеРазряды, " ", "0");
	
КонецПроцедуры

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

	СформироватьНаименованиеКонтракта(Истина);
	
КонецПроцедуры

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

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

&НаСервере
Процедура ДоговорОбработкаВыбораСервер(ИзменятьДоговор) 
	
	Если ИзменятьДоговор Тогда
		
		ДоговорКонтрагентаСсылка = ВладельцыКонтракта[0].Значение;
		
		РеквизитыДоговора = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДоговорКонтрагентаСсылка,"Организация,Контрагент");
		Объект.Организация = РеквизитыДоговора.Организация;
		Объект.Контрагент = РеквизитыДоговора.Контрагент;
		
		Попытка
			ЗаблокироватьДанныеДляРедактирования(ДоговорКонтрагентаСсылка);
			ДоговорКонтрагента = ДоговорКонтрагентаСсылка.ПолучитьОбъект(); // СправочникОбъект.ДоговорыКонтрагентов
			ДоговорКонтрагента.ГосударственныйКонтракт = Объект.Ссылка;
			ДоговорКонтрагента.ДоговорСУчастникомГОЗ = ЗначениеЗаполнено(Объект.НомерГОЗ);
			ДоговорКонтрагента.Записать();
		Исключение
			ТекстСообщения = СтрШаблон(
				НСтр("ru = 'Не удалось заблокировать элемент справочника: %1. Возможно, он редактируется другим пользователем.'"),
				ДоговорКонтрагентаСсылка);
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
		КонецПопытки;
		
	КонецЕсли;
	
	УправлениеФормой(ЭтотОбъект);
	ОбновитьИнформациюПоДоговорам();
	
КонецПроцедуры

&НаКлиенте
Процедура НомерГОЗПриИзменении(Элемент)
	
	ОписаниеТипаДата = Новый ОписаниеТипов("Дата");
	
	Если ЗначениеЗаполнено(Объект.НомерГОЗ) Тогда
		Объект.ДатаЗаключения                   = ОписаниеТипаДата.ПривестиЗначение("20" + Лев(Объект.НомерГОЗ, 2) + "0101");
		Объект.ГодЗаключения                    = "20" + Лев(Объект.НомерГОЗ, 2);
		Объект.ГодОкончанияСрокаДействия        = "20" + Сред(Объект.НомерГОЗ, 3, 2);
		Объект.КодГосударственногоЗаказчика     = Сред(Объект.НомерГОЗ, 5, 3);
		Объект.КодСпособаОпределенияПоставщика  = Сред(Объект.НомерГОЗ, 8, 1);
		Объект.ПорядковыйНомер                  = Сред(Объект.НомерГОЗ, 9, 4);
		Объект.ВидЦены                          = Сред(Объект.НомерГОЗ, 13, 1);
		Объект.ДополнительныеРазряды            = Сред(Объект.НомерГОЗ, 14, 12);
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ТипНаправленияДеятельностиПриИзменении(Элемент)

	ТипНаправленияДеятельностиПриИзмененииНаСервере();

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

&НаСервере
Процедура ТипНаправленияДеятельностиПриИзмененииНаСервере()

	УстановитьВидимостьЭлементов();
	ОбработчикЭтоКонтрактГОЗПриИзменении(ЭтаФорма);

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

&НаКлиенте
Процедура НомерРеестровойЗаписиПриИзменении(Элемент)
	
	СформироватьНаименованиеКонтракта(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура НомерПриИзменении(Элемент)
	
	СформироватьНаименованиеКонтракта(Истина);
	
КонецПроцедуры 

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

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

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

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

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

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

&НаКлиенте
Процедура ДеревоОбъектовНоменклатураПартнераПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.ДеревоОбъектов.ТекущиеДанные;
	Если ЗначениеЗаполнено(ТекущиеДанные.НоменклатураПартнера) Тогда
		ДанныеНоменклатурыПартнера = ДанныеНоменклатурыПартнера(ТекущиеДанные.НоменклатураПартнера);	
		ТекущиеДанные.Номенклатура = ДанныеНоменклатурыПартнера.Номенклатура;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДеревоОбъектовПриАктивизацииСтроки(Элемент)
	
	Если Элемент.ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
		
КонецПроцедуры

&НаКлиенте
Процедура ДеревоОбъектовПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
	
	Если ОтменаРедактирования Тогда
		Возврат;
	КонецЕсли; 
	
КонецПроцедуры

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

&НаКлиенте
Процедура ДеревоОбъектовПриИзменении(Элемент)
	
	Модифицированность = Истина;
	
КонецПроцедуры

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


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

&НаКлиенте
Процедура ПолучитьИзЕИС(Команда)
	
	ПолучитьИзЕИСНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ПолучитьИзОткрытойЧастиЕИС(Команда)
	
	ПолучитьИзОткрытойЧастиЕИСНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьДоговор(Команда)
	
	СоздатьДоговорНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура СохранитьКонтрактВФайл(Команда)
	
	Адрес = АдресДанныхКонтракта();
	
	Если ЗначениеЗаполнено(Адрес) Тогда
		ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, Адрес);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПрочитатьИзФайла(Команда)
	
	Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
		ОписаниеОшибки = НСтр("ru='Не заполнена организация.'");
		ОбщегоНазначенияКлиент.СообщитьПользователю(ОписаниеОшибки, , , "Объект.Организация");
		Возврат;
	КонецЕсли;
	
	Оповещение = Новый ОписаниеОповещения("ПрочитатьИзФайлаПослеЗагрузки", ЭтотОбъект);
	ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
	ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
	ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Файлы контрактов (*.xml)|*.xml|Все файлы (*.*)|*.*'");
	ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки);
	
КонецПроцедуры

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

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

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

// ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС	

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

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

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

	Если ЗначениеЗаполнено(Форма.Объект.ВнутреннийИдентификаторЕИС) Тогда
		ИнтеграцияСЕИС = Истина;
	Иначе
		ИнтеграцияСЕИС = Ложь;
	КонецЕсли;
	
	Элементы.ГруппаОбъектыЗакупки.Видимость = ИнтеграцияСЕИС; 
	Элементы.ГруппаЭтапыИсполнения.Видимость = ИнтеграцияСЕИС; 
	Элементы.ГруппаПрочее.Видимость = ИнтеграцияСЕИС;
	Элементы.ТекстЗагруженИзЕИС.Видимость = ИнтеграцияСЕИС;
	Элементы.КнопкаПолучитьИзЕИС.Видимость = ИнтеграцияСЕИС;
	Элементы.ФормаСохранитьКонтрактВФайл.Видимость = ИнтеграцияСЕИС;
	Элементы.ФормаПрочитатьИзФайла.Видимость = ИнтеграцияСЕИС;

	ОбработчикЭтоКонтрактГОЗПриИзменении(Форма);
	
КонецПроцедуры

&НаКлиенте
Процедура ПересчитатьСумму()
	
	ТекущиеДанные = Элементы.ДеревоОбъектов.ТекущиеДанные;
	ТекущиеДанные.Сумма = ТекущиеДанные.Количество * ТекущиеДанные.Цена;
	
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция НастройкиОбменаЕИСПоставщика(Организация)
	
	НастройкаПоставщика = ЭлектронноеАктированиеЕИС.НастройкиОбменаЕИС(Организация);
	Возврат НастройкаПоставщика;
	
КонецФункции

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

&НаСервереБезКонтекста
Функция ТекстСсылкиДанныеСтрокиКонтракта()
	
	Возврат "Открыть"
	
КонецФункции

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

&НаСервере
Процедура СформироватьНаименованиеКонтракта(Перезаполнить = Ложь)
	
	Если НЕ ЗначениеЗаполнено(Объект.Наименование) ИЛИ Перезаполнить Тогда
		Шаблон = НСтр("ru='РК %1 №%2 от %3'");
		ДатаСтрока = Формат(Объект.ДатаЗаключения, "ДЛФ=D;");
		Представление = СтрШаблон(Шаблон, Объект.РеестровыйНомерКонтракта, Объект.Номер, ДатаСтрока);
		Объект.Наименование = Представление;
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаСервере
Процедура ПолучитьИзОткрытойЧастиЕИСНаСервере()
	
	Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
		ОписаниеОшибки = НСтр("ru='Не заполнена организация.'");
		ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки, , , "Объект.Организация");
		Возврат;
	КонецЕсли;
	
	Если НЕ ПроверитьРеестровыйНомер() Тогда
		Возврат;
	КонецЕсли;
	
	СсылкаДляЗагрузки = "https://zakupki.gov.ru/epz/contract/printForm/"
		+ "viewXml.html?contractReestrNumber=" + Объект.РеестровыйНомерКонтракта;
	РезультатЗагрузки = ПолучениеФайловИзИнтернета.СкачатьФайлВоВременноеХранилище(
		СсылкаДляЗагрузки);
	Если НЕ РезультатЗагрузки.Статус Тогда
		ОписаниеОшибки = НСтр("ru = 'При загрузке контракта с сервера ЕИС возникла ошибка:'")
			+ Символы.ПС + РезультатЗагрузки.СообщениеОбОшибке;
		ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки);
		Возврат;
	КонецЕсли;
	
	АдресДанныхКонтракта = РезультатЗагрузки.Путь;
	
	НастройкиПоставщика = ЭлектронноеАктированиеЕИС.НастройкиОбменаЕИС(Объект.Организация);
	НастройкиЗаказчика = ЭлектронноеАктированиеЕИС.НастройкиОбменаЕИСЗаказчика(Объект.Организация);
	ЭтоКонтрактДляЗаказчика = НастройкиПоставщика = Неопределено ИЛИ НЕ НастройкиЗаказчика = Неопределено;
	ЗаполнитьИзДанныхКонтракта(АдресДанныхКонтракта, Объект.Код, ЭтоКонтрактДляЗаказчика);
	
	ПослеЗаполненияДанныхКонтрактаИзВнешнегоИсточника();
	
КонецПроцедуры

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

	ТолькоЦифры = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Объект.РеестровыйНомерКонтракта, , Истина);
	Если НЕ ТолькоЦифры Тогда
		ОписаниеОшибки = НСтр("ru='Реестровый номер может содержать только цифры.'");
		ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки, , , "Объект.РеестровыйНомерКонтракта");
		Возврат Результат;
	КонецЕсли;
	
	Возврат Истина;
	
КонецФункции 

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

&НаСервере
Процедура ПослеЗаполненияДанныхКонтрактаИзВнешнегоИсточника()

	СформироватьНаименованиеКонтракта(Истина);

	Записать();
	
	ЭлектронноеАктированиеЕИС.ПослеЗагрузкиКонтрактаИзЕИС(Объект.Ссылка);
	
	ЗаполнитьДеревоОбъектовЗакупки();
	
	УправлениеФормой(ЭтотОбъект);
		
КонецПроцедуры

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

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

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

// Конец ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС
	
// СтандартныеПодсистемы.Свойства
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
	
	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
	
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
	
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
	
КонецПроцедуры
// Конец СтандартныеПодсистемы.Свойства

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

&НаСервере
Функция ОбновитьИнформациюПоДоговорам()
	
	МассивСтрок = Новый Массив();
	
	ВладельцыКонтракта = ЭлектронноеАктированиеЕИСУТ.ПолучитьВсеДоговораГосконтракта(Объект.Ссылка);
	
	Если ВладельцыКонтракта.Количество() = 0 Тогда
		МассивСтрок.Добавить(
			Новый ФорматированнаяСтрока(НСтр("ru = 'Выбрать договор контрагента'"), , WebЦвета.Кирпичный, , "ВыбратьДоговор"));
	ИначеЕсли ВладельцыКонтракта.Количество() = 1 Тогда
		МассивСтрок.Добавить(
			Новый ФорматированнаяСтрока(Строка(ВладельцыКонтракта[0].Значение), , ЦветаСтиля.ГиперссылкаЦвет, , ПолучитьНавигационнуюСсылку(ВладельцыКонтракта[0].Значение)));
	Иначе
		ТекстПокупателей = ОбщегоНазначенияУТКлиентСервер.СклонениеСлова(
				ВладельцыКонтракта.Количество(),
				НСтр("ru = 'договор с контрагентом, договора с контрагентами, договоров с контрагентами, м'"));
		Текст = СтрШаблон(НСтр("ru = 'Выбрано %1 %2'"), ВладельцыКонтракта.Количество(), ТекстПокупателей);
		МассивСтрок.Добавить(
			Новый ФорматированнаяСтрока(Текст, , ЦветаСтиля.ГиперссылкаЦвет, , "ОткрытьФормуДоговора"));
	КонецЕсли;
	
	ТекстВладельцыКонтракта = Новый ФорматированнаяСтрока(МассивСтрок);
	
КонецФункции

&НаСервере
Процедура УстановитьВидимостьЭлементов()

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

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

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