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