Почему у меня выходит ошибка Object reference not set to an instance of an object при выполнении следующего кода:
protected override void ScreenWhen()
{
if (Cursor.Properties.Contains("DATE_D_") || Cursor.Properties.Contains("END_"))
{
_date_D.Value = Cursor.Properties.Get<DateTime>("DATE_D_");
_end.Value = Cursor.Properties.Get<DateTime>("END_");
}
else
Date.FirstDateOfMonth(Settings.DateNow);
Date.FirstDateOfMonth(Settings.DateNow);
}
По сути, данный код должен выполнять условие: при первом открытии формы он должен в поля текстбокса дат вводить первые и последние дни текущего месяца, а при повторном открытии формы должен выводить значения дат, которые были введены раннее (т.е. взять значение из свойства DATE_D и END_).
Если сделать как ниже, то код работает и всегда выводит только первый и последний день текущего месяца:
{
protected override void ScreenWhen()
{
_date_D.Value = Date.FirstDateOfMonth(Settings.DateNow);
_end.Value = Date.LastDateOfMonth(Settings.DateNow);
}
}
Код выполнения формы и сама форма ниже. В коде есть коммент, где происходит запоминание данных, которые я ввожу в форму, как теперь сделать чтобы при следующем открытии формы там были данные которые вводились раннее(они же записываются и запоминаются в свойствах DATE_D и END_)?
public override SqlCmdText GetSqlFilter()
{
var Cond = ITnet2.Server.Dialogs.InputForm.Activate("_TESTFRM");
if (Cond.Success)
{
string Conditions = "";
// условие по дате C
var date_begin = Cond.InputFormValues.GetValue<DateTime>("DATE_D");
if (date_begin != null )
{
Cursor.Properties.Set("DATE_D_", date_begin); // запись значений данных в свойство
Conditions += (" cast(PWREG.DATE_D as date) >= cast(@date_begin as date) ");
}
// условие по дате ПО
var date_end = Cond.InputFormValues.GetValue<DateTime>("END");
if (date_end != null)
{
Cursor.Properties.Set("END_", date_end); // запись значений данных в свойство
Conditions += " and cast(PWREG.DATE_D as date) <= cast(@date_end as date) ";
}
var n_kdk = Cond.InputFormValues.GetValue<string>("N_KDK");
var rcentr = Cond.InputFormValues.GetValue<string>("RCENTR");
var ceh = Cond.InputFormValues.GetValue<string>("CEH");
// условие по сотруднику
if (n_kdk != null && n_kdk.Length > 0)
{
Conditions += " and PWREG.N_KDK = @n_kdk ";
}
// условие по рабочему центру
if (rcentr != null && rcentr.Length > 0)
{
Conditions += " and PWREG.RCENTR = @rcentr ";
}
// условие по цеху
if (ceh != null && ceh.Length > 0)
{
Conditions += " and PRCR.CEH = @ceh ";
}
return new SqlCmdText(string.Format(Conditions),
new SqlParam("n_kdk", n_kdk.ToString()),
new SqlParam("rcentr", rcentr.ToString()),
new SqlParam("ceh", ceh.ToString()),
new SqlParam("date_begin", date_begin),
new SqlParam("date_end", date_end));
}
DateTime DateBegin = Settings.DateNow.AddYears(-1);
DateTime DateEnd = Settings.DateNow;
return new SqlCmdText(string.Format(@" PWREG.DATE_D between @DateBegin and @DateEnd ")
, new SqlParam("DateBegin", DateBegin)
, new SqlParam("DateEnd", DateEnd));
}
пикча формы тут, выводит только даты текущего месяца https://i.stack.imgur.com/0NkFx.png
Cursor.Properties.Contains("DATE_D_") || Cursor.Properties.Contains("END_")Подумайте: а если есть начало, но не указан конец? (или наоборот) Мнится мне что надо не||, а&&поставить – A K Feb 17 '21 at 11:29