#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
УстановитьУсловноеОформление();
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
ПриЧтенииСозданииНаСервере();
КонецЕсли;
УстановитьВидимостьЭлементов();
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ПриЧтенииСозданииНаСервере();
МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
ПараметрыГрафика = Новый Структура;
ПараметрыГрафика.Вставить("Договор", Объект.Договор);
ПараметрыГрафика.Вставить("СуммаДоговора", СуммаДоговора);
Оповестить("Запись_ГрафикИсполненияДоговора", ПараметрыГрафика, Объект.Ссылка);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормыГрафик
&НаКлиенте
Процедура СуммаДоговораПриИзменении(Элемент)
ПересчитатьПроценты(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ДлительностьДоставкиПриИзменении(Элемент)
Для Каждого СтрокаИсполнения Из Объект.ЭтапыГрафикаИсполненияДоговора Цикл
СтрокаИсполнения.ДатаПоГрафику = СтрокаИсполнения.ДатаОтгрузки + 86400 * Объект.ДлительностьДоставки;
КонецЦикла;
УстановитьВидимостьЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура РежимУчетаОтсрочкиПриИзменении(Элемент)
Если РежимУчетаОтсрочки Тогда
ЗаполнитьПроизводственныйКалендарьНаСервере()
Иначе
Объект.Календарь = ПредопределенноеЗначение("Справочник.ПроизводственныеКалендари.ПустаяСсылка");
КонецЕсли;
Элементы.Календарь.Видимость = РежимУчетаОтсрочки;
Для Каждого СтрокаГрафика Из Объект.ЭтапыГрафикаОплаты Цикл
ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыСдвигВариантОтсчетаПриИзменении(СтрокаГрафика,
ДатаДоговора,
ДатаДоговора,
СтрокаГрафика.ДатаОтгрузки,
Объект.ДлительностьДоставки,
Дата(1,1,1),
Объект.Календарь);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура КалендарьПриИзменении(Элемент)
Для Каждого СтрокаГрафика Из Объект.ЭтапыГрафикаОплаты Цикл
ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыСдвигВариантОтсчетаПриИзменении(СтрокаГрафика,
ДатаДоговора,
ДатаДоговора,
СтрокаГрафика.ДатаОтгрузки,
Объект.ДлительностьДоставки,
Дата(1,1,1),
Объект.Календарь);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ГрафикЧастичноИсполненПриИзменении(Элемент)
УстановитьВидимостьЭлементов();
Если Не Объект.ГрафикЧастичноИсполнен Тогда
Для Каждого СтрокаЭтапа Из Объект.ЭтапыГрафикаИсполненияДоговора Цикл
СтрокаЭтапа.УжеОтгружено = Ложь;
КонецЦикла;
Для Каждого СтрокаЭтапа Из Объект.ЭтапыГрафикаОплаты Цикл
СтрокаЭтапа.УжеОплачено = Ложь;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаИсполненияДоговораПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ТекущиеДанные = Элементы.ЭтапыГрафикаИсполненияДоговора.ТекущиеДанные;
ЕстьЭтапыОтДатыОтгрузки = Ложь;
Для Каждого Стр Из Объект.ЭтапыГрафикаОплаты Цикл
Если Стр.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ДоДатыОтгрузки")
ИЛИ Стр.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ОтДатыОтгрузки")
ИЛИ Стр.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ОтДатыПереходаПраваСобственности") Тогда
ЕстьЭтапыОтДатыОтгрузки = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ТекущиеДанные <> Неопределено
И НЕ ОтменаРедактирования
И ЕстьЭтапыОтДатыОтгрузки
И Объект.ЭтапыГрафикаОплаты.Количество() > 0
И (ТипЗнч(РедактируемаяСтрока) = Тип("Структура")
И (РедактируемаяСтрока.ПроцентИсполнения <> ТекущиеДанные.ПроцентИсполнения
ИЛИ РедактируемаяСтрока.СуммаИсполнения <> ТекущиеДанные.СуммаИсполнения
ИЛИ РедактируемаяСтрока.ДатаПоГрафику <> ТекущиеДанные.ДатаПоГрафику)
ИЛИ НоваяСтрока
И (ЗначениеЗаполнено(ТекущиеДанные.ДатаПоГрафику)
ИЛИ ЗначениеЗаполнено(ТекущиеДанные.ПроцентИсполнения)
ИЛИ ЗначениеЗаполнено(ТекущиеДанные.СуммаИсполнения))) Тогда
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("СтрокаЭтапа",Элементы.ЭтапыГрафикаИсполненияДоговора.ТекущаяСтрока);
ДополнительныеПараметры.Вставить("ДатаПоГрафику", ТекущиеДанные.ДатаПоГрафику);
ДополнительныеПараметры.Вставить("СуммаИсполнения",ТекущиеДанные.СуммаИсполнения);
ДополнительныеПараметры.Вставить("ПроцентИсполнения",ТекущиеДанные.ПроцентИсполнения);
ТекстВопроса = НСтр("ru = 'График оплаты будет очищен, продолжить?'");
ПоказатьВопрос(
Новый ОписаниеОповещения("ЭтапыГрафикаИсполненияДоговораПриОкончанииРедактированияЗавершение", ЭтотОбъект, ДополнительныеПараметры),
ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Иначе
СвернутьЭтапыИсполнения();
СортироватьЭтапыИсполнения();
РассчитатьИтоговыеПоказатели(ЭтаФорма);
КонецЕсли;
Если Объект.ЭтапыГрафикаИсполненияДоговора.Количество() = 1
И ТекущиеДанные <> Неопределено Тогда
ДатаОтгрузки= ТекущиеДанные.ДатаОтгрузки;
Иначе
ДатаОтгрузки = Дата(1,1,1);
КонецЕсли;
Если ДатаОтгрузкиПоУмолчанию <> ДатаОтгрузки Тогда
ДатаОтгрузкиПоУмолчанию = ДатаОтгрузки;
ЗаполнитьДатыОтгрузки();
КонецЕсли;
УстановитьЗаголовкиГрафикЧастичноИсполнен();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаИсполненияДоговораПриОкончанииРедактированияЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.Нет Тогда
СтрокаЭтапа = Объект.ЭтапыГрафикаИсполненияДоговора.НайтиПоИдентификатору(ДополнительныеПараметры.СтрокаЭтапа);
Если РедактируемаяСтрока = Неопределено Тогда
Объект.ЭтапыГрафикаИсполненияДоговора.Удалить(СтрокаЭтапа);
Иначе
СтрокаЭтапа.ПроцентИсполнения = РедактируемаяСтрока.ПроцентИсполнения;
СтрокаЭтапа.СуммаИсполнения = РедактируемаяСтрока.СуммаИсполнения;
СтрокаЭтапа.ДатаПоГрафику = РедактируемаяСтрока.ДатаПоГрафику;
СтрокаЭтапа.ДатаОтгрузки = СтрокаЭтапа.ДатаПоГрафику - 86400 * Объект.ДлительностьДоставки;
КонецЕсли;
СвернутьЭтапыИсполнения();
СортироватьЭтапыИсполнения();
РассчитатьИтоговыеПоказатели(ЭтаФорма);
Иначе
Объект.ЭтапыГрафикаОплаты.Очистить();
РассчитатьИтоговыеПоказатели(ЭтаФорма);
УстановитьВидимостьЭлементов();
УстановитьЗаголовкиГрафикЧастичноИсполнен();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаИсполненияДоговораПроцентИсполненияПриИзменении(Элемент)
ТекущиеДанные = Элементы.ЭтапыГрафикаИсполненияДоговора.ТекущиеДанные;
Если ТекущиеДанные.ПроцентИсполнения > 0 И Объект.ЭтапыГрафикаИсполненияДоговора.Итог("ПроцентИсполнения") = 100 Тогда
СуммаИсполнения = 0;
Для Каждого ТекСтрока Из Объект.ЭтапыГрафикаИсполненияДоговора Цикл
Если ТекСтрока.НомерСтроки <> ТекущиеДанные.НомерСтроки Тогда
СуммаИсполнения = СуммаИсполнения + ТекСтрока.СуммаИсполнения;
КонецЕсли;
КонецЦикла;
ТекущиеДанные.СуммаИсполнения = СуммаДоговора - СуммаИсполнения;
Иначе
ТекущиеДанные.СуммаИсполнения = СуммаДоговора * ТекущиеДанные.ПроцентИсполнения / 100;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаИсполненияДоговораСуммаИсполненияПриИзменении(Элемент)
ТекущиеДанные = Элементы.ЭтапыГрафикаИсполненияДоговора.ТекущиеДанные;
ПересчитатьПроценты(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаИсполненияДоговораДатаОтгрузкиПриИзменении(Элемент)
ТекущиеДанные = Элементы.ЭтапыГрафикаИсполненияДоговора.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ТекущиеДанные.ДатаПоГрафику = ТекущиеДанные.ДатаОтгрузки + 86400 * Объект.ДлительностьДоставки;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыСдвигПриИзменении(Элемент)
ТекущиеДанные = Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные;
ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыСдвигВариантОтсчетаПриИзменении(
ТекущиеДанные,
ДатаДоговора,
ДатаДоговора,
ТекущиеДанные.ДатаОтгрузки,
Объект.ДлительностьДоставки,
Дата(1,1,1),
Объект.Календарь);
СортироватьЭтапыОплаты();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыВариантОтсчетаПриИзменении(Элемент)
ТекущиеДанные = Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные;
Если (ТекущиеДанные.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ДоДатыОтгрузки")
ИЛИ ТекущиеДанные.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ОтДатыОтгрузки")
ИЛИ ТекущиеДанные.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ОтДатыПереходаПраваСобственности"))
И НЕ ЗначениеЗаполнено(ТекущиеДанные.ДатаОтгрузки) Тогда
ТекущиеДанные.ДатаОтгрузки = ДатаОтгрузкиПоУмолчанию;
ИначеЕсли (ТекущиеДанные.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ОтДатыЗаказа")
ИЛИ ТекущиеДанные.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ОтДатыСогласования"))
И ЗначениеЗаполнено(ТекущиеДанные.ДатаОтгрузки) Тогда
ТекущиеДанные.ДатаОтгрузки = Дата(1,1,1);
КонецЕсли;
ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыСдвигВариантОтсчетаПриИзменении(
ТекущиеДанные,
ДатаДоговора,
ДатаДоговора,
ТекущиеДанные.ДатаОтгрузки,
Объект.ДлительностьДоставки,
Дата(1,1,1),
Объект.Календарь);
СортироватьЭтапыОплаты();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыВариантОплатыПриИзменении(Элемент)
ТекущиеДанные = Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные;
ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыВариантКонтроляПриИзменении(
ТекущиеДанные,
ДатаДоговора,
ДатаДоговора,
ТекущиеДанные.ДатаОтгрузки,
Объект.ДлительностьДоставки,
Дата(1,1,1),
Объект.Календарь);
СортироватьЭтапыОплаты();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыПроцентОплатыПриИзменении(Элемент)
ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыПроцентПлатежаПриИзменении(
Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные,
Объект.ЭтапыГрафикаОплаты,
СуммаДоговора);
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыСуммаОплатыПриИзменении(Элемент)
ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыСуммаПлатежаПриИзменении(
Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные,
Объект.ЭтапыГрафикаОплаты,
СуммаДоговора);
ПересчитатьПроценты(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ОтДатыЗаказа");
Если ЭтоРасчетыСКлиентами Тогда
Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные.ВариантОплаты = ПредопределенноеЗначение("Перечисление.ВариантыКонтроляОплатыКлиентом.КредитСдвиг");
Иначе
Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные.ВариантОплаты = ПредопределенноеЗначение("Перечисление.ВариантыКонтроляОплатыПоставщику.КредитСдвиг");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыДатаПоГрафикуПриИзменении(Элемент)
ТекущиеДанные = Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные;
ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыДатаПлатежаПриИзменении(
ТекущиеДанные,
ДатаДоговора,
ДатаДоговора,
ТекущиеДанные.ДатаОтгрузки,
Объект.ДлительностьДоставки,
Дата(1,1,1),
Объект.Календарь);
СортироватьЭтапыОплаты();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыУжеОплаченоПриИзменении(Элемент)
УстановитьЗаголовкиГрафикЧастичноИсполнен();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Объект);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ПриЧтенииСозданииНаСервере()
Если ЗначениеЗаполнено(Объект.Договор) Тогда
РеквизитыДоговора = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Договор, "Сумма,ТипДоговора,Дата,Контрагент,ВалютаВзаиморасчетов");
СуммаДоговора = РеквизитыДоговора.Сумма;
ЭтоРасчетыСКлиентами =
РеквизитыДоговора.ТипДоговора = Перечисления.ТипыДоговоров.СПокупателем
Или Ложь;
ДатаДоговора = РеквизитыДоговора.Дата;
Контрагент = РеквизитыДоговора.Контрагент;
Валюта = РеквизитыДоговора.ВалютаВзаиморасчетов;
Элементы.ЭтапыГрафикаОплатыВариантОтсчета.СписокВыбора.Добавить(Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыЗаказа, НСтр("ru = 'от даты договора'"));
Элементы.ЭтапыГрафикаОплатыВариантОтсчета.СписокВыбора.Добавить(Перечисления.ВариантыОтсчетаДатыПлатежа.ДоДатыОтгрузки);
Элементы.ЭтапыГрафикаОплатыВариантОтсчета.СписокВыбора.Добавить(Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыОтгрузки);
Если ЭтоРасчетыСКлиентами Тогда
Элементы.ЭтапыГрафикаОплатыВариантОплаты.СписокВыбора.Добавить(Перечисления.ВариантыКонтроляОплатыКлиентом.ПредоплатаДоОтгрузки);
Элементы.ЭтапыГрафикаОплатыВариантОплаты.СписокВыбора.Добавить(Перечисления.ВариантыКонтроляОплатыКлиентом.КредитСдвиг);
Элементы.ЭтапыГрафикаОплатыВариантОплаты.СписокВыбора.Добавить(Перечисления.ВариантыКонтроляОплатыКлиентом.КредитПослеОтгрузки);
Если ПолучитьФункциональнуюОпцию("ИспользоватьОтгрузкуБезПереходаПраваСобственности2_0") Тогда
Элементы.ЭтапыГрафикаОплатыВариантОтсчета.СписокВыбора.Добавить(Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыПереходаПраваСобственности);
КонецЕсли;
Иначе
Элементы.ЭтапыГрафикаОплатыВариантОплаты.СписокВыбора.Добавить(Перечисления.ВариантыКонтроляОплатыПоставщику.ПредоплатаДоПоступления);
Элементы.ЭтапыГрафикаОплатыВариантОплаты.СписокВыбора.Добавить(Перечисления.ВариантыКонтроляОплатыПоставщику.КредитСдвиг);
Элементы.ЭтапыГрафикаОплатыВариантОплаты.СписокВыбора.Добавить(Перечисления.ВариантыКонтроляОплатыПоставщику.КредитПослеПоступления);
КонецЕсли;
КонецЕсли;
УстановитьУсловноеОформление();
РассчитатьИтоговыеПоказатели(ЭтаФорма);
ЗаполнитьДатыОтгрузки();
УстановитьЗаголовкиГрафикЧастичноИсполнен();
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаОплатыПроцентОплаты.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЭтапыГрафикаОплаты.ПроцентОплатыЗаполненНеВерно");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.FireBrick);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаИсполненияДоговораПроцентИсполнения.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЭтапыГрафикаИсполненияДоговора.ПроцентИсполненияЗаполненНеВерно");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.FireBrick);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаОплатыВариантОтсчета.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЭтапыГрафикаОплаты.ВариантОтсчета");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыЗаказа;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='от даты договора'"));
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЭлементов()
Элементы.ДлительностьДоставки.Видимость = НЕ ЭтоРасчетыСКлиентами;
Элементы.ЗаполнитьГрафикОплатыПоСоглашению.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") И ЭтоРасчетыСКлиентами
ИЛИ ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСПоставщиками") И НЕ ЭтоРасчетыСКлиентами;
Если ЭтоРасчетыСКлиентами Тогда
Элементы.ЭтапыГрафикаИсполненияДоговораДатаПоГрафику.Видимость = Ложь;
Иначе
Элементы.ЭтапыГрафикаИсполненияДоговораДатаПоГрафику.Видимость = Объект.ДлительностьДоставки <> 0;
КонецЕсли;
РежимУчетаОтсрочки = ЗначениеЗаполнено(Объект.Календарь);
Элементы.Календарь.Видимость = РежимУчетаОтсрочки;
Элементы.ЭтапыГрафикаИсполненияДоговораУжеОтгружено.Видимость = Объект.ГрафикЧастичноИсполнен;
Элементы.ЭтапыГрафикаОплатыУжеОплачено.Видимость = Объект.ГрафикЧастичноИсполнен;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьИтоговыеПоказатели(Форма)
Форма.ПроцентОплатОбщий = 0;
Форма.ПроцентИсполненияОбщий = 0;
Для Каждого ТекСтрока Из Форма.Объект.ЭтапыГрафикаИсполненияДоговора Цикл
Форма.ПроцентИсполненияОбщий = Форма.ПроцентИсполненияОбщий + ТекСтрока.ПроцентИсполнения;
ТекСтрока.ПроцентИсполненияЗаполненНеверно = (Форма.ПроцентИсполненияОбщий > 100);
Если Форма.ПроцентИсполненияОбщий = 100 Тогда
Форма.НомерСтрокиПолногоИсполнения = ТекСтрока.НомерСтроки;
КонецЕсли;
КонецЦикла;
Для Каждого ТекСтрока Из Форма.Объект.ЭтапыГрафикаОплаты Цикл
Форма.ПроцентОплатОбщий = Форма.ПроцентОплатОбщий + ТекСтрока.ПроцентПлатежа;
ТекСтрока.ПроцентОплатыЗаполненНеверно = (Форма.ПроцентОплатОбщий > 100);
Если Форма.ПроцентОплатОбщий = 100 Тогда
Форма.НомерСтрокиПолнойОплаты = ТекСтрока.НомерСтроки;
КонецЕсли;
КонецЦикла;
Форма.НесколькоДатОтгрузки = Форма.Объект.ЭтапыГрафикаИсполненияДоговора.Количество() > 1;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ПересчитатьПроценты(Форма)
Если Форма.СуммаДоговора <> 0 Тогда
ПроцентИсполнения = Окр(Форма.Объект.ЭтапыГрафикаИсполненияДоговора.Итог("СуммаИсполнения") * 100 / Форма.СуммаДоговора, 2);
МассивЭтапов = Новый Массив();
Для Каждого ЭтапГрафика Из Форма.Объект.ЭтапыГрафикаИсполненияДоговора Цикл
МассивЭтапов.Добавить(ЭтапГрафика.СуммаИсполнения);
КонецЦикла;
Если МассивЭтапов.Количество() > 0 Тогда
МассивПроцентов = ОбщегоНазначенияУТКлиентСервер.РаспределитьПропорционально(ПроцентИсполнения, МассивЭтапов);
Для Счетчик = 0 По МассивЭтапов.Количество() - 1 Цикл
Если МассивПроцентов <> Неопределено Тогда
Форма.Объект.ЭтапыГрафикаИсполненияДоговора[Счетчик].ПроцентИсполнения = МассивПроцентов[Счетчик];
Иначе
Форма.Объект.ЭтапыГрафикаИсполненияДоговора[Счетчик].ПроцентИсполнения = 0;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПроцентОплаты = Окр(Форма.Объект.ЭтапыГрафикаОплаты.Итог("СуммаПлатежа") * 100 / Форма.СуммаДоговора, 2);
МассивЭтапов.Очистить();
Для Каждого ЭтапГрафика Из Форма.Объект.ЭтапыГрафикаОплаты Цикл
МассивЭтапов.Добавить(ЭтапГрафика.СуммаПлатежа);
КонецЦикла;
Если МассивЭтапов.Количество() > 0 Тогда
МассивПроцентов = ОбщегоНазначенияУТКлиентСервер.РаспределитьПропорционально(ПроцентОплаты, МассивЭтапов);
Для Счетчик = 0 По МассивЭтапов.Количество() - 1 Цикл
Если МассивПроцентов <> Неопределено Тогда
Форма.Объект.ЭтапыГрафикаОплаты[Счетчик].ПроцентПлатежа = МассивПроцентов[Счетчик];
Иначе
Форма.Объект.ЭтапыГрафикаОплаты[Счетчик].ПроцентПлатежа = 0;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьГрафикОплатыПоСоглашению(Команда)
Оповещение = Новый ОписаниеОповещения("ЗаполнитьГрафикОплатыПоСоглашениюЗавершение", ЭтотОбъект);
ПараметрыОткрытия = Новый Структура("Контрагент",Контрагент);
Если ЭтоРасчетыСКлиентами Тогда
ОткрытьФорму("Справочник.СоглашенияСКлиентами.Форма.ФормаВыбора",ПараметрыОткрытия,ЭтаФорма,,,,Оповещение);
Иначе
ОткрытьФорму("Справочник.СоглашенияСПоставщиками.Форма.ФормаВыбора",ПараметрыОткрытия,ЭтаФорма,,,,Оповещение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьГрафикОплатыПоСоглашениюЗавершение(Результат, Параметры) Экспорт
Если Результат <> Неопределено Тогда
ЗаполнитьГрафикОплатыПоСоглашениюНаСервере(Результат);
Модифицированность = Истина;
КонецЕсли;
СортироватьЭтапыОплаты();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьГрафикОплатыПоСоглашениюНаСервере(Результат)
ПараметрыЗаполненияЭтапов = ЭтапыОплатыСервер.ПараметрыЗаполненияЭтаповОплаты();
ПараметрыЗаполненияЭтапов.НакладнаяПоЗаказам = Ложь;
ПараметрыЗаполненияЭтапов.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов;
ПараметрыЗаполненияЭтапов.ЭтоЗаказ = Истина;
ПараметрыЗаполненияЭтапов.ДатаЗаказа = ДатаДоговора;
Если Объект.ЭтапыГрафикаИсполненияДоговора.Количество() > 1 Тогда
ТЗ = Объект.ЭтапыГрафикаИсполненияДоговора.Выгрузить();
ТЗ.Колонки.СуммаИсполнения.Имя = "СуммаПлатежа";
ПараметрыЗаполненияЭтапов.ДатаОтгрузки = ТЗ;
ИначеЕсли Объект.ЭтапыГрафикаИсполненияДоговора.Количество() = 1 Тогда
ПараметрыЗаполненияЭтапов.ДатаОтгрузки = Объект.ЭтапыГрафикаИсполненияДоговора[0].ДатаОтгрузки;
КонецЕсли;
ПараметрыЗаполненияЭтапов.Соглашение = Результат;
ПараметрыЗаполненияЭтапов.СуммаОплаты = СуммаДоговора;
ПараметрыЗаполненияЭтапов.ЭтоРасчетыСКлиентами = ЭтоРасчетыСКлиентами;
ЭтапыОплатыСервер.ЗаполнитьЭтапыОплатыПоСоглашению(Объект.ЭтапыГрафикаОплаты, ПараметрыЗаполненияЭтапов);
Объект.Календарь = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Результат,"Календарь");
Для Каждого Стр Из Объект.ЭтапыГрафикаОплаты Цикл
Если Стр.ВариантОплаты = Перечисления.ВариантыКонтроляОплатыКлиентом.АвансДоОбеспечения Тогда
Стр.ВариантОплаты = Перечисления.ВариантыКонтроляОплатыКлиентом.ПредоплатаДоОтгрузки;
КонецЕсли;
Если Стр.ВариантОплаты = Перечисления.ВариантыКонтроляОплатыПоставщику.АвансДоПодтверждения Тогда
Стр.ВариантОплаты = Перечисления.ВариантыКонтроляОплатыПоставщику.ПредоплатаДоПоступления;
КонецЕсли;
Если Стр.ВариантОтсчета = Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыСогласования Тогда
Стр.ВариантОтсчета = Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыЗаказа;
КонецЕсли;
КонецЦикла;
ЗаполнитьДатыОтгрузки();
УстановитьВидимостьЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура СортироватьЭтапыОплаты()
Для Каждого Стр Из Объект.ЭтапыГрафикаОплаты Цикл
Стр.НомерВариантаОплаты = ?(Стр.ВариантОплаты = ПредопределенноеЗначение("Перечисление.ВариантыКонтроляОплатыКлиентом.ПредоплатаДоОтгрузки")
ИЛИ Стр.ВариантОплаты = ПредопределенноеЗначение("Перечисление.ВариантыКонтроляОплатыПоставщику.ПредоплатаДоПоступления"),
1,
?(Стр.ВариантОплаты = ПредопределенноеЗначение("Перечисление.ВариантыКонтроляОплатыКлиентом.АвансДоОбеспечения")
ИЛИ Стр.ВариантОплаты = ПредопределенноеЗначение("Перечисление.ВариантыКонтроляОплатыПоставщику.АвансДоПодтверждения"),
0,
2));
КонецЦикла;
Объект.ЭтапыГрафикаОплаты.Сортировать("НомерВариантаОплаты, ДатаПлатежа");
КонецПроцедуры
&НаСервере
Процедура СвернутьЭтапыОплаты()
ТЗ = Объект.ЭтапыГрафикаОплаты.Выгрузить();
ТЗ.Свернуть("ВариантОплаты, ДатаПлатежа, ВариантОтсчета, Сдвиг","СуммаПлатежа,ПроцентПлатежа");
Объект.ЭтапыГрафикаОплаты.Загрузить(ТЗ);
ЗаполнитьДатыОтгрузки();
КонецПроцедуры
&НаКлиенте
Процедура СортироватьЭтапыИсполнения()
Объект.ЭтапыГрафикаИсполненияДоговора.Сортировать("ДатаПоГрафику");
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДатыОтгрузки()
МассивДат = Объект.ЭтапыГрафикаИсполненияДоговора.Выгрузить(,"ДатаОтгрузки").ВыгрузитьКолонку("ДатаОтгрузки");
Для Каждого Стр Из Объект.ЭтапыГрафикаОплаты Цикл
Если Объект.ЭтапыГрафикаИсполненияДоговора.Количество() > 1 Тогда
Если Стр.ВариантОтсчета = Перечисления.ВариантыОтсчетаДатыПлатежа.ДоДатыОтгрузки Тогда
Стр.ДатаОтгрузки = Стр.ДатаПлатежа + 86400 * Стр.Сдвиг;
Если МассивДат.Найти(Стр.ДатаОтгрузки) = Неопределено Тогда
БлижайшаяДата = Дата(3000,1,1);
Для Каждого Дата Из МассивДат Цикл
Если Дата < БлижайшаяДата И Дата >= Стр.ДатаОтгрузки Тогда
БлижайшаяДата = Дата;
КонецЕсли;
КонецЦикла;
Стр.ДатаОтгрузки = БлижайшаяДата;
КонецЕсли;
ИначеЕсли Стр.ВариантОтсчета = Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыОтгрузки Тогда
Стр.ДатаОтгрузки = Стр.ДатаПлатежа - 86400 * Стр.Сдвиг;
Если МассивДат.Найти(Стр.ДатаОтгрузки) = Неопределено Тогда
БлижайшаяДата = Дата(1,1,1);
Для Каждого Дата Из МассивДат Цикл
Если Дата > БлижайшаяДата И Дата <= Стр.ДатаОтгрузки Тогда
БлижайшаяДата = Дата;
КонецЕсли;
КонецЦикла;
Стр.ДатаОтгрузки = БлижайшаяДата;
КонецЕсли;
ИначеЕсли Стр.ВариантОтсчета = Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыПереходаПраваСобственности Тогда
Стр.ДатаОтгрузки = Стр.ДатаПлатежа - 86400 * Стр.Сдвиг + Объект.ДлительностьДоставки;
Если МассивДат.Найти(Стр.ДатаОтгрузки) = Неопределено Тогда
БлижайшаяДата = Дата(1,1,1);
Для Каждого Дата Из МассивДат Цикл
Если Дата > БлижайшаяДата И Дата <= Стр.ДатаОтгрузки Тогда
БлижайшаяДата = Дата;
КонецЕсли;
КонецЦикла;
Стр.ДатаОтгрузки = БлижайшаяДата;
КонецЕсли;
Иначе
Стр.ДатаОтгрузки = Дата(1,1,1);
КонецЕсли;
ДатаОтгрузкиПоУмолчанию = Стр.ДатаОтгрузки;
ИначеЕсли Объект.ЭтапыГрафикаИсполненияДоговора.Количество() = 1 Тогда
Стр.ДатаОтгрузки = Объект.ЭтапыГрафикаИсполненияДоговора[0].ДатаПоГрафику;
ДатаОтгрузкиПоУмолчанию = Стр.ДатаОтгрузки;
Иначе
Стр.ДатаОтгрузки = ДатаДоговора;
ДатаОтгрузкиПоУмолчанию = ДатаДоговора;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПроизводственныйКалендарьНаСервере()
КалендарныеГрафики.ЗаполнитьПроизводственныйКалендарьВФорме(ЭтаФорма, "Объект.Календарь");
КонецПроцедуры
&НаКлиенте
Функция СтруктураОткрытияЭтапа()
СтруктураОткрытия = Новый Структура;
СтруктураОткрытия.Вставить("Валюта", Валюта);
СтруктураОткрытия.Вставить("ЭтоРасчетыСКлиентами", ЭтоРасчетыСКлиентами);
СтруктураОткрытия.Вставить("Календарь", Объект.Календарь);
СтруктураОткрытия.Вставить("ДатаЗаказа", ДатаДоговора);
СтруктураОткрытия.Вставить("ДатаСогласования", ДатаДоговора);
СтруктураОткрытия.Вставить("СрокПереходаПраваСобственности", Объект.ДлительностьДоставки);
СтруктураОткрытия.Вставить("СуммаОплатыПоДокументу", СуммаДоговора);
СтруктураОткрытия.Вставить("СуммаЗалогаПоДокументу", 0);
СтруктураОткрытия.Вставить("ЭтоДоговор", Истина);
Возврат СтруктураОткрытия;
КонецФункции
&НаКлиенте
Процедура ЭтапыГрафикаОплатыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Если НесколькоДатОтгрузки Тогда
Отказ = Истина;
ЕстьТара = Ложь;
СтруктураОткрытия = СтруктураОткрытияЭтапа();
Если НЕ Копирование Тогда
СтруктураОткрытия.Вставить("Операция","Добавление");
Иначе
ТекущиеДанные = Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
Иначе
СтруктураОткрытия.Вставить("Операция", "Копирование");
СтруктураОткрытия.Вставить("ВариантОплаты", ТекущиеДанные.ВариантОплаты);
СтруктураОткрытия.Вставить("ВариантОтсчета", ТекущиеДанные.ВариантОтсчета);
СтруктураОткрытия.Вставить("Сдвиг", ТекущиеДанные.Сдвиг);
СтруктураОткрытия.Вставить("ДатаПлатежа", ТекущиеДанные.ДатаПлатежа);
ПроцентЗалогаЗаТару = 0;
ПроцентПлатежа = 0;
СуммаЗалогаЗаТару = 0;
СуммаПлатежа = 0;
Для Каждого Стр Из Объект.ЭтапыГрафикаОплаты Цикл
Если Стр.Сдвиг = ТекущиеДанные.Сдвиг
И Стр.Сдвиг = ТекущиеДанные.Сдвиг
И Стр.Сдвиг = ТекущиеДанные.Сдвиг Тогда
ПроцентПлатежа = ПроцентПлатежа + Стр.ПроцентПлатежа;
СуммаПлатежа = СуммаПлатежа + Стр.СуммаПлатежа;
Если ЕстьТара Тогда
СуммаЗалогаЗаТару = СуммаЗалогаЗаТару + Стр.СуммаЗалогаЗаТару;
ПроцентЗалогаЗаТару = ПроцентЗалогаЗаТару + Стр.ПроцентЗалогаЗаТару;
КонецЕсли;
КонецЕсли;
КонецЦикла;
СтруктураОткрытия.Вставить("ПроцентЗалогаЗаТару", ПроцентЗалогаЗаТару);
СтруктураОткрытия.Вставить("ПроцентПлатежа", ПроцентПлатежа);
СтруктураОткрытия.Вставить("СуммаЗалогаЗаТару", СуммаЗалогаЗаТару);
СтруктураОткрытия.Вставить("СуммаПлатежа", СуммаПлатежа);
КонецЕсли;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ЭтапыГрафикаОплатыПередНачаломДобавленияЗавершение", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ЭтапОплаты",СтруктураОткрытия, ЭтаФорма,,,,Оповещение,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыПередНачаломДобавленияЗавершение(Результат, Параметры) Экспорт
Если Результат <> Неопределено Тогда
ЗаполнитьЭтапыОплатыПослеРедактированияВФормеЭтапОплаты(Результат);
УстановитьВидимостьЭлементов();
УстановитьЗаголовкиГрафикЧастичноИсполнен();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СвернутьЭтапыИсполнения()
ТЗ = Объект.ЭтапыГрафикаИсполненияДоговора.Выгрузить();
ТЗ.Свернуть("ДатаПоГрафику,Комментарий,ДатаОтгрузки,УжеОтгружено","ПроцентИсполнения,СуммаИсполнения");
Объект.ЭтапыГрафикаИсполненияДоговора.Загрузить(ТЗ);
УстановитьВидимостьЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаИсполненияДоговораПередУдалением(Элемент, Отказ)
ЕстьЭтапыОтДатыОтгрузки = Ложь;
Для Каждого Стр Из Объект.ЭтапыГрафикаОплаты Цикл
Если Стр.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ДоДатыОтгрузки")
ИЛИ Стр.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ОтДатыОтгрузки")
ИЛИ Стр.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ОтДатыПереходаПраваСобственности") Тогда
ЕстьЭтапыОтДатыОтгрузки = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Объект.ЭтапыГрафикаОплаты.Количество() <> 0
И ЕстьЭтапыОтДатыОтгрузки Тогда
Отказ = Истина;
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("СтрокаЭтапа",Элементы.ЭтапыГрафикаИсполненияДоговора.ТекущаяСтрока);
ТекстВопроса = НСтр("ru = 'График оплаты будет очищен, продолжить?'");
ПоказатьВопрос(
Новый ОписаниеОповещения("ЭтапыГрафикаИсполненияДоговораПередУдалениемЗавершение", ЭтотОбъект, ДополнительныеПараметры),
ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаИсполненияДоговораПередУдалениемЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
Иначе
Объект.ЭтапыГрафикаОплаты.Очистить();
Объект.ЭтапыГрафикаИсполненияДоговора.Удалить(Объект.ЭтапыГрафикаИсполненияДоговора.НайтиПоИдентификатору(ДополнительныеПараметры.СтрокаЭтапа));
РассчитатьИтоговыеПоказатели(ЭтаФорма);
УстановитьВидимостьЭлементов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаИсполненияДоговораПередНачаломИзменения(Элемент, Отказ)
ТекущиеДанные = Элементы.ЭтапыГрафикаИсполненияДоговора.ТекущиеДанные;
РедактируемаяСтрока = Новый Структура;
РедактируемаяСтрока.Вставить("ДатаПоГрафику", ТекущиеДанные.ДатаПоГрафику);
РедактируемаяСтрока.Вставить("ПроцентИсполнения", ТекущиеДанные.ПроцентИсполнения);
РедактируемаяСтрока.Вставить("СуммаИсполнения", ТекущиеДанные.СуммаИсполнения);
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыПередУдалением(Элемент, Отказ)
ТекущиеДанные = Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные;
Если НесколькоДатОтгрузки
И (ТекущиеДанные.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ДоДатыОтгрузки")
ИЛИ ТекущиеДанные.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ОтДатыОтгрузки")
ИЛИ ТекущиеДанные.ВариантОтсчета = ПредопределенноеЗначение("Перечисление.ВариантыОтсчетаДатыПлатежа.ОтДатыПереходаПраваСобственности")) Тогда
Отказ = Истина;
Сдвиг = ТекущиеДанные.Сдвиг;
ВариантОплаты = ТекущиеДанные.ВариантОплаты;
ВариантОтсчета = ТекущиеДанные.ВариантОтсчета;
сч = 0;
Пока сч < Объект.ЭтапыГрафикаОплаты.Количество() Цикл
Строка = Объект.ЭтапыГрафикаОплаты[сч];
Если Строка.Сдвиг = Сдвиг
И Строка.ВариантОплаты = ВариантОплаты
И Строка.ВариантОтсчета = ВариантОтсчета Тогда
Объект.ЭтапыГрафикаОплаты.Удалить(сч);
Иначе
сч = сч + 1;
КонецЕсли;
КонецЦикла;
УстановитьВидимостьЭлементов();
УстановитьЗаголовкиГрафикЧастичноИсполнен();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыПередНачаломИзменения(Элемент, Отказ)
Если НесколькоДатОтгрузки
И Элемент.ТекущийЭлемент.Имя <> Элементы.ЭтапыГрафикаОплатыУжеОплачено.Имя Тогда
Отказ = Истина;
СтруктураОткрытия = СтруктураОткрытияЭтапа();
ТекущиеДанные = Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
Иначе
СтруктураОткрытия.Вставить("Операция", "Изменение");
СтруктураОткрытия.Вставить("ВариантОплаты", ТекущиеДанные.ВариантОплаты);
СтруктураОткрытия.Вставить("ВариантОтсчета", ТекущиеДанные.ВариантОтсчета);
СтруктураОткрытия.Вставить("Сдвиг", ТекущиеДанные.Сдвиг);
СтруктураОткрытия.Вставить("ДатаПлатежа", ТекущиеДанные.ДатаПлатежа);
СтруктураОткрытия.Вставить("ВариантОплатыПередИзменением", ТекущиеДанные.ВариантОплаты);
СтруктураОткрытия.Вставить("ВариантОтсчетаПередИзменением", ТекущиеДанные.ВариантОтсчета);
СтруктураОткрытия.Вставить("СдвигПередИзменением", ТекущиеДанные.Сдвиг);
ПроцентЗалогаЗаТару = 0;
ПроцентПлатежа = 0;
СуммаЗалогаЗаТару = 0;
СуммаПлатежа = 0;
Для Каждого Стр Из Объект.ЭтапыГрафикаОплаты Цикл
Если Стр.Сдвиг = ТекущиеДанные.Сдвиг
И Стр.ВариантОплаты = ТекущиеДанные.ВариантОплаты
И Стр.ВариантОтсчета = ТекущиеДанные.ВариантОтсчета Тогда
ПроцентПлатежа = ПроцентПлатежа + Стр.ПроцентПлатежа;
СуммаПлатежа = СуммаПлатежа + Стр.СуммаПлатежа;
КонецЕсли;
КонецЦикла;
СтруктураОткрытия.Вставить("ПроцентЗалогаЗаТару", ПроцентЗалогаЗаТару);
СтруктураОткрытия.Вставить("ПроцентПлатежа", ПроцентПлатежа);
СтруктураОткрытия.Вставить("СуммаЗалогаЗаТару", СуммаЗалогаЗаТару);
СтруктураОткрытия.Вставить("СуммаПлатежа", СуммаПлатежа);
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ЭтапыГрафикаОплатыПередНачаломИзмененияЗавершение", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ЭтапОплаты",СтруктураОткрытия, ЭтаФорма,,,,Оповещение,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыПередНачаломИзмененияЗавершение(Результат, Параметры) Экспорт
Если Результат <> Неопределено Тогда
сч = 0;
Пока сч < Объект.ЭтапыГрафикаОплаты.Количество() Цикл
Строка = Объект.ЭтапыГрафикаОплаты[сч];
Если Строка.Сдвиг = Результат.СдвигПередИзменением
И Строка.ВариантОплаты = Результат.ВариантОплатыПередИзменением
И Строка.ВариантОтсчета = Результат.ВариантОтсчетаПередИзменением Тогда
Объект.ЭтапыГрафикаОплаты.Удалить(сч);
Иначе
сч = сч + 1;
КонецЕсли;
КонецЦикла;
ЗаполнитьЭтапыОплатыПослеРедактированияВФормеЭтапОплаты(Результат);
ПересчитатьПроценты(ЭтаФорма);
УстановитьЗаголовкиГрафикЧастичноИсполнен();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаИсполненияДоговораПослеУдаления(Элемент)
СвернутьЭтапыИсполнения();
РассчитатьИтоговыеПоказатели(ЭтаФорма);
Если Объект.ЭтапыГрафикаИсполненияДоговора.Количество() = 1 Тогда
ДатаОтгрузки= Объект.ЭтапыГрафикаИсполненияДоговора[0].ДатаОтгрузки;
Иначе
ДатаОтгрузки = Дата(1,1,1);
КонецЕсли;
Если ДатаОтгрузкиПоУмолчанию <> ДатаОтгрузки Тогда
ДатаОтгрузкиПоУмолчанию = ДатаОтгрузки;
ЗаполнитьДатыОтгрузки();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыПослеУдаления(Элемент)
УстановитьВидимостьЭлементов();
УстановитьЗаголовкиГрафикЧастичноИсполнен();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаОплатыПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
УстановитьВидимостьЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыГрафикаИсполненияДоговораПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
ТекущиеДанные = Элементы.ЭтапыГрафикаИсполненияДоговора.ТекущиеДанные;
Если НоваяСтрока И НЕ ОтменаРедактирования Тогда
ОчиститьСообщения();
Если НЕ ЗначениеЗаполнено(ТекущиеДанные.ДатаПоГрафику) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Заполните дату отгрузки'"),
Объект.Ссылка,
"Объект.ЭтапыГрафикаИсполненияДоговора",,Отказ);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ТекущиеДанные.СуммаИсполнения) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Заполните сумму отгрузки'"),
Объект.Ссылка,
"Объект.ЭтапыГрафикаИсполненияДоговора",,Отказ);
КонецЕсли;
КонецЕсли;
Если Не ОтменаРедактирования Тогда
УстановитьЗаголовкиГрафикЧастичноИсполнен();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЭтапыОплатыПослеРедактированияВФормеЭтапОплаты(Результат)
Если ЗначениеЗаполнено(Результат.ДатаПлатежа) Тогда
НовСтр = Объект.ЭтапыГрафикаОплаты.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр, Результат);
Иначе
СуммаПлатежаКРаспределению = Результат.СуммаПлатежа;
ПроцентПлатежаКРаспределению = Результат.ПроцентПлатежа;
ИтогСуммаИсполнения = Объект.ЭтапыГрафикаИсполненияДоговора.Итог("СуммаИсполнения");
сч = 1;
Для Каждого Стр Из Объект.ЭтапыГрафикаИсполненияДоговора Цикл
Если Стр.СуммаИсполнения = 0 Тогда
сч = сч + 1;
Продолжить;
КонецЕсли;
НовСтр = Объект.ЭтапыГрафикаОплаты.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр,Результат);
НовСтр.ДатаОтгрузки = Стр.ДатаОтгрузки;
Если сч <> Объект.ЭтапыГрафикаИсполненияДоговора.Количество() Тогда
НовСтр.СуммаПлатежа = Стр.СуммаИсполнения/ИтогСуммаИсполнения * Результат.СуммаПлатежа;
НовСтр.ПроцентПлатежа = Стр.СуммаИсполнения/ИтогСуммаИсполнения * Результат.ПроцентПлатежа;
СуммаПлатежаКРаспределению = СуммаПлатежаКРаспределению - НовСтр.СуммаПлатежа;
ПроцентПлатежаКРаспределению = ПроцентПлатежаКРаспределению - НовСтр.ПроцентПлатежа;
Иначе
НовСтр.СуммаПлатежа = СуммаПлатежаКРаспределению;
НовСтр.ПроцентПлатежа = ПроцентПлатежаКРаспределению;
КонецЕсли;
ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыСдвигВариантОтсчетаПриИзменении(
НовСтр,
ДатаДоговора,
ДатаДоговора,
НовСтр.ДатаОтгрузки,
Объект.ДлительностьДоставки,
Дата(1,1,1),
Объект.Календарь);
сч = сч + 1;
КонецЦикла;
КонецЕсли;
СвернутьЭтапыОплаты();
СортироватьЭтапыОплаты();
КонецПроцедуры
&НаСервере
Процедура УстановитьЗаголовкиГрафикЧастичноИсполнен()
ЗаголовокФлага = НСтр("ru = 'График частично исполнен до начала ведения учета'");
Если Объект.ГрафикЧастичноИсполнен Тогда
СуммаОтгружено = 0;
Для Каждого СтрокаЭтапа Из Объект.ЭтапыГрафикаИсполненияДоговора Цикл
СуммаОтгружено = СуммаОтгружено + ?(СтрокаЭтапа.УжеОтгружено, СтрокаЭтапа.СуммаИсполнения, 0);
КонецЦикла;
СуммаОплачено = 0;
Для Каждого СтрокаЭтапа Из Объект.ЭтапыГрафикаОплаты Цикл
СуммаОплачено = СуммаОплачено + ?(СтрокаЭтапа.УжеОплачено, СтрокаЭтапа.СуммаПлатежа, 0);
КонецЦикла;
Если СуммаОтгружено = СуммаОплачено
Или Объект.ЭтапыГрафикаИсполненияДоговора.Итог("СуммаИсполнения") <> СуммаДоговора
Или Объект.ЭтапыГрафикаИсполненияДоговора.Итог("СуммаИсполнения") <> Объект.ЭтапыГрафикаОплаты.Итог("СуммаПлатежа") Тогда
Элементы.ГрафикЧастичноИсполнен.Заголовок = ЗаголовокФлага;
Элементы.ДекорацияГрафикЧастичноИсполнен.Видимость = Ложь;
Иначе
СостояниеВводаОстатков = СостояниеВводаОстатковРасчетовПоДоговору(Объект.Договор, СуммаОтгружено, СуммаОплачено);
Элементы.ГрафикЧастичноИсполнен.Заголовок = ЗаголовокФлага + ":";
Элементы.ДекорацияГрафикЧастичноИсполнен.Видимость = Истина;
Элементы.ДекорацияГрафикЧастичноИсполнен.Заголовок = СостояниеВводаОстатков.ТекстПодсказки;
Элементы.ДекорацияГрафикЧастичноИсполнен.ЦветТекста = СостояниеВводаОстатков.ЦветПодсказки;
КонецЕсли;
Иначе
Элементы.ГрафикЧастичноИсполнен.Заголовок = ЗаголовокФлага;
Элементы.ДекорацияГрафикЧастичноИсполнен.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция СостояниеВводаОстатковРасчетовПоДоговору(СсылкаНаДоговор, СуммаОтгружено, СуммаОплачено)
Результат = Новый Структура;
Результат.Вставить("ЦветПодсказки", ЦветаСтиля.ЦветТекстаПроблема);
Результат.Вставить("ТекстПодсказки", НСтр("ru = 'ввод остатков взаиморасчетов не соответствует графику'"));
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Объект", СсылкаНаДоговор);
Запрос.Текст =
"ВЫБРАТЬ
| ВводОстатковВзаиморасчетовРасчетыСПартнерами.Ссылка.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| СУММА(ВводОстатковВзаиморасчетовРасчетыСПартнерами.Сумма) КАК Сумма,
| ОбъектыРасчетов.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
| ОбъектыРасчетов.ТипРасчетов КАК ТипРасчетов
|ИЗ
| Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВводОстатковВзаиморасчетов.РасчетыСПартнерами КАК ВводОстатковВзаиморасчетовРасчетыСПартнерами
| ПО ВводОстатковВзаиморасчетовРасчетыСПартнерами.ОбъектРасчетовОтправитель = ОбъектыРасчетов.Ссылка
| И ВводОстатковВзаиморасчетовРасчетыСПартнерами.Ссылка.Проведен
|ГДЕ
| ОбъектыРасчетов.Объект = &Объект
|
|СГРУППИРОВАТЬ ПО
| ВводОстатковВзаиморасчетовРасчетыСПартнерами.Ссылка.ХозяйственнаяОперация,
| ОбъектыРасчетов.ВалютаВзаиморасчетов,
| ОбъектыРасчетов.ТипРасчетов";
Выборка = Запрос.Выполнить().Выбрать();
Если СуммаОплачено > СуммаОтгружено Тогда
Если Выборка.Следующий()Тогда
Если ЗначениеЗаполнено(Выборка.ХозяйственнаяОперация)
И Выборка.Количество() = 1
И (Выборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВводОстатковАвансовКлиентов
Или Выборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВводОстатковАвансовПоставщикам)
И Выборка.Сумма = СуммаОплачено - СуммаОтгружено Тогда
Результат.ЦветПодсказки = Новый Цвет;
Результат.ТекстПодсказки = НСтр("ru = 'ввод начальных остатков авансов соответствует графику'");
ИначеЕсли Не ЗначениеЗаполнено(Выборка.ХозяйственнаяОперация) Тогда
Если Выборка.ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом Тогда
Результат.ТекстПодсказки = СтрШаблон(НСтр("ru = 'необходимо ввести остатки аванса клиента на сумму %1 %2'"),
Формат(СуммаОплачено - СуммаОтгружено, "ЧДЦ=2"),
Выборка.ВалютаВзаиморасчетов);
Иначе
Результат.ТекстПодсказки = СтрШаблон(НСтр("ru = 'необходимо ввести остатки аванса поставщику на сумму %1 %2'"),
Формат(СуммаОплачено - СуммаОтгружено, "ЧДЦ=2"),
Выборка.ВалютаВзаиморасчетов);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
Если Выборка.Следующий()Тогда
Если ЗначениеЗаполнено(Выборка.ХозяйственнаяОперация)
И Выборка.Количество() = 1
И (Выборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВводОстатковЗадолженностиКлиентов
Или Выборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВводОстатковЗадолженностиПоставщикам)
И Выборка.Сумма = СуммаОтгружено - СуммаОплачено Тогда
Результат.ЦветПодсказки = Новый Цвет;
Результат.ТекстПодсказки = НСтр("ru = 'ввод начальных остатков задолженности соответствует графику'");
ИначеЕсли Не ЗначениеЗаполнено(Выборка.ХозяйственнаяОперация) Тогда
Если Выборка.ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом Тогда
Результат.ТекстПодсказки = СтрШаблон(НСтр("ru = 'необходимо ввести остатки задолженности клиента на сумму %1 %2'"),
Формат(СуммаОтгружено - СуммаОплачено, "ЧДЦ=2"),
Выборка.ВалютаВзаиморасчетов);
Иначе
Результат.ТекстПодсказки = СтрШаблон(НСтр("ru = 'необходимо ввести остатки задолженности поставщику на сумму %1 %2'"),
Формат(СуммаОтгружено - СуммаОплачено, "ЧДЦ=2"),
Выборка.ВалютаВзаиморасчетов);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти