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