Списание безналичных денежных средств / Создание списаний безналичных денежных средств / Модуль формы

файл

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

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


					//-- Локализация
						ЗаполнитьТаблицуДокументовПоФизЛицам();
					//++ Локализация


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


			//-- Локализация
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиенте
Процедура СнятьФлажки(Команда)
	
	УстановитьФлажкиСтрок(Ложь);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ОткрытьЖурналДокументов(Команда)
	
	ПараметрыОтбора = Новый Структура("ДокументОснование", ДокументОснование); 
	ОткрытьФорму("Документ.СписаниеБезналичныхДенежныхСредств.ФормаСписка", ПараметрыОтбора, ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

//++ Локализация


//-- Локализация

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

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


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

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

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