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