В БД значение даты храниться в формате dd.mm.yyyy hh:mm:ss

В шаблоне письма должна быть дата в формате dd.mm.yyyy. Дата вставляется в шаблон письма из пользовательского запроса. Как конвертировать дату в нужный формат в пользовательском запросе?

Может быть есть ещё какие-то варианты?

Нравится

Поделиться

4 комментария

Попробуйте изменить свойство Kind для нужного поля в шаблоне:
dtkDate - Дата.
dtkTime - Время.
dtkDateTime - Дата / Время.

"Вадим_" написал:В БД значение даты храниться в формате dd.mm.yyyy hh:mm:ss

Вадим, а как Вы это определили? Вы храните в текстовом поле?

Fishi, спасибо.

Понял, как сделать проще. Даблклик на значении колонки открывает её свойства. В поле "Формат отображения дат" нужно просто выбрать необходимое.

"Осауленко Александр" написал:Вы храните в текстовом поле?

Нет, конечно. Я беру это поле в пользовательский запрос, и оно выводится в этом формате.

Вадим, ну так это формат представления данных на клиенте, в БД поле дата - это число с плавающей запятой. А то как его уже интерпретирует клиент, зависит от региональных настроек и самого клиента.

Показать все комментарии

Всем доброго времени суток!
Есть Dataset где отображаются записи за определённый период. В первом столбце отображаются даты по порядку за указанный период. Если за данную дату нет записей отображается просто пустая строка с датой.
Как реализовать отображение того же Dataset только вместо первого столбца дат указать недели за указанный период, с указанием какая неделя по счёту с начала года???
Т.е. поменять режим отображения с "День" на "Недели".

Нравится

3 комментария

Как вариант, могу предложить добавить в SelectQuery поле
CustomSQL, где прописать код:

DATEPART(week, [MyDateField]);

http://msdn.microsoft.com/en-us/library/ms174420.aspx

--
www.it-sfera.com.ua

Я так понимаю это мне даст номер недели начала периода и номер недели окончания периода??? а как узнать дату начала и дату окончания каждой недели за период???

Теоретически :wink:

Первый день недели:

[MyDateField] - (DATEPART(DW,  [MyDateField]) - 1) 

Последний день недели

[MyDateField] + (7 - DATEPART(DW,  [MyDateField]))

Попробуйте - и узнаем практически :biggrin:

--
www.it-sfera.com.ua

Показать все комментарии

Подскажите пожалуйста как выбрать вчерашнюю дату.
Дело в том, что мне нужно чтоб при создании записи, по умолчанию проставлялась вчерашняя дата.

Нравится

6 комментариев

В scr_DateUtils есть много функций по работе с датами. Нужная Вам функция находится в scr_Utils

function AddDateDays(DateTime, Days) {
	var ResultDate = new Date(DateTime);
	ResultDate.setDate(DateTime.getDate() + Days);
	return ExtractDate(ResultDate);
}

Извините, не могу разобраться с аргументами функции.
Что именно вписать в аргументы чтобы получать вчерашнюю дату?
Вот я пишу так:

...DatasetAfterAppend...
//для сегодняшней
var Today = GetLocalDate();
Dataset.ValAsDateTime('TodayMyDate') = Today;

//для вчерашней
var Yesterday = AddDateDays(???, ???) ;
Dataset.ValAsDateTime('YesterdayMyDate') = Yesterday ;

var Yesterday = AddDateDays(GetLocalDate(), -1);

Александр, при использовании этого скрипта поле остается пустым, дата не выставляется и никакую ошибку не выдает. Может я что-то не так пишу?
Проверьте пожалуйста у себя:

var Yesterday = AddDateDays(GetLocalDate(), -1);
Dataset.Values('YesterdayMyDate') = Yesterday ;

Измените немного:

  Dataset.Values('YesterdayMyDate') = Yesterday.getVarDate();

Лабитек
Центр разработки приложений

"Глова Сергей" написал:В scr_DateUtils есть много функций по работе с датами. Нужная Вам функция находится в scr_Utils

А у меня в 3.1.1 их совсем немного:sad:, но именно этот пример и был нужен!
Спасибо:twisted:

Показать все комментарии

Как в терасофте поставить месяц в родительный падеж???
Например, чтобы выдавалось вместо Январь Января

Нравится

22 комментария

Можно написать свою функцию, которая по номеру месяца возвращает его название в нужном падеже...

скорее по номеру числа в месяце а не по номеру месяца

"Шевченко Юрий" написал:скорее по номеру числа в месяце а не по номеру месяца

Первое января
второе января
двадцать девятое января

Кстати у меня была давняя задумка вообще функцию добавить в Terrasoft, которая бы возвращала любой падеж... Понятно, что неидеально и сложно бы она работала, но все же. Решилась бы проблема обращений, месяцев и т.д...
но руки естественно не доходят:smile: может в Идеи?

"Александр Кудряшов" написал:Решилась бы проблема обращений, месяцев и т.д.

А это вообще возможно? Если только с использованием каких-нибудь веб-сервисов больших словарей

как вариант платная библиотека http://morpher.ru/Default.aspx. Либо аналоги...
Понятно, что для наилучших результатов нужны большие словари, либо пополняемые, либо доступные в сети.

"Александр Кудряшов" написал:для наилучших результатов нужны большие словари

Лучше самому просклонять фамилию клиента, нежели потом автоматом будет выслано неправильно.

Собственно, нужно для Fast Report, чтобы поле типа "Дата" выходило с месяцем в нужном падеже.
Простым форматированием получается "1 Январь 2010"

Наверное, придется в элементе управления прописывать iif([MonthOf([Date])] = 1; 'Января'; iif()) и так далее.

"Раловец Ольга" написал:Наверное, придется в элементе управления прописывать iif([MonthOf([Date])] = 1; 'Января'; iif()) и так далее.

Или такие варианты:
- в Dataset отчета добавить вычисляемое поле, которое заполняется в скрипте к Dataset;
- в SelectQuery отчета добавить колонку с текстом SQL, в котором через (CASE WHEN THEN END) вычислить месяц.

"Парфенов Евгений" написал:Собственно, нужно для Fast Report, чтобы поле типа "Дата" выходило с месяцем в нужном падеже.
Простым форматированием получается "1 Январь 2010"

в отчете в Code добавляете функцию типа

function MonthDecl(aDate: TDateTime): String;  
begin
    case MonthOf(aDate) of
    0: Result:= 'Января';
    1: Result:= 'Февраля';
    //...
    end            
end;

и вызываете ее где необходимо

Всем спасибо. Публикую полученную версию - может кому понадобится :)

// Дата в родительном падеже
function DecodeDateRod(aDate: TDateTime): String;
var m : string;
d, y : integer;
begin
m:= '';

case MonthOf(aDate) of
0: m:= 'Января';
1: m:= 'Февраля';
2: m:= 'Марта';
3: m:= 'Апреля';
4: m:= 'Мая';
5: m:= 'Июня';
6: m:= 'Июля';
7: m:= 'Августа';
8: m:= 'Сентября';
9: m:= 'Октября';
10: m:= 'Ноября';
11: m:= 'Декабря';
end;

d := DayOf(aDate);
y := YearOf(aDate);

Result := Inttostr(d) + ' ' + m + ' ' + Inttostr(y) + 'г.';
end;

Около года назад тоже сделал такую процедурку)) Возникала частая потребность, так что даже выделил в отдельный скрипт, хотел еще назвать 'имени FastReport':lol:

Поправочка - отчет должен идти с 1цы... 1= Январь и пр..

Да нет, все же с 0. Я настаиваю:wink:

"Fishi" написал:Да нет, все же с 0. Я настаиваю

Вы настаиваете, а у меня счета будущим месяцем проходят...
Меня такое как то мягко говоря не очень устраивает :)

Тогда у меня надо сначала m++)))
У меня версия TS 3.1.1 X25, хотя не думаю что это существенно... Ждем пока кто разяснит ситуацию, пока 1:1)

А у меня TS 3.3.0.61 )))

Подскажите, куда вставлять данную функцию и как ее вызвать в FastReports?

Функция DecodeDateRod описанная в комментарии
http://www.community.terrasoft.ru/forum/topic/4393#comment-17243
формирует дату в формате 29 Сентября 2011 г.
Данную фунцию следует объявить в вкладке Code в сервисе FastReport

Саму функцию следует объявить до самого ее вызова, к примеру в самом начеле кода.

Предположим, что у нас есть Memo1 контрол который находится на странице FastReport в котором мы отображаем дату

Добавим обработчик OnBeforePrint на Memo1

В коде обработчика будем вызывать функцию преобразования даты

procedure Memo1OnBeforePrint(Sender: TfrxComponent);
begin
Memo1.Text :=DecodeDateRod(<TSDataset1."MyDate">);
end;

В данном коде предполагается, что к отчету подключен TSDataset1, в котором задан конкретный Dataset, в котором есть колонка MyDate где хранится даты для отображения
В предпросмотре получим следующий результат

Полный код сервиса FastReport:

function DecodeDateRod(aDate: TDateTime): String;
var m : string;
d, y : integer;
begin
m:= ''; 
case MonthOf(aDate) of
0: m:= 'Января';
1: m:= 'Февраля';
2: m:= 'Марта';
3: m:= 'Апреля';
4: m:= 'Мая';
5: m:= 'Июня';
6: m:= 'Июля';
7: m:= 'Августа';
8: m:= 'Сентября';
9: m:= 'Октября';
10: m:= 'Ноября';
11: m:= 'Декабря';
end;
d := DayOf(aDate);
y := YearOf(aDate); 
Result := Inttostr(d) + ' ' + m + ' ' + Inttostr(y) + 'г.';
end;
 
procedure Memo1OnBeforePrint(Sender: TfrxComponent);
begin
Memo1.Text :=DecodeDateRod(<TSDataset1."MyDate">);
end;
 
begin
 
end.

Пример сервисов, на которых тестировал вывод, в прикрепленных файлах.

Алексей, без Ваших пояснений никогда бы не разобрался) Все получилось!

Единственное, результат полностью перебивал значение Memo (выводилась только дата), а мне в нем нужны были еще данные, для заголовка счета. В результате дописал процедуру, не знаю насколько это корректно, но нужного результата я добился:

procedure Memo13OnBeforePrint(Sender: TfrxComponent);
begin
Memo13.Text :='Счет №' + Inttostr(<ds_ReportInvoiceWithNDSForRussia."InvoiceNumber">)+ ' ' + 'от' + ' ' + DecodeDateRod(<ds_ReportInvoiceWithNDSForRussia."InvoiceDate">);
end;

Рад, что у вас все получилось, если будут вопросы, обращайтесь.

Показать все комментарии

Проблема заключается в определении сегодняшней даты для курса валют...
Процедура:
1) Установил в справочнике курс евро на сегодня 16.09.2009
2) Открыл вчерашний счёт и переставил дату на сегодня.
3) На всякий случай переоткрыл счёт и выбрал доллар, затем евро(для обновления) - курс остался вчерашний.
4) Создал новый счёт(для проверки), и в новом счёте курс вчерашний.
4) Закрыл систему, открыл заново
5) Открыл оба счёта выбрал евро - курс установился сегодняшний.

Предварительное заключение:
Не обновляется курс согласно даты, так как отладчик в GetRate запускает правильную дату, но на выходе получает курс предидущей даты.

---
Конфигурация:
TSCRM 3.3.1.36
Firebird 2.0 (v.2.0.3.12981)

Нравится

11 комментариев

У меня была та же проблема, долго не могли разобраться! Нам помогло только использование Даты и времени (курс на 16.09.09 00:00:00 до 16.09.09 23:59:59). Странно конечно, но вопрос мы таким способом закрыли :wink:

--
www.it-sfera.com.ua

Здравствуйте.
Обновитесь как минимум до версии 3.3.1.38

"Клименко Николай" написал:Обновитесь как минимум до версии 3.3.1.38

Обновился до версии 3.3.1.45 - теперь курс на дату счёта вобще не находит...Говорит нет курса на 17.09.2009...

"Виталий Ковалишин aka samael" написал:

А можете детальнее рассказать что и где Вы правили?

---
Конфигурация:
TSCRM 3.3.1.36 - обновился до 3.3.1.45
Firebird 2.0 (v.2.0.3.12981)

Сервис wnd_CurrencyRateEdit
Для контролов edtStartDate и edtDuDate
Свойство Kind установить в dtkDateTime

--
www.it-sfera.com.ua

"Виталий Ковалишин aka samael" написал:Сервис wnd_CurrencyRateEdit
Для контролов edtStartDate и edtDuDate
Свойство Kind установить в dtkDateTime

На 3.3.1.45 теперь находит курс, но всё равно предидущий выставленный...
Имеет ли смысл откатится до 3.3.1.36 и проверить реакцию на эти изменения там?

---
Конфигурация:
TSCRM 3.3.1.36
Firebird 2.0 (v.2.0.3.12981)

Я это делал на 3.3.0

--
www.it-sfera.com.ua

Попробуйте 38-ые без изминений или обновитесь до 3.3.1.59(на данный момент - самый стабильный билд)

обновился до 3.3.1.59
всё равно определяет курс за дату первого открытого счёта
То есть:
Открыл счёт за сегодня курс опредилился за сегодня...
Закрыл счёт
Открыл счёт за 16.09.09 переставил валюту на дол.США
Сообщение "Курс на 16.09.09 не выставлен" (его просто нет)
Возвращаю валюту на Евро, - получаю курс не за 16.09.09, а за сегодня.

---
Конфигурация:
TSCRM 3.3.1.36
Firebird 2.0 (v.2.0.3.12981)

Курс выставляется в зависимости от валюты (в момент ее изменения в карточке счета) с учетом даты, а не в момент изменения даты.
Видимо проблема именно в Вашей базе. Необходимо протестировать данную проблему на Вашей базе.
Согласно Вашего обращения заведен инцидент №056218.

"Клименко Николай" написал:

Огромное спасибо за Вашу помощь.
Решение следующее:
1)Обновится до 3.3.1.59
2)
"Клименко Николай" написал:
Вам необходимо изменить сервис scr_CurrencyUtils в функции GetRate дописать строку EnableDatasetFilters(Dataset, false);
В месте, как указано на рис 1 во вложении.
После строки var Dataset = GetSingleItemByCode ....
Перед строкой ApplyDatasetFilter ....
Всё работает, но только если воспользоваться Вашим советом

3)
"Виталий Ковалишин aka samael" написал:У меня была та же проблема, долго не могли разобраться! Нам помогло только использование Даты и времени (курс на 16.09.09 00:00:00 до 16.09.09 23:59:59). Странно конечно, но вопрос мы таким способом закрыли :wink:

Только после таких танцев с бубном курс действительно стал определятся в соответствии с датой курса.
Ещё раз, всем спасибо за помощь.
---
Конфигурация:
TSCRM 3.3.1.59
Firebird 2.0 (v.2.0.3.12981)

Очень весело :)

--
www.it-sfera.com.ua

Показать все комментарии

Подскажите, пожалуйста, как получить значение даты начала и даты окончания текущего года?
Мне нужно заполнять этими значениями два поля с типом "Дата".
Возможно есть какие-то стандарные функции?

Нравится

4 комментария

По моему, это константы. Не совсем понятен вопрос.

var Year = new Date().getFullYear();
var StartDate = new Date(FullYear, 0, 1).getVarDate();
var FinishDate = new Date(FullYear, 11, 31).getVarDate();

Спасибо, все работает.

На здоровье :)

Показать все комментарии

Функция возвращает дату с прибавленным количеством временНых единиц.

function AddDateDateUnits(StartDate, UnitCount, UnitID) {
    StartDate = new Date(StartDate);
    if (IsEmptyValue(UnitID)) {
        UnitID = duDay;
    }
    var FullYear = StartDate.getFullYear();
    var Month = StartDate.getMonth();
    var Day = StartDate.getDate();
    var Hour = StartDate.getHours();
    var Min = StartDate.getMinutes();
    var EndDate = StartDate;
    switch (UnitID) {
    case duYear: EndDate = new Date(FullYear + UnitCount, Month, Day,
        Hour, Min);
        break;
    case duMon: EndDate = new Date(FullYear, Month + UnitCount, Day,
        Hour, Min);
        break;
    case duDay: EndDate = new Date(FullYear, Month, Day + UnitCount,
        Hour, Min);
        break;
    case duHour: EndDate = new Date(FullYear, Month, Day, Hour
        + UnitCount, Min);
        break;
    case duMin: EndDate = new Date(FullYear, Month, Day, Hour,
        Min + UnitCount);
        break;
    }
    return EndDate;
}

Функция возвращает разницу между датами в указанных временНых единицах.
Параметр IsCorrectDays означает, что будет произведен расчет в абсолютных днях.

function GetDateDiffByUnitID(StartDate, EndDate, UnitID, IsCorrectDays) {
    StartDate = new Date(StartDate);
    EndDate = new Date(EndDate);
    if (IsEmptyValue(UnitID)) {
        UnitID = duDay;
    }
    var FullYear = StartDate.getFullYear();
    var Month = StartDate.getMonth();
    var Day = StartDate.getDate();
    var Hour = StartDate.getHours();
    var Min = StartDate.getMinutes();
    var UnitCount = 0;
    var YearsCount = EndDate.getFullYear() - FullYear;
    if (duYear == UnitID) {
        return YearsCount;
    }
    var MonthCount = YearsCount * 12 + (EndDate.getMonth() - Month);
    if (duMon == UnitID) {
        return MonthCount;
    }
    StartDate.setSeconds(0);
    StartDate.setMilliseconds(0);
    EndDate.setSeconds(0);
    EndDate.setMilliseconds(0);
    if (duDay == UnitID) {
        if (!IsCorrectDays) {
            StartDate.setHours(0);
            StartDate.setMinutes(0);
            EndDate.setHours(0);
            EndDate.setMinutes(0);
        }
        var DaysCount = Math.floor((EndDate.getTime()
            - StartDate.getTime())/1000/60/60/24);
        return DaysCount;
    }
    if (duHour == UnitID) {
        var HoursCount = Math.floor((EndDate.getTime()
            - StartDate.getTime())/1000/60/60);
        return HoursCount;
    }
    if (duMin == UnitID) {
        var MinsCount = Math.floor((EndDate.getTime()
            - StartDate.getTime())/1000/60);
        return MinsCount;
    }
}

Необходимо также подключить к скрипту, где будут описаны функции,
перечисление - enm_DurationUnit (Единицы измерения времени)

duMin - минуты
duHour - часы
duDay - дни
duMon - месяца
duYear - года

Нравится

Поделиться

2 комментария

Под рукой нет администратора, но по-моему все эти функции описаны в scr_DateUtils, нет?

Там в аналогичной функции GetDateDiffByUnitID нет месяца и года, а также признака IsCorrectDays. А в функции AddDateDays прибавляются только дни.

Показать все комментарии

Для формирования первичной базы клиентов я создал новый раздел в конфигурации в "Продажах". Цель была следующая: есть большая свалка компания, которых нужно обзвонить (телефонные продажи). Вести их как Контрагентов нет смысла - слишком трудоемкий процесс создания карточки, а вероятность отказа высока. Поэтому было решено сделать раздел, в котором менеджеры смогут быстро занести минимум необходимой информации, при этом это будет единая база, можно будет контролировать процесс работы и видеть результаты в разрезе по менеджерам и датам.

Была создана новая таблица с полями:

  • Клиент
  • Статус
  • Телефон
  • Улица
  • Дом
  • Офис
  • Ответственный
  • Дата смены статуса

В поле Дата смены статуса заносилась текущая дата при первой смене статуса клиента. Таким образом по дням отслеживается работа менеджеров.

Так же были добавлены общие детали Группа и Описание. В Описание заносились результаты работы.

Для работы с этой таблицей был сделан редактируемый грид, что позволило менеджерам очень быстро заполнять эту базу. Фактически работа стала похожа на работу в Excel - менеджеры добавляли пустые строки и сразу в ячейках писали текст, либо выбирали из выпадающего списка.

Но при работе с фильтром дат возникли следующие проблемы:

  1. Очень не удобно в ручную исправлять дату, так как фокус все время скачет обратно в грид.
  2. Практически невозможно работать с календарём при выборе дат, так как если курсор стоял в гриде и сразу нажать кнопку календаря, то вываливается ошибка "Cannot change Visible on OnShow or OnHide" и предлагается отправить отчет в Террасофт.

Данная проблема относится видимо только к более старым версиям (у нас 3.1.1.6). По совету в первой записи моего блога, которая "чудесным" образом исчезла (видимо за критику) проверил ситуацию на последней версии, там этой проблемы нет - календарь корректно работает даже при редактируемом гриде. А вот скачет ли фокус - забыл проверить.

Проблему с календарем решить не удалось, а вот ситуацию со скачущим фокусом удалось сильно смягчить. Именно смягчить, но не исправить совсем. Для этого на событие OnEnter полей фильтра дат был добавлен обработчик, который в момента входа в это поле выключал свойство редактируемости грида. То есть когда менджер щелкает на поле для редактирования даты, то грид перестает быть редактируемым, и фокус перестает скакать. Можно спокойно править дату. Правда теперь на поле даты приходится щелкать два раза. После первого щелчка грид перестает быть редактируемым, но курсор не встает в поле даты.
Так же на событие OnClick самого грида был добавлен обработчик, который обратно делал свойство IsEditable равным True.

Пробовал добавлять обработчик, который менял бы свойство IsEditable на событиях OnEnter и OnExit самого грида, но тогда даже при простом перемещении по строкам срабатывают оба события и тоже самое сообщение - "Cannot change Visible on OnShow or OnHide" - начинает вываливаться в лог. Уже легче, но все равно не то.

Результат:

  • Менеджеры могут очень быстро вести базу. Есть возможность контроля по датам и менеджерам.
  • При исправлении даты в фильтре приходится щелкать на поле два раза.
  • Для того, чтобы открыть календарь для выбора даты, нужно сначала войти в поле редактирования даты. То есть в итоге нужно три клика: два раза на поле и один раз на кнопке календаря.

Планируемые доработки:

  • Возможность вешать задачи на клиентов в первичной базе.
  • Создание карточки контрагента на основе записи в первичной базе.

Нравится

Поделиться

5 комментариев

Проверил последнюю версию на скачки фокуса. При вводе даты вручную курсор перескакивает и в новой версии. Это происходит из-за того, что как только система видит нормальную дату, она тут же обновляет датасет грида и курсор прыгает назад в грид. Таким образом, если мы хотим изменить не только день, месяц или год, а минимум две цифры, то придется каждый раз щелкать на поле ввода даты.

При использовании описанного выше метода (выключение свойства IsEditable при входе в поле даты) обновление грида также происходит при исправлении хотя бы одной цифры, но курсор остается в поле даты и можно продолжать исправлять без дополнительных щелчков мыши.

Алексей, спасибо за замечания! Обязательно внесем корректировки и вышлем Вам исправления.

Алексей, добрый день. В базовой версии Terrasoft обе указанные проблемы воспроизвести не удалось.
Тестирование проводилось на версии 3.1.1.49.
Указанные Вами ошибки могут быть связаны с теми доработками, которые Вы самостоятельно вносите в конфигурацию. С Вами свяжутся специалисты службы технической поддержки для уточения деталей, необходимых для воспроизведения и последующего исправления возможных проблем.

Нет. Это точно не из-за доработок. В версии 3.1.1.49 ошибку "Cannot change Visible on OnShow or OnHide" еще не проверял. А вот фокус скачет даже в самой последней версии, которая на вашем сайте в Демо.

Можете сами попробовать, в любом разделе, любой грид делаете редактируемым. Открываете этот раздел, щелкаете на любой записи грида, а потом в фильтре дат, попробуйте любую дату сразу поменять, например, на "01.01.2000". После того как вы введете "01" обновится грид с записями и курсор выбросит из поля вода даты обратно в грид с данными. Чтобы ввести вторую цифру "01" придется снова щелкать в поле ввода даты, после этого снова выбросит в грид, потом придется еще раз щелкать и вводить "2000".

Алексей, добрый день.
Ваши замечания исправлены. Служба технической поддержки свяжется в Вами для предоставления ссылки на обновление.

Показать все комментарии

Добрый день!

Помогите разобраться в следуйщем вопросе:

var DateGo = DatasetCalendarUpgrade.Values('DateGo'); поле DateGo - тип Дата
....
DatasetUpgrade.Values('DateUpgrade') = CreateDateUpgrade(DateGo, DatasetContract.Values('Day5'));
...

function CreateDateUpgrade (DateGo, UpgradeDay){
switch (UpgradeDay){
case '{E90BF753-4778-4D91-B187-91ACB44249C7}'://вт
return AddDateDays(DateGo, 1);
break;
...
..}

Выдает ошибку при выполнении AddDateDays

Нравится

5 комментариев

вероятнее всего ошибка в формате даты
попробуйте преобразовать её перед передачей в функцию

var DateGo = new Date(DateGo);

Может там просто null в поле?

В поле точно не null, проверял
var DateGo = new Date(DateGo);
действительно помогло, спасибо!

Теперь возникает ошибка записи значения функции в Dataset
Ошибка выполнения метода 'btnUpgrOnClick'. Invalid value for field 'DateUpgrade'

Как я понял ошибка в формате значения возвращаемой функции.
Значение функции имеет формат Wed Apr 1 00:00:00 UTC+0400 2009, поробую ExtractDate().

чтобы передать значение даты в датасет такого фармата , примините к ней метод .getVarDate()
DatasetUpgrade.Values('DateUpgrade') = CreateDateUpgrade(DateGo, DatasetContract.Values('Day5')).getVarDate();

Спасибо большое, все получилось!

Показать все комментарии

Добрый день.
Я опять вошел в ступор, пишу свой обработчик, и тут понадобилось сделать фильтрацию сетов по месяцу. Я добавил 2 поля EnumControl прописал их полностью: один отвечает за выбор месяца, а второй за год, в скрипте вот что получилось:

function RefreshReport(){
        var MonthValue = edtQuarter.Value;
        var YearValue = edtYear.Value;
        var Dataset = dlData.Dataset;
        var DateRegMinValue = DataRegMin.Value;
        var DateRegMaxValue = DataRegMax.Value;
    var DateStartMonth1Value = new Date();
        var DateEndMonth1Value  = new Date();
        switch(edtQuarter.Value){
                case (Month0): MonthValue = 1;
                                         break;
                ...
                case (Month11): MonthValue = 12;
break;                                                                           
        }
        switch(edtYear.Value){
                case (Year08): YearValue = 2008;
break;                 
                case (Year09): YearValue = 2009;
break;                                                           
        }
// И ВОТ ТУТ он мне ругается
        DateEndMonth1Value = new Date(VarChar(YearValue), VarChar(MonthValue), 28);            
        DateStartMonth1Value = new Date(YearValue, MonthValue, 1);
// Конец и вот тут он мне ругается

        ApplyDatasetFilter(Dataset,'DateStartMonth1', DateStartMonth1Value, true);
        ApplyDatasetFilter(Dataset,'DateEndMonth1', DatEndMonth1Value, true);
        ApplyDatasetFilter(Dataset,'Month', MonthValue, true);
        ApplyDatasetFilter(Dataset,'Year', YearValue, true);
        RefreshDataset(Dataset);
}

Что я не правильно сделал, может как то кого то надо еще проинициализировать. Пробовал и с VarChar и без...

Заранее благодарен.

Нравится

6 комментариев

1. Месяцы считаются от 0 до 11
2. попробуйте var DateEndMonth1Value = new Date(YearValue, MonthValue, 28 , 0 , 0, 0);
3. ApplyDatasetFilter(Dataset,'DateStartMonth1', DateStartMonth1Value.getVarData(), true);

для наглядности , помог бы текс ошибки

28? А как же март :) ? Я бы таки брал первый день следующего месяца и фильтр делал. DateStartMonth1Value<=Date(меньше)DateEndMonth1Value. И не понятно зачем

ApplyDatasetFilter(Dataset,'Month', MonthValue, true);
ApplyDatasetFilter(Dataset,'Year', YearValue, true);
ApplyDatasetFilter(Dataset,'Month', MonthValue, true);
ApplyDatasetFilter(Dataset,'Year', YearValue, true);

Это мне пригодится, но потом.

Я нашел

var n = (m != 2 ?((m % 2) ^ (m > 7)) + 30 : (!(y % 400) || !(y % 4) && (y % 25) ? 29 : 28));
где m - месяц, y - год


Но немного не понимаю как это заставить работать.

Но сейчас не об этом, даже при попытке:

	DateEndMonth1Value = new Date(09, 1, 28, 0 ,0 ,0);		
	DateStartMonth1Value = new Date(09, 1, 1);
	ApplyDatasetFilter(Dataset,'DateStartMonth1', DateStartMonth1Value.getVarData(), true);
	ApplyDatasetFilter(Dataset,'DateEndMonth1', DatEndMonth1Value.getVarData(), true);

Он ругается на вторую строку снизу... Хотя DateStartMonth1 и DateEndMonth1 в скрипте прописаны как дата..
Где что забыл не могу понять.

Ошибка:
"Ошибка выполнения метода 'btnShowReportOnClick'. Объект не поддерживает это свойство или метод "
___
Все познается в ковырянии отверткой.

ApplyDatasetFilter(Dataset,'DateStartMonth1', DateStartMonth1Value.getVarDate(), true);
ApplyDatasetFilter(Dataset,'DateEndMonth1', DatEndMonth1Value.getVarDate(), true);

Разобрался:

switch(edtQuarter.Value.ID){
                case (Month0): MonthValue = 1;
                                         break;

Указание на ID должно быть.
И еще несколько ошибок подправил )))
_______
Все познается в ковырянии отверткой.

Сделали бы ID целыми числами от 0 до 11 и писали

MonthValue = edtQuarter.Value.ID;

Тоже самое с годом.

Показать все комментарии