Авансовый отчет / Подбор документов закупки / Модуль формы

файл

#Область ОписаниеПеременных

&НаКлиенте
Перем ВыполняетсяЗакрытие;

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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	РассчитатьИтоги();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВыбратьСтроки(Команда)
	
	ВыбратьСтрокиСервере(Истина);
	РассчитатьИтоги();
	
КонецПроцедуры

&НаКлиенте
Процедура ИсключитьСтроки(Команда)
	
	ВыбратьСтрокиСервере(Ложь);
	РассчитатьИтоги();
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаДокументовЗакупкиПредставлениеДокументаЗакупки.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаДокументовЗакупки.ДокументЗакупки");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаДокументовЗакупки.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаДокументовЗакупки.ПрисутствуетВДокументе");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Gray);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаДокументовЗакупкиСумма.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаДокументовЗакупки.Валюта");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Мультивалютный>'"));
	
КонецПроцедуры

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

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

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

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

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

&НаСервере
Функция ПоместитьВХранилище(ВыбранныеДокументы)
	
	Возврат ПоместитьВоВременноеХранилище(ВыбранныеДокументы);
	
КонецФункции

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

//++ Локализация
#Область Локализация

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

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

#КонецОбласти
//-- Локализация

#Область Инициализация

ВыполняетсяЗакрытие = Ложь;

//++ Локализация
#Если НаСервере Тогда

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

#КонецЕсли
//-- Локализация

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

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