V82.ОбщиеМодули.КорректировкаСтоимостиУчетЗатрат.РешитьСЛУРасширеннаяАналитика C# (CSharp) Method

РешитьСЛУРасширеннаяАналитика() public method

        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;
        }
КорректировкаСтоимостиУчетЗатрат