V82.ОбщиеМодули.КорректировкаСтоимостиУчетЗатрат.РешитьСЛУБезИспользованияВременныхТаблиц C# (CSharp) Method

РешитьСЛУБезИспользованияВременныхТаблиц() public method

        public object РешитьСЛУБезИспользованияВременныхТаблиц(/*ДатаНач, ДатаКон, РегламентныйДокумент, РегистрУчета, ВидОтраженияВУчете, МенеджерВременныхТаблиц,СтруктураПараметров,ОперацияРасчетаСебестоимостиВыпуска*/)
        {
            /*// Стоимость товара на складе равна стоимости, полученной извне (например, при покупке товара) плюс начальный остаток
            */
            /*// плюс стоимость товара перемещенного с других складов, умноженная на количество перемещенного товара
            */
            /*//
            */
            /*// Это можно представить в виде СЛУ
            */
            /*// K(1) * X(1) = S(1) + K(2) * X(2) + K(3) * X(3) + ... + K(j) * X(j)
            */
            /*// K(2) * X(2) = S(1) + K(1) * X(1) + K(3) * X(3) + ... + K(j) * X(j)
            */
            /*// ...
            */
            /*// K(i) * X(i) = S(i) + K(1) * X(1) + K(2) * X(2) + ... + K(j) * X(j)
            */
            /*//
            */
            /*// где
            */
            /*//	K(i) - количество товара на складе i
            */
            /*//	X(i) - стоимость товара на складе i
            */
            /*//	K(j) - количество перемещенного товара со склада j на склад i
            */
            /*//	X(j) - стоимость товара на складе j
            */
            /*//	S(i) - стоимость товара, полученного извне плюс начальный остаток на складе i
            */
            /*// При решении уравнения используются следующие данные
            */
            /*//  S(i)/K(i) 	- берется средняя стоимость внешних поступлений из регистра УчетЗатрат
            */
            /*//					(перед расчетом помещается в регистр УзлыКорректировкиСтоимостиСписания)
            */
            /*//  K(i) 		- берется общее количество поступления из регистра УчетЗатрат
            */
            /*//					(перед расчетом помещается в регистр УзлыКорректировкиСтоимостиСписания)
            */
            /*//	K(j) 		- берутся движения "расход" из регистра УчетЗатрат
            */
            /*//	X(j) 		- берется из решения предыдущей итерации (для первой итерации берется S(i)/K(i))
            */
            //Запрос = Новый Запрос;
            //Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
            //Запрос.УстановитьПараметр("Регистратор", РегламентныйДокумент);
            //Запрос.УстановитьПараметр("ДатаНач",     ДатаНач);
            //Запрос.УстановитьПараметр("ДатаКон",     ДатаКон);
            /*//Сформируем список состояний
            */
            /*КоличествоУравненийСЛУ = СформироватьВременнуюТаблицуУзлыКорректировкиСтоимостиСписания(
            Запрос,
            РегистрУчета,
            ВидОтраженияВУчете,
            СтруктураПараметров,
            ОперацияРасчетаСебестоимостиВыпуска);*/
            if(true/*КоличествоУравненийСЛУ = 0*/)
            {
            }
            //МаксимальноеКоличествоИтераций = СтруктураПараметров.МаксимальноеКоличествоИтераций;
            //ТребуемаяТочность 			   = СтруктураПараметров.СреднееОтклонениеСЛУ;
            /*// Получим S(i)/K(i)
            */
            //ЗаполнитьМассивыСвободныхЧленов(МассивСвободныхЧленов, МассивСвободныхЧленовСтоимостьНУ, МассивСвободныхЧленовПостояннаяРазница, ВидОтраженияВУчете, Запрос);
            //КоличествоУравненийСЛУ = МассивСвободныхЧленов.Количество();
            /*// Выберем начальное приближение X(j)
            */
            //ТекущееРешение = СкопироватьМассив(МассивСвободныхЧленов);
            if(true/*ВидОтраженияВУчете = Перечисления.ВидыОтраженияВУчете.ОтражатьВРегламентированномУчете*/)
            {
                //ТекущееРешениеСтоимостьНУ       = СкопироватьМассив(МассивСвободныхЧленовСтоимостьНУ);
                //ТекущееРешениеПостояннаяРазница = СкопироватьМассив(МассивСвободныхЧленовПостояннаяРазница);
            }
            /*// Получим K(j) для всех уравнений системы
            */
            //МассивСЛУ = ПолучитьСЛУ(ВидОтраженияВУчете, КоличествоУравненийСЛУ, Запрос);
            /*// По умолчанию примем за решение начальное приближение
            */
            //НовоеРешение = СкопироватьМассив(ТекущееРешение);
            if(true/*ВидОтраженияВУчете = Перечисления.ВидыОтраженияВУчете.ОтражатьВРегламентированномУчете*/)
            {
                //НовоеРешениеСтоимостьНУ       = СкопироватьМассив(ТекущееРешениеСтоимостьНУ);
                //НовоеРешениеПостояннаяРазница = СкопироватьМассив(ТекущееРешениеПостояннаяРазница);
            }
            /*// Решим СЛУ методом простых итераций
            */
            //ТекущееОтклонение  = КоличествоУравненийСЛУ;
            //КоличествоИтераций = 0;
            while(true/*(ТекущееОтклонение/КоличествоУравненийСЛУ > ТребуемаяТочность)
             И (КоличествоИтераций < МаксимальноеКоличествоИтераций)*/)
            {
                //ТекущееОтклонение   = 0;
                //ТекущееОтклонениеПР = 0;
                //ТекущееОтклонениеНУ = 0;
                /*// Получим максимальное отклонение решений СЛУ на данной итерации
            */
                //ТекущееОтклонение = Макс(ТекущееОтклонение, ТекущееОтклонениеПР, ТекущееОтклонениеНУ);
                /*// Запомним решение текущей итерации чтобы использовать его в следующей итерации
            */
                //ТекущееРешение = СкопироватьМассив(НовоеРешение);
                if(true/*ВидОтраженияВУчете = Перечисления.ВидыОтраженияВУчете.ОтражатьВРегламентированномУчете*/)
                {
                    //ТекущееРешениеСтоимостьНУ       = СкопироватьМассив(НовоеРешениеСтоимостьНУ);
                    //ТекущееРешениеПостояннаяРазница = СкопироватьМассив(НовоеРешениеПостояннаяРазница);
                }
                //КоличествоИтераций = КоличествоИтераций + 1;
            }
            /*;

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