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;
}