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