public object РешитьСЛУРасширеннаяАналитика(/*ДатаНач, ДатаКон, РегламентныйДокумент, РегистрУчета, ВидОтраженияВУчете, МенеджерВременныхТаблиц, СтруктураПараметров,ОперацияРасчетаСебестоимостиВыпуска*/)
{
/*//Сформируем список состояний
*/
//Запрос = Новый Запрос;
//Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
//Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
//Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
//Запрос.УстановитьПараметр("Регистратор", РегламентныйДокумент);
/*КоличествоУравненийСЛУ = СформироватьВременнуюТаблицуУзлыКорректировкиСтоимостиСписания(
Запрос,
РегистрУчета,
ВидОтраженияВУчете,
СтруктураПараметров,
ОперацияРасчетаСебестоимостиВыпуска);*/
if(true/*КоличествоУравненийСЛУ = 0*/)
{
}
//МаксимальноеКоличествоИтераций = СтруктураПараметров.МаксимальноеКоличествоИтераций;
//ТребуемаяТочность = СтруктураПараметров.СреднееОтклонениеСЛУ;
//Запрос.УстановитьПараметр("ВидДвижения",ВидДвиженияНакопления.Расход);
//ТекущееОтклонение = КоличествоУравненийСЛУ;
//КоличествоИтераций = 0;
/*//Подготовим таблицу перемещений и списаний за отчетный период
*/
/*ТекстЗапроса = "
|ВЫБРАТЬ
| УчетЗатрат.КорАналитикаВидаУчета КАК АналитикаВидаУчета,
| УчетЗатрат.КорАналитикаУчетаЗатрат КАК АналитикаУчетаЗатрат,
| УчетЗатрат.КорАналитикаУчетаПартий КАК АналитикаУчетаПартий,
| УчетЗатрат.КорАналитикаРаспределенияЗатрат КАК АналитикаРаспределенияЗатрат,
| УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла,
|
| //ДляРеглУчета СУММА(
| //ДляРеглУчета ВЫБОР КОГДА УчетЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) ТОГДА
| //ДляРеглУчета УчетЗатрат.КоличествоНУ
| //ДляРеглУчета ИНАЧЕ
| //ДляРеглУчета 0
| //ДляРеглУчета КОНЕЦ
| //ДляРеглУчета ) КАК КоличествоНУ,
|
| //ДляРеглУчета СУММА(ВЫРАЗИТЬ(
| //ДляРеглУчета ВЫБОР КОГДА УчетЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) ТОГДА
| //ДляРеглУчета УчетЗатрат.СтоимостьНУ
| //ДляРеглУчета ИНАЧЕ
| //ДляРеглУчета 0
| //ДляРеглУчета КОНЕЦ
| //ДляРеглУчета КАК ЧИСЛО(23,10))) КАК СтоимостьНУ,
|
| //ДляРеглУчета СУММА(ВЫРАЗИТЬ(
| //ДляРеглУчета ВЫБОР КОГДА УчетЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) ТОГДА
| //ДляРеглУчета УчетЗатрат.ПостояннаяРазница
| //ДляРеглУчета ИНАЧЕ
| //ДляРеглУчета 0
| //ДляРеглУчета КОНЕЦ
| //ДляРеглУчета КАК ЧИСЛО(23,10))) КАК ПостояннаяРазница,
|
| СУММА(
| ВЫБОР КОГДА УчетЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) ТОГДА
| УчетЗатрат.Количество
| ИНАЧЕ
| 0
| КОНЕЦ
| ) КАК Количество,
| СУММА(ВЫРАЗИТЬ(
| ВЫБОР КОГДА УчетЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) ТОГДА
| УчетЗатрат.Стоимость
| ИНАЧЕ
| 0
| КОНЕЦ
| КАК ЧИСЛО(23,10))) КАК Стоимость
|
|ПОМЕСТИТЬ УчетЗатрат
|ИЗ
| РегистрНакопления.УчетЗатрат%СуффиксРегл% КАК УчетЗатрат
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
| ПО
| УчетЗатрат.АналитикаВидаУчета = УзлыКорректировкиСтоимостиСписания.АналитикаВидаУчета
| И УчетЗатрат.АналитикаУчетаЗатрат = УзлыКорректировкиСтоимостиСписания.АналитикаУчетаЗатрат
| И УчетЗатрат.АналитикаУчетаПартий = УзлыКорректировкиСтоимостиСписания.АналитикаУчетаПартий
| И УчетЗатрат.АналитикаРаспределенияЗатрат = УзлыКорректировкиСтоимостиСписания.АналитикаРаспределенияЗатрат
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| КодыОперацийФиксСтоимость КАК КодыОперацийФиксСтоимость
| ПО
| УчетЗатрат.КодОперации = КодыОперацийФиксСтоимость.КодОперации
|
|ГДЕ
| УчетЗатрат.Период МЕЖДУ &ДатаНач И &ДатаКон
| И УчетЗатрат.Активность
| И УчетЗатрат.АналитикаВидаУчета В (
| ВЫБРАТЬ
| Ссылка
| ИЗ
| ОтборПоАналитикеВидовУчета
| )
| И КодыОперацийФиксСтоимость.КодОперации ЕСТЬ NULL
| И (НЕ УзлыКорректировкиСтоимостиСписания.АналитикаВидаУчета В (ВЫБРАТЬ * ИЗ АналитикаВидовУчетаСФиксСтоимостьюСписания))
|
|СГРУППИРОВАТЬ ПО
| УчетЗатрат.КорАналитикаВидаУчета,
| УчетЗатрат.КорАналитикаУчетаЗатрат,
| УчетЗатрат.КорАналитикаУчетаПартий,
| УчетЗатрат.КорАналитикаРаспределенияЗатрат,
| УзлыКорректировкиСтоимостиСписания.НомерУзла
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаВидаУчета,
| АналитикаУчетаЗатрат,
| АналитикаРаспределенияЗатрат,
| АналитикаУчетаПартий,
| НомерУзла
|";*/
//Запрос.Текст = УправлениеЗатратами.ЗаменитьКомментарииВТекстеЗапроса(ТекстЗапроса, ВидОтраженияВУчете);
//Запрос.Выполнить();
/*//Итерационно ищем решение системы линейных уравнений, пока отклонение не будет меньше требуемого или не будет выполнено требуемое количество итераций расчета
*/
while(true/*(ТекущееОтклонение/КоличествоУравненийСЛУ > ТребуемаяТочность) И (КоличествоИтераций < МаксимальноеКоличествоИтераций)*/)
{
//КоличествоИтераций = КоличествоИтераций + 1;
/*//Следующая итерация расчета
*/
/*Запрос.Текст = "
|ВЫБРАТЬ
| ""РешитьСЛУРасширеннаяАналитика"",
| УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла,
|
| //ДляРеглУчета СУММА(ВЫРАЗИТЬ(
| //ДляРеглУчета ВЫБОР КОГДА УзлыКорректировкиСтоимостиСписания.КоличествоНУ <> 0 ТОГДА
| //ДляРеглУчета ТаблицаРешений.ПостояннаяРазница *
| //ДляРеглУчета (ВЫБОР КОГДА ВложенныйЗапрос.КоличествоНУ = 0 ТОГДА
| //ДляРеглУчета ВложенныйЗапрос.СтоимостьНУ + ВложенныйЗапрос.ПостояннаяРазница
| //ДляРеглУчета ИНАЧЕ
| //ДляРеглУчета ВложенныйЗапрос.КоличествоНУ
| //ДляРеглУчета КОНЕЦ) /
| //ДляРеглУчета УзлыКорректировкиСтоимостиСписания.КоличествоНУ
| //ДляРеглУчета ИНАЧЕ
| //ДляРеглУчета 0
| //ДляРеглУчета КОНЕЦ
| //ДляРеглУчета КАК ЧИСЛО(23,10))) КАК ПостояннаяРазница,
|
| //ДляРеглУчета СУММА(ВЫРАЗИТЬ(
| //ДляРеглУчета ВЫБОР КОГДА УзлыКорректировкиСтоимостиСписания.КоличествоНУ <> 0 ТОГДА
| //ДляРеглУчета ТаблицаРешений.СтоимостьНУ *
| //ДляРеглУчета (ВЫБОР КОГДА ВложенныйЗапрос.КоличествоНУ = 0 ТОГДА
| //ДляРеглУчета ВложенныйЗапрос.СтоимостьНУ + ВложенныйЗапрос.ПостояннаяРазница
| //ДляРеглУчета ИНАЧЕ
| //ДляРеглУчета ВложенныйЗапрос.КоличествоНУ
| //ДляРеглУчета КОНЕЦ) /
| //ДляРеглУчета УзлыКорректировкиСтоимостиСписания.КоличествоНУ
| //ДляРеглУчета ИНАЧЕ
| //ДляРеглУчета 0
| //ДляРеглУчета КОНЕЦ
| //ДляРеглУчета КАК ЧИСЛО(23,10))) КАК СтоимостьНУ,
|
| СУММА(ВЫРАЗИТЬ(
| ВЫБОР КОГДА УзлыКорректировкиСтоимостиСписания.Количество <> 0 ТОГДА
| ТаблицаРешений.Стоимость *
| (ВЫБОР КОГДА ВложенныйЗапрос.Количество = 0 ТОГДА
| ВложенныйЗапрос.Стоимость
| ИНАЧЕ
| ВложенныйЗапрос.Количество
| КОНЕЦ) /
| УзлыКорректировкиСтоимостиСписания.Количество
| ИНАЧЕ
| 0
| КОНЕЦ
| КАК ЧИСЛО(23,10))) КАК Стоимость
|
|ПОМЕСТИТЬ ВременнаяТаблицаРешений
|ИЗ
| УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| УчетЗатрат КАК ВложенныйЗапрос
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаРешений КАК ТаблицаРешений
| ПО
| ВложенныйЗапрос.НомерУзла = ТаблицаРешений.НомерУзла
|
| ПО
| УзлыКорректировкиСтоимостиСписания.АналитикаВидаУчета = ВложенныйЗапрос.АналитикаВидаУчета
| И УзлыКорректировкиСтоимостиСписания.АналитикаУчетаЗатрат = ВложенныйЗапрос.АналитикаУчетаЗатрат
| И УзлыКорректировкиСтоимостиСписания.АналитикаУчетаПартий = ВложенныйЗапрос.АналитикаУчетаПартий
| И УзлыКорректировкиСтоимостиСписания.АналитикаРаспределенияЗатрат = ВложенныйЗапрос.АналитикаРаспределенияЗатрат
|
|СГРУППИРОВАТЬ ПО
| УзлыКорректировкиСтоимостиСписания.НомерУзла
|
|ИНДЕКСИРОВАТЬ ПО
| НомерУзла
|";*/
//Запрос.Текст = УправлениеЗатратами.ЗаменитьКомментарииВТекстеЗапроса(Запрос.Текст, ВидОтраженияВУчете);
//Запрос.Выполнить();
/*Запрос.Текст = "
|ВЫБРАТЬ
| //ДляРеглУчета СУММА(
| //ДляРеглУчета ВЫБОР КОГДА (ЕСТЬNULL(ТаблицаРешений.ПостояннаяРазница, 0)
| //ДляРеглУчета - (УзлыКорректировкиСтоимостиСписания.ПостояннаяРазница
| //ДляРеглУчета + ЕСТЬNULL(ВременнаяТаблицаРешений.ПостояннаяРазница, 0))) > 0
| //ДляРеглУчета ТОГДА ЕСТЬNULL(ТаблицаРешений.ПостояннаяРазница, 0)
| //ДляРеглУчета - (УзлыКорректировкиСтоимостиСписания.ПостояннаяРазница
| //ДляРеглУчета + ЕСТЬNULL(ВременнаяТаблицаРешений.ПостояннаяРазница, 0))
| //ДляРеглУчета ИНАЧЕ -(ЕСТЬNULL(ТаблицаРешений.ПостояннаяРазница, 0)
| //ДляРеглУчета - (УзлыКорректировкиСтоимостиСписания.ПостояннаяРазница
| //ДляРеглУчета + ЕСТЬNULL(ВременнаяТаблицаРешений.ПостояннаяРазница, 0)))
| //ДляРеглУчета КОНЕЦ
| //ДляРеглУчета ) КАК СуммаОтклоненийПР,
|
| //ДляРеглУчета СУММА(
| //ДляРеглУчета ВЫБОР КОГДА (ЕСТЬNULL(ТаблицаРешений.СтоимостьНУ,0)
| //ДляРеглУчета - (УзлыКорректировкиСтоимостиСписания.СтоимостьНУ
| //ДляРеглУчета + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьНУ,0))) > 0
| //ДляРеглУчета ТОГДА ЕСТЬNULL(ТаблицаРешений.СтоимостьНУ,0)
| //ДляРеглУчета - (УзлыКорректировкиСтоимостиСписания.СтоимостьНУ
| //ДляРеглУчета + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьНУ,0))
| //ДляРеглУчета ИНАЧЕ -(ЕСТЬNULL(ТаблицаРешений.СтоимостьНУ,0)
| //ДляРеглУчета - (УзлыКорректировкиСтоимостиСписания.СтоимостьНУ
| //ДляРеглУчета + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьНУ,0)))
| //ДляРеглУчета КОНЕЦ
| //ДляРеглУчета ) КАК СуммаОтклоненийНУ,
|
| СУММА(
| ВЫБОР КОГДА (ЕСТЬNULL(ТаблицаРешений.Стоимость,0)
| - (УзлыКорректировкиСтоимостиСписания.Стоимость
| + ЕСТЬNULL(ВременнаяТаблицаРешений.Стоимость,0))) > 0
| ТОГДА ЕСТЬNULL(ТаблицаРешений.Стоимость,0)
| - (УзлыКорректировкиСтоимостиСписания.Стоимость
| + ЕСТЬNULL(ВременнаяТаблицаРешений.Стоимость,0))
| ИНАЧЕ -(ЕСТЬNULL(ТаблицаРешений.Стоимость,0)
| - (УзлыКорректировкиСтоимостиСписания.Стоимость
| + ЕСТЬNULL(ВременнаяТаблицаРешений.Стоимость,0)))
| КОНЕЦ
| ) КАК СуммаОтклонений
|ИЗ
| УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ВременнаяТаблицаРешений КАК ВременнаяТаблицаРешений
| ПО
| ВременнаяТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаРешений КАК ТаблицаРешений
| ПО
| ТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла
|";*/
//Запрос.Текст = УправлениеЗатратами.ЗаменитьКомментарииВТекстеЗапроса(Запрос.Текст, ВидОтраженияВУчете);
//Результат = Запрос.Выполнить();
//СтароеОтклонение = ТекущееОтклонение;
if(true/*Результат.Пустой()*/)
{
//ТекущееОтклонение = 0;
/*//Отклонений нет
*/
}
//Запрос.Текст = "УНИЧТОЖИТЬ ТаблицаРешений";
//Запрос.Выполнить();
/*Запрос.Текст = "
|ВЫБРАТЬ
| УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла,
| //ДляРеглУчета (УзлыКорректировкиСтоимостиСписания.ПостояннаяРазница
| //ДляРеглУчета + ЕСТЬNULL(ВременнаяТаблицаРешений.ПостояннаяРазница, 0)
| //ДляРеглУчета ) КАК ПостояннаяРазница,
|
| //ДляРеглУчета (УзлыКорректировкиСтоимостиСписания.СтоимостьНУ
| //ДляРеглУчета + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьНУ, 0)
| //ДляРеглУчета ) КАК СтоимостьНУ,
|
| (УзлыКорректировкиСтоимостиСписания.Стоимость
| + ЕСТЬNULL(ВременнаяТаблицаРешений.Стоимость, 0)
| ) КАК Стоимость
|
|ПОМЕСТИТЬ ТаблицаРешений
|ИЗ
| УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ВременнаяТаблицаРешений КАК ВременнаяТаблицаРешений
| ПО
| ВременнаяТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла
|
|ИНДЕКСИРОВАТЬ ПО
| НомерУзла
|";*/
//Запрос.Текст = УправлениеЗатратами.ЗаменитьКомментарииВТекстеЗапроса(Запрос.Текст, ВидОтраженияВУчете);
//Запрос.Выполнить();
//Запрос.Текст = "УНИЧТОЖИТЬ ВременнаяТаблицаРешений";
//Запрос.Выполнить();
}
/*;
ОбщегоНазначения.Сообщение("Выполненное количество итераций расчета стоимости: " + Строка(КоличествоИтераций));*/
//ОбщегоНазначения.Сообщение("Полученное среднее отклонение решений: " + Строка(ТекущееОтклонение/КоличествоУравненийСЛУ));
return null;
}