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