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