Документы продажи / Форма созданные документы / Модуль формы

файл

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Принять(Команда)
	ВопросНепроведенныеДокументы();
КонецПроцедуры

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

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

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

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

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

#Область Прочее

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

&НаСервере
Процедура УстановитьЗаголовокФормы() 
	
	Заголовок = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(
		НСтр("ru=';Создан %1 документ;;Создано %1 документа;Создано %1 документов;Создано %1 документа'"), 
		СписокДокументов.Количество(),, "ЧН=0");
	
КонецПроцедуры

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

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

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

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

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

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

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

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