Имя: Пароль:
1C
1C 7.7
v7: Пример использования нестандартных функций в языке запросов 1с 7.7
,
0 DmitriyDI
 
15.11.13
11:04
Есть запрос
    "//{{ЗАПРОС(Сформировать)
    |Период с НачДата по КонДата;
    |Обрабатывать НеПомеченныеНаУдаление;
    |ПериодВыгрузки = Документ.ВыгрузкаКУ.ПериодВыгрузки;
    |ПериодАктуальности = Документ.ВыгрузкаКУ.ПериодАктуальности;
        |Функция ПериодД = ФункцияПериодЗапроса(ПериодВыгрузки,ПериодАктуальности);
    |"
    ;

ну и соответственно функция
Функция ФункцияПериодЗапроса(Период1,Период2)
    Если ПустоеЗначение(Период2) = 0 Тогда
        Период1 = Период2;
    КонецЕсли;
    Возврат(Период1);
КонецФункции

Как сделать так чтобы это работало в 7ке в 8ке есть такая конструкция как Выбрать когда тогда иначе, она бы сюда пододшла.
1 VladZ
 
15.11.13
11:06
1с++ тебя спасет.
2 DmitriyDI
 
15.11.13
11:09
(1) неужели это невозможно сделать на базе языка запросов 7чного ?
3 mikecool
 
15.11.13
11:10
(2) почитай книжку про запросы в 77
4 mikecool
 
15.11.13
11:11
+3 в запросе есть функция, которая может считаться Когда(Условие)
5 DmitriyDI
 
15.11.13
11:13
(4) на как ее сюда прикрутить ? там ведь только условие, а нет когда тогда иначе
6 DmitriyDI
 
15.11.13
11:16
блин даже Ёпрст пришел! сейчас что-нибудь скажет =)
7 mikecool
 
15.11.13
11:19
(5) почитать книжку, потому как справка в 77 убогая
8 Ёпрст
 
15.11.13
11:20
Свои функции можешь использовать только в условии, в Когда() у функции и в качестве аргументов некоторых "штатных" функций.

Т.е шруппировку или переменную не слепишь.
9 Skom
 
15.11.13
11:22
+(8) только такой подход крайне сильно снижает скорость работы.
10 DmitriyDI
 
15.11.13
11:23
Т.е.  вот так Сумма(ФункцияПериодЗапроса(ПериодВыгрузки,ПериодАктуальности) работало бы если было бы число, но тут дата, нет ведь никакой функции работы с датами в 7ке
11 mikecool
 
15.11.13
11:25
(10) а ты в 8ке часто делал Сумма(Дата)?
12 Skom
 
15.11.13
11:26
(11) я в каждой обработке так делаю.
13 Skom
 
15.11.13
11:26
+(12) даже если мне это и не надо
14 DmitriyDI
 
15.11.13
11:27
(13) очень смешно, правда. (11) да я вот и спрашиваю, есть что-нибудь кроме суммы, для даты
15 Ёпрст
 
15.11.13
11:34
Всё можно сделать и для даты..
Тупо перевод в секунды и привет.
16 Ёпрст
 
15.11.13
11:34
В результате в запросе будет число, на выходе, конвертишь обратно в дату и привет.
17 mikecool
 
15.11.13
11:35
(15) омг, а нафига такой изврат? учитывая, что ты чорными запросами скорее всего уже и не пользуешься
18 Mikeware
 
15.11.13
11:36
(17) для тех, кому религия не позволяет использовать нормальные запросы.... :-)
Т.е. он может писать нормальный код, а может - кошерный :-)
19 Ёпрст
 
15.11.13
11:38
(17) еще как получится

Число('23.01.2013') = 2456316
                                                               Дата (2456316) = 23.01.13

В запросе достаточно

| Функция МояСуперДата = Максимум(
Число('23.01.2013'));

и на выходе через Дата получить дату
20 DmitriyDI
 
15.11.13
11:39
(18) нормальное решение этого запроса можно предложить) ? (15) я понял, можно сделать все, главное знать как
21 Ёпрст
 
15.11.13
11:40
(20) прямой запрос написать.
22 Ёпрст
 
15.11.13
11:40
а так, и как в (19) будет работать
23 DmitriyDI
 
15.11.13
11:40
(22) спасибо большое) пошел пилить запрос)
24 Ёпрст
 
15.11.13
11:41
У тя будет

|Функция ПериодД = Максимум(ФункцияПериодЗапроса(ПериодВыгрузки,ПериодАктуальности));


Функция ФункцияПериодЗапроса(Период1,Период2)
    Если ПустоеЗначение(Период2) = 0 Тогда
        Период1 = Период2;
    КонецЕсли;
    Возврат Число(Период1);
КонецФункции
25 Ёпрст
 
15.11.13
11:42
На выходе, через Дата(Запрос.ПериодД) будешь иметь дату.
26 DmitriyDI
 
15.11.13
11:42
(25) ура)! еще раз спасибо)!
27 mikecool
 
15.11.13
11:43
(25) вот же изврат )))
28 varelchik
 
15.11.13
12:19
(19)Мда....
Никогда не занимался таким извратом.
Хотя помница в 80-е годы были фичи у программируемых калькуляторов что-то типа такого.