Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Для Каждого Стр0 из ДеревоНаФорме.Строки Цикл
Сум0 =0;
Для Каждого Стр1 из Стр0.Строки Цикл
Сум1 =0;
Для Каждого Стр2 из Стр1.Строки Цикл;
Попытка
Стр2.СуммаВсего = Стр2.Количество * Стр2.Нормочасы*ЦенаНормочаса *(1-Стр2.СкидкаНаРаботы/100)+ Стр2.Количество * Стр2.Цена *(1-Стр2.СкидкаНаЗапчасти/100) ;
Стр2.СтоимостьУстановки = Стр2.Количество * Стр2.Нормочасы*ЦенаНормочаса;
Сум1=Сум1+ Стр2.СуммаВсего;
исключение КонецПопытки;
КонецЦикла;
Стр1.СуммаВсего = Сум1;
Сум0 = Сум0+Сум1;
КонецЦикла;
Стр0.СуммаВсего = Сум0;
КонецЦикла;
Умопомрачительный подсчёт итога по колонке "СуммаВсего" в дереве.
ДеревоНаФорме - дерево на форме. При интеркативном изменении числовых реквизитов - пересчитывается строка, но! на всякий случай здесь - в Попытке-Исключении пересчитываем СуммуВсего по строке ещё раз... Ну и конечно порадовала изящность конструкции....
Для Каждого ТекущаяСтрока Из ОтработанноеВремя Цикл
ТекущаяСтрока.ИтогоЧасов=0;
ТекущаяСтрока.ИтогоЧасов=ТекущаяСтрока.ПервыйЧасов1+ТекущаяСтрока.ПервыйЧасов2+ТекущаяСтрока.ПервыйЧасов3+
ТекущаяСтрока.ПервыйЧасов4+ТекущаяСтрока.ПервыйЧасов5+ТекущаяСтрока.ПервыйЧасов6+ТекущаяСтрока.ПервыйЧасов7+
ТекущаяСтрока.ПервыйЧасов8+ТекущаяСтрока.ПервыйЧасов9+ТекущаяСтрока.ПервыйЧасов10+ТекущаяСтрока.ПервыйЧасов11+
ТекущаяСтрока.ПервыйЧасов12+ТекущаяСтрока.ПервыйЧасов13+ТекущаяСтрока.ПервыйЧасов14+ТекущаяСтрока.ПервыйЧасов15+
ТекущаяСтрока.ПервыйЧасов16+ТекущаяСтрока.ПервыйЧасов17+ТекущаяСтрока.ПервыйЧасов18+ТекущаяСтрока.ПервыйЧасов19+
ТекущаяСтрока.ПервыйЧасов20+ТекущаяСтрока.ПервыйЧасов21+ТекущаяСтрока.ПервыйЧасов22+ТекущаяСтрока.ПервыйЧасов23+
ТекущаяСтрока.ПервыйЧасов24+ТекущаяСтрока.ПервыйЧасов25+ТекущаяСтрока.ПервыйЧасов26+ТекущаяСтрока.ПервыйЧасов27+
ТекущаяСтрока.ПервыйЧасов28+ТекущаяСтрока.ПервыйЧасов29+ТекущаяСтрока.ПервыйЧасов30+ТекущаяСтрока.ПервыйЧасов31;
ТекущаяСтрока.ИтогоОклад=0;
ТекущаяСтрока.ИтогоОклад= ОКр(ТекущаяСтрока.ИтогоЧасов/ТекущаяСтрока.НормаЧасов*ТекущаяСтрока.Оклад,2);
ТекущаяСтрока.Выручка=0;
Если ТекущаяСтрока.ПервыйЧасов1>0 тогда
НайденнаяСтрока = РабочаяТаблица.Найти(1, "День");
Если НайденнаяСтрока = Неопределено Тогда
Иначе
ТекущаяСтрока.Выручка = ТекущаяСтрока.Выручка+НайденнаяСтрока.Продано;
КонецЕсли;
КонецЕсли;
Если ТекущаяСтрока.ПервыйЧасов2>0 тогда
НайденнаяСтрока = РабочаяТаблица.Найти(2, "День");
Если НайденнаяСтрока = Неопределено Тогда
Иначе
ТекущаяСтрока.Выручка = ТекущаяСтрока.Выручка+НайденнаяСтрока.Продано;
КонецЕсли;
КонецЕсли;
Если ТекущаяСтрока.ПервыйЧасов3>0 тогда
НайденнаяСтрока = РабочаяТаблица.Найти(3, "День");
Если НайденнаяСтрока = Неопределено Тогда
Иначе
ТекущаяСтрока.Выручка = ТекущаяСтрока.Выручка+НайденнаяСтрока.Продано;
КонецЕсли;
КонецЕсли;
Если ТекущаяСтрока.ПервыйЧасов4>0 тогда
НайденнаяСтрока = РабочаяТаблица.Найти(4, "День");
Если НайденнаяСтрока = Неопределено Тогда
Иначе
ТекущаяСтрока.Выручка = ТекущаяСтрока.Выручка+НайденнаяСтрока.Продано;
КонецЕсли;
КонецЕсли;
Если ТекущаяСтрока.ПервыйЧасов5>0 тогда
НайденнаяСтрока = РабочаяТаблица.Найти(5, "День");
Если НайденнаяСтрока = Неопределено Тогда
Иначе
ТекущаяСтрока.Выручка = ТекущаяСтрока.Выручка+НайденнаяСтрока.Продано;
КонецЕсли;
КонецЕсли;
************************************************************ и так далее :)
Почти 300 строк говнокода превращаются в 10 :D
Для Инд = 1 По 31 Цикл
Если ТекущаяСтрока["ПервыйЧасов" + Инд] > 0 Тогда
ТекущаяСтрока.ИтогоЧасов = ТекущаяСтрока.ИтогоЧасов + ТекущаяСтрока["ПервыйЧасов" + Инд];
НайденнаяСтрока = РабочаяТаблица.Найти(Инд, "День");
Если НайденнаяСтрока <> Неопределено Тогда
ТекущаяСтрока.Выручка = ТекущаяСтрока.Выручка+НайденнаяСтрока.Пр одано;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Мое решение является эффективным и уникальным.
Решение задачи базируется на принципе двойственности.
В первом стеке будем хранить сами числа, а во втором - результат XOR над ними.
[] []
push a ->[a] [a]
push b -> [b a] [a^b a]
pop -> b^(a^b) = a [a] [a]
Однако после такого pop пропадает b.
Как с этим бороться я расскажу через 24 часа.
Задача о двух стеках. Поэтапное решение для повышения слюноотделения.