Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разность двух дат в запросе
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
bereznoy
Как в запросе получить разницу двух дат между текущей датой и датой документа
в целых числах и сравнить с числом, подскажите плз
Pepe
А Период в запросе указывайте. Или я чего-то не понял.
bereznoy
Цитата(Pepe @ 08.04.12, 22:50) необходимо зарегистрироваться для просмотра ссылки
А Период в запросе указывайте.

Конечно, но надо сравнить не количество дней между началом периода и концом периода, а текущую дату и дату документа
logist
Передайте текущую дату как параметр, и сравнивайте с датой документа в запросе. в чем трабл?
bereznoy
Цитата(logist @ 08.04.12, 23:02) необходимо зарегистрироваться для просмотра ссылки
Передайте текущую дату как параметр, и сравнивайте с датой документа в запросе. в чем трабл?

Так и сделал, пишу функцию ....... и когда начинаю сравнивать
 .... когда (ТД-ДатаДок/86400<15)

аналогично сравниваю с интервалом дней от 15 до 30 и более 30 дней, это задолженность, грубо три колонки
в одной до 15 дней, вторая от 15 до 30, и 3-я более 30 дней, вообщем все в первой колонке,некоторые в третьей или второй
не ясно почему 47046430.gif

Кстати если пишу в запросе функцию и вывожу ее в отчет то показывает правильное количество дней,но как их сравнить
Функция Дни = Сумма(ТД-ДатаДок)
- показывает правильное количество дней!
MATEVI
А что есть 86400? В 77 дата это дата без времени
bereznoy
Цитата(MATEVI @ 09.04.12, 0:00) необходимо зарегистрироваться для просмотра ссылки
А что есть 86400? В 77 дата это дата без времени

60 сек * 60 минут * 24 часа = количество секунд в сутках, вообще это так.... пробы были ,предположения того что при разности получаются секунды
Ardi
Запрос.УстановитьПараметр("Дата30",началоДня(ТекущаяДата())-(30 * 60*60*24));
Запрос.УстановитьПараметр("Дата15",началоДня(ТекущаяДата())-(15 * 60*60*24));
bereznoy
Вот сам отчетиГ короый добить не могу, помогите плз
необходимо зарегистрироваться для просмотра ссылки
Ardi
в 7.7 даты не выражаются в секундах и делить на 86400 ничего не нужно.
bereznoy
Цитата(Ardi @ 09.04.12, 21:44) необходимо зарегистрироваться для просмотра ссылки
в 7.7 даты не выражаются в секундах и делить на 86400 ничего не нужно.

А как мне сделать что взависимости от количества дней задолженности сумма отражалась в нужном столбце?
vnbsoft
Дата2-Дата1 и получите разницу в днях, например дата2=09.04.12, дата1=02.04.12, дата2-дата1=7
bereznoy
Цитата(vnbsoft @ 09.04.12, 21:57) необходимо зарегистрироваться для просмотра ссылки
Дата2-Дата1 и получите разницу в днях, например дата2=09.04.12, дата1=02.04.12, дата2-дата1=7

Дык я так и делал, я даже сам отчетик выложил по ссылочке, в этом и проблема что не получается, не равно "7"
Pepe
Размер файла 0. Так и должно быть?
bereznoy
необходимо зарегистрироваться для просмотра ссылки
vnbsoft
Если я не ошибаюсь - проблема в Сумма(ДолгПоНакл). А с датами все нормально.
bereznoy
Цитата(vnbsoft @ 09.04.12, 22:38) необходимо зарегистрироваться для просмотра ссылки
Если я не ошибаюсь - проблема в Сумма(ДолгПоНакл). А с датами все нормально.

Нет, например накладная выписана 16 дней назад, сумма будет в столбике там где срвание <15 , суммы все правильно показывает, по столбиками разносит не правильно, почти все в первом столбике

Пока нашел такой выход
    Пока Запрос.Группировка(1) = 1 Цикл
        
        // Заполнение полей РасходнаяРеализатора
        стр=стр+1;
        Если Запрос.Секунды>30 Тогда
            Тридцать=Запрос.ДолгПоНакл;
            ДоПятнадцати="";
            ДоТридцати="";
    ИначеЕсли Запрос.Секунды<15 Тогда
             ДоПятнадцати=Запрос.ДолгПоНакл;
             ДоТридцати="";
             Тридцать="";
//ИначеЕсли Запрос.Секунды<30 и Запрос.Секунды>15 Тогда
//            ДоТридцати=Запрос.ДолгПоНакл;
        КонецЕсли;
        Таб.ВывестиСекцию("РасходнаяРеализатора");
    КонецЦикла;


Вот только от 15 до 30 ругает на "и", подскажите плз

Вот такая вот ошибка
ИначеЕсли Запрос.Секунды>15 и Запрос.Секунды<<?>><30 Тогда
{Отчет.ФинОтчёт2012.Форма.Модуль(115)}: Неправильное использование арифметической или строковой операции


вроде условие что б было значение меньше 30 и больше 15, или если как то модно интервал задать от 15 до 30
vnbsoft
Вместо ТД пишите РабочаяДата() в самом запросе и будет Вам счастье.
bereznoy
Ооо...вот так работает
    Пока Запрос.Группировка(1) = 1 Цикл
        
        // Заполнение полей РасходнаяРеализатора
        стр=стр+1;
        Если Запрос.Секунды>30 Тогда
            Тридцать=Запрос.ДолгПоНакл;
            ДоПятнадцати="";
            ДоТридцати="";
    ИначеЕсли Запрос.Секунды<15 Тогда
             ДоПятнадцати=Запрос.ДолгПоНакл;
             ДоТридцати="";
             Тридцать="";
ИначеЕсли (Запрос.Секунды>15) и (Запрос.Секунды<30) Тогда
            ДоТридцати=Запрос.ДолгПоНакл;
            Тридцать="";
            ДоПятнадцати="";
        КонецЕсли;
        Таб.ВывестиСекцию("РасходнаяРеализатора");
    КонецЦикла;


Только теперь надо итоги внизу по столбикам в печатной форме, хз как!!! 44000000.gif
vnbsoft
Я ж написал что делать, а если уж хочется таким способом, то завести еще три переменные ИтогДоПятнадцати и т.д. и их суммировать по условию.
bereznoy
Цитата(vnbsoft @ 09.04.12, 23:10) необходимо зарегистрироваться для просмотра ссылки
Я ж написал что делать, а если уж хочется таким способом, то завести еще три переменные ИтогДоПятнадцати и т.д. и их суммировать по условию.

В файлике который я выложил как раз делал как Вы предложили, так не работает, почему то (((, меня устраивает и мой вариант, вот только как итоги посчитать теперь в колонуе, подскажите плз
Ardi
Итог0=0;
Итог15=0;
Итог30=0;
    Пока Запрос.Группировка(1) = 1 Цикл
        
        // Заполнение полей РасходнаяРеализатора
        стр=стр+1;
        Если Запрос.Секунды>30 Тогда
Итог30=Итог30+Запрос.ДолгПоНакл;
            Тридцать=Запрос.ДолгПоНакл;
            ДоПятнадцати="";
            ДоТридцати="";
    ИначеЕсли Запрос.Секунды<15 Тогда
Итог0 = Итог0+Запрос.ДолгПоНакл;
             ДоПятнадцати=Запрос.ДолгПоНакл;
             ДоТридцати="";
             Тридцать="";
ИначеЕсли (Запрос.Секунды>15) и (Запрос.Секунды<30) Тогда
Итог15=Итог15+Запрос.ДолгПоНакл;
            ДоТридцати=Запрос.ДолгПоНакл;
            Тридцать="";
            ДоПятнадцати="";
        КонецЕсли;
        Таб.ВывестиСекцию("РасходнаяРеализатора");
    КонецЦикла;
vnbsoft
Цитата(bereznoy @ 09.04.12, 23:15) необходимо зарегистрироваться для просмотра ссылки
В файлике который я выложил как раз делал как Вы предложили, так не работает, почему то (((, меня устраивает и мой вариант, вот только как итоги посчитать теперь в колонуе, подскажите плз

нет, в файлике в запросе идет переменная ТД, я вместо нее написал явно РабочаяДата() и все стало работать, по крайней мере у меня. ;-)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.