Имя: Пароль:
1C
1С v8
СКД. добавление строк по формуле а+б\с, где а,б,с = обороты по параметру
0 zladenuw
 
22.02.13
20:55
СКД. добавление строк по формуле а+б\с, где а,б,с = обороты по параметру
Параметр задает справочник разделы. который хранить формулу расчета.
Как такое сделать ?
1 zladenuw
 
22.02.13
21:01
в ТЧ думаю хранить параметр формулы.
в реквизите саму формулу, но как в запросе разобрать формулу ?
2 zladenuw
 
22.02.13
21:02
запрос к документу. у него две ТЧ
3 GenV
 
22.02.13
21:32
Попробуй через внешнюю функцию
4 zladenuw
 
22.02.13
21:37
а без нее ? не как ?
5 zladenuw
 
25.02.13
21:45
сделал так.
Формула = Алгоритм.Формула;
    ПараметрыФормулы = Алгоритм.ПараметрыФормулы;
   
    Для каждого ПараметрФормулы из ПараметрыФормулы Цикл        
        ТекстЗапроса = "ВЫБРАТЬ
                       |    "+ПараметрФормулы.ПараметрИмя+".Первонач
                       |ИЗ
                       |    (ВЫБРАТЬ РАЗЛИЧНЫЕ
                       |        СУММА(Влож.Первонач) КАК Первонач,
                       |        СУММА(Влож.Корректировка) КАК Корректировка,
                       |        Влож.СтатьяВид КАК СтатьяВид
                       |    ИЗ
                       |        (ВЫБРАТЬ
                       |            РасходыБюджета.Первонач КАК Первонач,
                       |            СУММА(РасходыБюджета.Коррект) КАК Корректировка,
                       |            РасходыБюджета.СтатьяВид КАК СтатьяВид,
                       |            ВложенныйЗапрос.Отклонение КАК Отклонение
                       |        ИЗ
                       |            (ВЫБРАТЬ
                       |                СУММА(ВЫБОР
                       |                        КОГДА ПланированиеБюджетаРасходы.Ссылка.Версия = 2
                       |                            ТОГДА ПланированиеБюджетаРасходы.Сумма
                       |                        ИНАЧЕ 0
                       |                    КОНЕЦ) КАК Первонач,
                       |                СУММА(ВЫБОР
                       |                        КОГДА ПланированиеБюджетаРасходы.Ссылка.Версия = 3
                       |                            ТОГДА ПланированиеБюджетаРасходы.Сумма
                       |                        ИНАЧЕ 0
                       |                    КОНЕЦ) КАК Коррект,
                       |                ПланированиеБюджетаРасходы.Статья.Вид КАК СтатьяВид
                       |            ИЗ
                       |                Документ.ПланированиеБюджета.Расходы КАК ПланированиеБюджетаРасходы
                       |                    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                       |                        BIP_Статьи.Ссылка КАК BIP_Статья,
                       |                        ПОДСТРОКА(BIP_Статьи.КодВЗ, 1, 6) КАК КодFozzy
                       |                    ИЗ
                       |                        Справочник.BIP_Статьи КАК BIP_Статьи) КАК BIP_Статьи
                       |                    ПО ПланированиеБюджетаРасходы.КодFozzy = BIP_Статьи.КодFozzy
                       |                    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                       |                        ПланированиеБюджетаСтатусы.Ссылка КАК Ссылка,
                       |                        ПланированиеБюджетаСтатусы.Пользователь КАК Пользователь
                       |                    ИЗ
                       |                        Документ.ПланированиеБюджета.Статусы КАК ПланированиеБюджетаСтатусы
                       |                            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                       |                                ПланированиеБюджетаСтатусы.Ссылка КАК Ссылка,
                       |                                МИНИМУМ(ПланированиеБюджетаСтатусы.НомерСтроки) КАК НомерСтроки
                       |                            ИЗ
                       |                                Документ.ПланированиеБюджета.Статусы КАК ПланированиеБюджетаСтатусы
                       |                            ГДЕ
                       |                                ПланированиеБюджетаСтатусы.Ссылка.Проведен = ИСТИНА
                       |                                И ПланированиеБюджетаСтатусы.Ссылка.Месяц МЕЖДУ &МесяцН И &МесяцК
                       |                                И ПланированиеБюджетаСтатусы.Ссылка.Год = &Год
                       |                            
                       |                            СГРУППИРОВАТЬ ПО
                       |                                ПланированиеБюджетаСтатусы.Ссылка) КАК МинСтрока
                       |                            ПО ПланированиеБюджетаСтатусы.Ссылка = МинСтрока.Ссылка
                       |                                И ПланированиеБюджетаСтатусы.НомерСтроки = МинСтрока.НомерСтроки
                       |                    ГДЕ
                       |                        ПланированиеБюджетаСтатусы.Ссылка.Проведен = ИСТИНА
                       |                        И ПланированиеБюджетаСтатусы.Ссылка.Месяц МЕЖДУ &МесяцН И &МесяцК
                       |                        И ПланированиеБюджетаСтатусы.Ссылка.Год = &Год
                       |                    
                       |                    СГРУППИРОВАТЬ ПО
                       |                        ПланированиеБюджетаСтатусы.Ссылка,
                       |                        ПланированиеБюджетаСтатусы.Пользователь) КАК СтатусыОтветственный
                       |                    ПО ПланированиеБюджетаРасходы.Ссылка = СтатусыОтветственный.Ссылка
                       |            ГДЕ
                       |                ПланированиеБюджетаРасходы.Ссылка.Год = &Год
                       |                И ПланированиеБюджетаРасходы.Ссылка.Месяц МЕЖДУ &МесяцН И &МесяцК
                       |                И ПланированиеБюджетаРасходы.Ссылка.Проведен = ИСТИНА
                       |                И ПланированиеБюджетаРасходы.ПравилоДДС.Код <> ""000000027""
                       |                И ПланированиеБюджетаРасходы.Сумма <> 0
                       |            
                       |            СГРУППИРОВАТЬ ПО
                       |                ВЫБОР
                       |                    КОГДА ПланированиеБюджетаРасходы.Ссылка.РегионБюджетирования = ЗНАЧЕНИЕ(справочник.РегионыБюджетирования.пустаяСсылка)
                       |                        ТОГДА ПланированиеБюджетаРасходы.РегионБюджетирования
                       |                    ИНАЧЕ ПланированиеБюджетаРасходы.Ссылка.РегионБюджетирования
                       |                КОНЕЦ,
                       |                ПланированиеБюджетаРасходы.Статья.Вид) КАК РасходыБюджета
                       |                ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                       |                    РасходыБюджета.Первонач КАК Первонач,
                       |                    СУММА(0) КАК Корректировка,
                       |                    СУММА(РасходыБюджета.Коррект) КАК Отклонение,
                       |                    РасходыБюджета.СтатьяВид КАК СтатьяВид
                       |                ИЗ
                       |                    (ВЫБРАТЬ
                       |                        СУММА(ВЫБОР
                       |                                КОГДА ПланированиеБюджетаРасходы.Ссылка.Версия = 2
                       |                                    ТОГДА ПланированиеБюджетаРасходы.Сумма
                       |                                ИНАЧЕ 0
                       |                            КОНЕЦ) КАК Первонач,
                       |                        СУММА(ВЫБОР
                       |                                КОГДА ПланированиеБюджетаРасходы.Ссылка.Версия = 3
                       |                                    ТОГДА ПланированиеБюджетаРасходы.Сумма
                       |                                ИНАЧЕ 0
                       |                            КОНЕЦ) КАК Коррект,
                       |                        ПланированиеБюджетаРасходы.Статья.Вид КАК СтатьяВид
                       |                    ИЗ
                       |                        Документ.ПланированиеБюджета.Расходы КАК ПланированиеБюджетаРасходы
                       |                            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                       |                                BIP_Статьи.Ссылка КАК BIP_Статья,
                       |                                ПОДСТРОКА(BIP_Статьи.КодВЗ, 1, 6) КАК КодFozzy
                       |                            ИЗ
                       |                                Справочник.BIP_Статьи КАК BIP_Статьи) КАК BIP_Статьи
                       |                            ПО ПланированиеБюджетаРасходы.КодFozzy = BIP_Статьи.КодFozzy
                       |                            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                       |                                ПланированиеБюджетаСтатусы.Ссылка КАК Ссылка,
                       |                                ПланированиеБюджетаСтатусы.Пользователь КАК Пользователь
                       |                            ИЗ
                       |                                Документ.ПланированиеБюджета.Статусы КАК ПланированиеБюджетаСтатусы
                       |                                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                       |                                        ПланированиеБюджетаСтатусы.Ссылка КАК Ссылка,
                       |                                        МИНИМУМ(ПланированиеБюджетаСтатусы.НомерСтроки) КАК НомерСтроки
                       |                                    ИЗ
                       |                                        Документ.ПланированиеБюджета.Статусы КАК ПланированиеБюджетаСтатусы
                       |                                    ГДЕ
                       |                                        ПланированиеБюджетаСтатусы.Ссылка.Проведен = ИСТИНА
                       |                                        И ПланированиеБюджетаСтатусы.Ссылка.Месяц МЕЖДУ &МесяцН И &МесяцК
                       |                                        И ПланированиеБюджетаСтатусы.Ссылка.Год = &Год
                       |                                    
                       |                                    СГРУППИРОВАТЬ ПО
                       |                                        ПланированиеБюджетаСтатусы.Ссылка) КАК МинСтрока
                       |                                    ПО ПланированиеБюджетаСтатусы.Ссылка = МинСтрока.Ссылка
                       |                                        И ПланированиеБюджетаСтатусы.НомерСтроки = МинСтрока.НомерСтроки
                       |                            ГДЕ
                       |                                ПланированиеБюджетаСтатусы.Ссылка.Проведен = ИСТИНА
                       |                                И ПланированиеБюджетаСтатусы.Ссылка.Месяц МЕЖДУ &МесяцН И &МесяцК
                       |                                И ПланированиеБюджетаСтатусы.Ссылка.Год = &Год
                       |                            
                       |                            СГРУППИРОВАТЬ ПО
                       |                                ПланированиеБюджетаСтатусы.Ссылка,
                       |                                ПланированиеБюджетаСтатусы.Пользователь) КАК СтатусыОтветственный
                       |                            ПО ПланированиеБюджетаРасходы.Ссылка = СтатусыОтветственный.Ссылка
                       |                    ГДЕ
                       |                        ПланированиеБюджетаРасходы.Ссылка.Год = &Год
                       |                        И ПланированиеБюджетаРасходы.Ссылка.Месяц МЕЖДУ &МесяцН И &МесяцК
                       |                        И ПланированиеБюджетаРасходы.Ссылка.Проведен = ИСТИНА
                       |                        И ПланированиеБюджетаРасходы.ПравилоДДС.Код <> ""000000027""
                       |                        И ПланированиеБюджетаРасходы.Сумма <> 0
                       |                        И ПланированиеБюджетаРасходы.Ссылка.Версия = &Версия
                       |                    
                       |                    СГРУППИРОВАТЬ ПО
                       |                        ВЫБОР
                       |                            КОГДА ПланированиеБюджетаРасходы.Ссылка.РегионБюджетирования = ЗНАЧЕНИЕ(справочник.РегионыБюджетирования.пустаяСсылка)
                       |                                ТОГДА ПланированиеБюджетаРасходы.РегионБюджетирования
                       |                            ИНАЧЕ ПланированиеБюджетаРасходы.Ссылка.РегионБюджетирования
                       |                        КОНЕЦ,
                       |                        ПланированиеБюджетаРасходы.Статья.Вид) КАК РасходыБюджета
                       |                
                       |                СГРУППИРОВАТЬ ПО
                       |                    РасходыБюджета.Первонач,
                       |                    РасходыБюджета.СтатьяВид) КАК ВложенныйЗапрос
                       |                ПО РасходыБюджета.СтатьяВид = ВложенныйЗапрос.СтатьяВид
                       |        
                       |        СГРУППИРОВАТЬ ПО
                       |            РасходыБюджета.Первонач,
                       |            РасходыБюджета.СтатьяВид,
                       |            ВложенныйЗапрос.Отклонение) КАК Влож
                       |    ГДЕ
                       |        ВЫБОР
                       |                КОГДА &ИспользоватьРасход
                       |                    ТОГДА ИСТИНА
                       |            КОНЕЦ
                       |        И Влож.СтатьяВид = &"+ПараметрФормулы.ПараметрИмя+"
                       |    
                       |    СГРУППИРОВАТЬ ПО
                       |        Влож.СтатьяВид
                       |    
                       |    ОБЪЕДИНИТЬ ВСЕ
                       |    
                       |    ВЫБРАТЬ РАЗЛИЧНЫЕ
                       |        СУММА(Влож.Первонач),
                       |        СУММА(Влож.Корректировка),
                       |        Влож.СтатьяВид
                       |    ИЗ
                       |        (ВЫБРАТЬ
                       |            СУММА(ДоходыБюджета.Первонач) КАК Первонач,
                       |            СУММА(ДоходыБюджета.Коррект) КАК Корректировка,
                       |            СУММА(0) КАК Поле1,
                       |            ДоходыБюджета.СтатьяВид КАК СтатьяВид
                       |        ИЗ
                       |            (ВЫБРАТЬ
                       |                СУММА(ВЫБОР
                       |                        КОГДА ПланированиеБюджетаДоходы.Ссылка.Версия = 2
                       |                            ТОГДА ПланированиеБюджетаДоходы.Сумма
                       |                        ИНАЧЕ 0
                       |                    КОНЕЦ) КАК Первонач,
                       |                СУММА(ВЫБОР
                       |                        КОГДА ПланированиеБюджетаДоходы.Ссылка.Версия = 3
                       |                            ТОГДА ПланированиеБюджетаДоходы.Сумма
                       |                        ИНАЧЕ 0
                       |                    КОНЕЦ) КАК Коррект,
                       |                ПланированиеБюджетаДоходы.Статья.Вид КАК СтатьяВид
                       |            ИЗ
                       |                Документ.ПланированиеБюджета.Доходы КАК ПланированиеБюджетаДоходы
                       |                    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                       |                        BIP_Статьи.Ссылка КАК BIP_Статья,
                       |                        ПОДСТРОКА(BIP_Статьи.КодВЗ, 1, 6) КАК КодFozzy
                       |                    ИЗ
                       |                        Справочник.BIP_Статьи КАК BIP_Статьи) КАК BIP_Статьи
                       |                    ПО ПланированиеБюджетаДоходы.КодFozzy = BIP_Статьи.КодFozzy
                       |            ГДЕ
                       |                ПланированиеБюджетаДоходы.Ссылка.Год = &Год
                       |                И ПланированиеБюджетаДоходы.Ссылка.Месяц МЕЖДУ &МесяцН И &МесяцК
                       |                И ПланированиеБюджетаДоходы.Ссылка.Проведен = ИСТИНА
                       |                И ПланированиеБюджетаДоходы.ПравилоДДС.Код <> ""000000027""
                       |                И ПланированиеБюджетаДоходы.Сумма <> 0
                       |            
                       |            СГРУППИРОВАТЬ ПО
                       |                ВЫБОР
                       |                    КОГДА ПланированиеБюджетаДоходы.Ссылка.РегионБюджетирования = ЗНАЧЕНИЕ(справочник.РегионыБюджетирования.пустаяСсылка)
                       |                        ТОГДА ПланированиеБюджетаДоходы.РегионБюджетирования
                       |                    ИНАЧЕ ПланированиеБюджетаДоходы.Ссылка.РегионБюджетирования
                       |                КОНЕЦ,
                       |                ПланированиеБюджетаДоходы.Статья.Вид) КАК ДоходыБюджета
                       |        
                       |        СГРУППИРОВАТЬ ПО
                       |            ДоходыБюджета.СтатьяВид) КАК Влож
                       |    ГДЕ
                       |        ВЫБОР
                       |                КОГДА &ИспользоватьДоход
                       |                    ТОГДА ИСТИНА
                       |            КОНЕЦ
                       |        И Влож.СтатьяВид = &"+ПараметрФормулы.ПараметрИмя+"
                       |    
                       |    СГРУППИРОВАТЬ ПО
                       |        Влож.СтатьяВид) КАК "+ПараметрФормулы.ПараметрИмя;
            Если ПараметрыФормулы.Индекс(ПараметрФормулы)=0 тогда
                ТекстЗапросаОбщий = ТекстЗапроса;
            Иначе
                 ТекстЗапросаОбщий2 = ТекстЗапросаОбщий2+",
                |("+ТекстЗапроса+")"+"КАК "+ПараметрФормулы.ПараметрИмя;
            КонецЕсли;    
    КонецЦикла;    
           
    ТекстПодмены = "ВЫБРАТЬ
                   |  ";
    ТекстПараметры = "";
    Для каждого ПараметрФормулы из ПараметрыФормулы Цикл
        Формула = СтрЗаменить(Формула,ПараметрФормулы.ПараметрИмя,ПараметрФормулы.ПараметрИмя+".Первонач");
    КонецЦикла;
    ТекстПараметры = "("+Формула+") КАК "+"Итог";
    ТекстПоиска = "ВЫБРАТЬ
                       |    "+ПараметрыФормулы[0].ПараметрИмя+".Первонач";

    ТекстЗапросаОбщий = СтрЗаменить(ТекстЗапросаОбщий,ТекстПоиска,ТекстПодмены+ТекстПараметры);
    ТекстЗапросаОбщий =ТекстЗапросаОбщий+ТекстЗапросаОбщий2;

Параметр функции сейчас только вид статьи, а нужно добавить число, и статью.

Как тогда реализовать проверку ? в запросе или формировать до запрос?
6 i-rek
 
25.02.13
22:16
(5) жуть какая. выбросить нахрен.

жёсткий приоритет функционала над скоростью, отказаться от запросов вообще.
Вспомнить про "вычислить()" и сделать максимально универсальную структуру данных под программируемый калькулятор
7 zladenuw
 
25.02.13
22:18
(6) а где хранить промежуточные ?  дано табличные части документа , шуршать выборкой или запросом все таки ?
8 zladenuw
 
25.02.13
22:19
(6) и я бы не сказал что долго.
9 zladenuw
 
25.02.13
22:20
то что можно оптимизировать запрос по выборке. думаю да. но это позже. главное доделать возможность формулы
10 i-rek
 
25.02.13
22:21
(8) да при чём тут долго ? Я как раз говорю что вы входите в сферу финансовых расчетов.
и не хотите покупать стандартные конструкторы. Стройте свой !
и забудьте про оптимизацию
11 zladenuw
 
25.02.13
22:24
(10) не я там главный. сказали. вот делаю.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший