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