Ввод начальных остатков / Документы поступления / Модуль формы

файл

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

&НаКлиенте
Перем КэшированныеЗначения; //используется механизмом обработки изменения реквизитов ТЧ

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДетализацияПартийПартнерПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.ДетализацияПартий.ТекущиеДанные;
	ТекущаяСтрокаИдентификатор = ТекущиеДанные.ПолучитьИдентификатор();
	ПартнерПриИзменении(ТекущиеДанные.Партнер, ТекущиеДанные.Контрагент, ТекущаяСтрокаИдентификатор);
	
КонецПроцедуры

&НаКлиенте
Процедура ДетализацияПартийСуммаУпрПриИзменении(Элемент)
	
	РассчитатьНДСУпр();
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервере
Функция ПоместитьРезультатВоВременноеХранилище()
	
	Возврат ПоместитьВоВременноеХранилище(ДетализацияПартий.Выгрузить(), АдресВременногоХранилища);
	
КонецФункции

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

&НаСервере
Процедура УстановитьТекстДанныеПартии()
	
	ИтогНДСРегл = ДетализацияПартий.Итог("НДСРегл");
	ИтогСуммаРегл = ДетализацияПартий.Итог("СуммаРегл");
	
	Если НДСРегл <> 0 Тогда
		Шаблон = НСтр("ru = 'По партии ввода остатков будет отражена сумма (регл.) %1 НДС (регл.) %2'");
	Иначе
		Шаблон = НСтр("ru = 'По партии ввода остатков будет отражена сумма (регл.) %1'");
	КонецЕсли;
	
	Если ИтогНДСРегл > НДСРегл ИЛИ ИтогСуммаРегл > СуммаРегл Тогда
		Цвет = ЦветаСтиля.ПоясняющийОшибкуТекст;
	Иначе
		Цвет = ЦветаСтиля.ПоясняющийТекст;
	КонецЕсли;
	
	Если НДСРегл <> 0 Тогда
		ТекстДанныеПартии = Новый ФорматированнаяСтрока(
						СтрШаблон(Шаблон, Формат(СуммаРегл - ИтогСуммаРегл, "ЧДЦ=2"), Формат(НДСРегл - ИтогНДСРегл, "ЧДЦ=2")), 
						, 
						Цвет);
	Иначе
		ТекстДанныеПартии = Новый ФорматированнаяСтрока(
						СтрШаблон(Шаблон, Формат(СуммаРегл - ИтогСуммаРегл, "ЧДЦ=2")), 
						, 
						Цвет);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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