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