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