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