Обработка не учитывает года, куда копать?
Здравствуйте, написал обработку, заполняю период с 01.01.2017 по 01.01.2019, обработка рассчитывает только значения которые я указал за 01.01.2017, то есть не учитывает года. Куда эти года можно добавить чтобы цикл выполнялся правильно? Заранее спасибо
ДатаНач = 01.01.2017
ДатаКон = 01.01.2019
ДатаНач = 01.01.2017
ДатаКон = 01.01.2019
Если Месяц(ДатаНач) = Месяц(ДатаКон) ИЛИ Месяц(ДатаНач) <> Месяц(ДатаКон) Тогда
Для i = 0 По Месяц(ДатаКон) - Месяц(ДатаНач) Цикл
ДатаНачТемп = НачалоМесяца(ДобавитьМесяц(ДатаНач, i));
ДатаКонТемп = КонецМесяца(ДобавитьМесяц(ДатаНач, i));
Запрос.УстановитьПараметр("ДатаНач", Новый Граница(НачалоДня(ДатаНачТемп), ВидГраницы.Включая));
Запрос.УстановитьПараметр("ДатаКон", Новый Граница(КонецДня(ДатаКонТемп), ВидГраницы.Включая));
Запрос.УстановитьПараметр("ДатаНачП", НачалоДня(ДатаНачТемп));
Запрос.УстановитьПараметр("ДатаКонП", КонецДня(ДатаКонТемп));
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Договор", ДоговорКонтрагента);
Запрос.УстановитьПараметр("Счет", Счет);
РезультатЗапроса = Запрос.Выполнить();
ТЗ = РезультатЗапроса.Выгрузить();
ТЗ.Колонки.Добавить("ДнейПользованияЗаймом");
ТЗ.Колонки.Добавить("СуммаНачисленная");
ТЗ.Колонки.Добавить("ДатаНачала");
ПоказатьПо теме из базы знаний
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(3)Уважаемый, месяц возвращает что? Месяц без даты, он же число. В году сколько месяцев? 12. Вот он у вас и пройдёт 12 раз)
Так что смотрите внимательно на вашу конструкцию
Месяц (Month)
Синтаксис:
Месяц(<Дата>)
Параметры:
<Дата> (обязательный)
Тип: Дата.
Исходная дата.
Возвращаемое значение:
Тип: Число.
Месяц в указанной дате.
Синтаксис:
Месяц(<Дата>)
Параметры:
<Дата> (обязательный)
Тип: Дата.
Исходная дата.
Возвращаемое значение:
Тип: Число.
Месяц в указанной дате.
Так что смотрите внимательно на вашу конструкцию
Для i = 0 По Месяц(ДатаКон) - Месяц(ДатаНач) Цикл
(6) Сделал так
&НаКлиенте
Функция КоличествоМесяцевМеждуДатами(НачальнаяДата, КонечнаяДата)
МесяцНачальнойДаты = Месяц(НачальнаяДата);
МесяцКонечнойДаты = Месяц(КонечнаяДата);
КоличествоЛет = Год(КонечнаяДата) - Год(НачальнаяДата);
КоличествоМесяцев = КоличествоЛет * 12 - МесяцНачальнойДаты + МесяцКонечнойДаты;
Возврат КоличествоМесяцев;
КонецФункции
ПоказатьДля i = 0 По КоличествоМесяцев Цикл
ДатаТек = НачалоМесяца(ДатаНач)
Пока ДатаТек<=НачалоМесяца(ДатаКон) цикл
*****************************
*****************************
*****************************
ДатаТек = ДобавитьМесяц(ДатаТек ,1)
КонецЦикла
Пока ДатаТек<=НачалоМесяца(ДатаКон) цикл
*****************************
*****************************
*****************************
ДатаТек = ДобавитьМесяц(ДатаТек ,1)
КонецЦикла
1. Если Месяц(ДатаНач) = Месяц(ДатаКон) ИЛИ Месяц(ДатаНач) <> Месяц(ДатаКон)
Не расскажете в каком случае сие условие станет ложным? Если не сможете, то может расскажете какой смысл в этом условии?
2. Зачем идиотские пляски с номерами месяцев, которые, кстати, повторяются в годах (вы не знали об этом?), если можно просто цикл по временным датам с увеличением их на единицу в каждом проходе цикла?
Не расскажете в каком случае сие условие станет ложным? Если не сможете, то может расскажете какой смысл в этом условии?
2. Зачем идиотские пляски с номерами месяцев, которые, кстати, повторяются в годах (вы не знали об этом?), если можно просто цикл по временным датам с увеличением их на единицу в каждом проходе цикла?
// Процедура вычисляет количество лет, месяцев и дней между двумя датами
//
// Параметры
// Дата1 – дата, первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату)
// Дата2 – дата, вторая дата (ранняя дата, с нее начинается "течение" стажа)
// Лет – Число, в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2)
// Месяцев – Число, в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2)
// Дней – Число, в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2)
//
Процедура РазобратьРазностьДат(Дата1, Дата2, Лет = 0, Месяцев = 0, Дней = 0) Экспорт
Лет = 0;
Месяцев = 0;
Дней = 0;
Если Дата1 > Дата2 Тогда
ВременнаяДата = Дата1;
Если День(ВременнаяДата) < День(Дата2) Тогда
Дней = (ВременнаяДата - ДобавитьМесяц(ВременнаяДата,-1))/86400;
ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-1);
КонецЕсли;
Если Месяц(ВременнаяДата) < Месяц(Дата2) Тогда
ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-12);
Месяцев = 12;
КонецЕсли;
Лет = Макс( Год(ВременнаяДата) - Год(Дата2), 0);
Месяцев = Макс(Месяцев + Месяц(ВременнаяДата) - Месяц(Дата2), 0);
Дней = Макс(Дней + День(ВременнаяДата) - День(Дата2), 0);
// скорректируем отображаемое значение, если "вмешалось" разное количество дней в месяцах
Если Дата2 <> (ДобавитьМесяц(Дата1,-Лет*12-Месяцев)-Дней*86400) Тогда
Дней = Дней + ((ДобавитьМесяц(Дата1,-Лет*12-Месяцев)-Дней*86400) - Дата2)/86400;
//(День(КонецМесяца(Дата2)) - День(НачалоМесяца(Дата2))) - (День(КонецМесяца(ДобавитьМесяц(Дата1,-1))) - День(НачалоМесяца(ДобавитьМесяц(Дата1,-1))));
КонецЕсли;
КонецЕсли;
КонецПроцедуры // РазобратьРазностьДат
Показать