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

файл

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

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

					//++ НЕ УТ
					ИспользоватьНачислениеЗарплаты = Константы.ИспользоватьНачислениеЗарплаты.Получить();
					Если ИспользоватьНачислениеЗарплаты Тогда
						ЗаполнитьТаблицуДокументовПоВедомостямИзЗаявки();
					Иначе
					//-- НЕ УТ

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

					//++ НЕ УТ
					КонецЕсли;
					//-- НЕ УТ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

//++ НЕ УТ

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

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

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

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

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

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

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

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

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