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