Как вычислить дату создания элемента справочника?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) как уже говорили, в запросе эту дату штатно не получить, и придётся сначала получить все записи, потом для них вычислить дату создания из ГУИД (которая может быть неверной), и только потом наложить отбор.
Если задача не разовая и нельзя добавлять дату создания в справочник, тогда создайте регистр сведений и пишите туда дату создания либо непосредственно в самом объекте, организовав проверку на ЭтоНовый(), либо через подписку на событие ПриЗаписи, проверяя, нет ли записи в регистре. Предварительно регистр нужно заполнить уже существующими объектами, взяв их дату из того же ГУИДа.
Если задача не разовая и нельзя добавлять дату создания в справочник, тогда создайте регистр сведений и пишите туда дату создания либо непосредственно в самом объекте, организовав проверку на ЭтоНовый(), либо через подписку на событие ПриЗаписи, проверяя, нет ли записи в регистре. Предварительно регистр нужно заполнить уже существующими объектами, взяв их дату из того же ГУИДа.
Функция ДатаСозданияСсылки(Ссылка)
ГУИД = Ссылка.УникальныйИдентификатор();
Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
Разрядность = СтрДлина(Строка16);
ЧислоСек = 0;
Для Позиция = 1 По Разрядность Цикл
ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка16,Позиция,1))*Pow(16,Разрядность - Позиция);
КонецЦикла;
ЧислоСек = ЧислоСек / 10000000;
Возврат Дата(1582, 10, 15, 00, 00, 00) + ЧислоСек + СмещениеСтандартногоВремени() + СмещениеЛетнегоВремени();
КонецФункции
Показать
Вариант для ЖР: Может надолго повесить систему.
Фильтр = Новый Структура("Событие,Метаданные", "_$Data$_.New", Метаданные.Справочники.<ИмяСправочника>);
ТЗ = Новый ТаблицаЗначений;
ВыгрузитьЖурналРегистрации(ТЗ, Фильтр, "Данные, Дата", , 10000);
Журнал регистрации не вариант, если вы восстановите базу из копии, то журнал будет пустой.
Мое мнение лучше из ГУИД (но она может быть неверной), а отличный вариант - это регистр сведений.
А версионирование у вас не включено?
Мое мнение лучше из ГУИД (но она может быть неверной), а отличный вариант - это регистр сведений.
А версионирование у вас не включено?
(9) я так вычислял в УТ пару лет назад в СКД
Если ПределВычисленияНовинок, например 30 дней, то любой товар "старше" 30 дней не считается новинкой.
подпилите, вроде работает несколько лет, я даже не слежу за этим отчетом.
Поле "код" тут числовое. Уберите строки с "Код" чтобы вычислять только по дате.
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ТаблТовары.Ссылка КАК ТоварОтбора,
ВЫБОР
КОГДА &СпособВычисленияНовинок = "покоду"
ТОГДА ТаблТовары.Код > &ПределВычисленияНовинок
КОГДА &СпособВычисленияНовинок = "подате"
ТОГДА РАЗНОСТЬДАТ(ЕСТЬNULL(ВерсииОбъектов.ДатаВерсии, ДАТАВРЕМЯ(1, 1, 1)), &КонецПериода, ДЕНЬ) < &ПределВычисленияНовинок
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК Новинка,
ВЫБОР
КОГДА &СпособВычисленияНовинок = "подате"
ТОГДА ЕСТЬNULL(ВерсииОбъектов.ДатаВерсии, ДАТАВРЕМЯ(1, 1, 1))
ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
КОНЕЦ КАК НовинкаДатаСоздания,
ВЫБОР
КОГДА &СпособВычисленияНовинок = "подате"
ТОГДА ВЫБОР
КОГДА ВерсииОбъектов.ДатаВерсии ЕСТЬ NULL
ТОГДА &ПределВычисленияНовинок + 1
ИНАЧЕ РАЗНОСТЬДАТ(ВерсииОбъектов.ДатаВерсии, &КонецПериода, ДЕНЬ)
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК НовинкаДнейОтСозданияДоКонецПериода
ПОМЕСТИТЬ ВтНовинки
ИЗ
Справочник.Номенклатура КАК ТаблТовары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
ПО (&СпособВычисленияНовинок = "подате")
И (ВерсииОбъектов.НомерВерсии = 1)
И ТаблТовары.Ссылка = ВерсииОбъектов.Объект
ГДЕ
НЕ ТаблТовары.ЭтоГруппа
{ГДЕ
ТаблТовары.Ссылка.* КАК ТоварОтбора,
ТаблТовары.Производитель.* КАК ПроизводительОтбора,
ТаблТовары.Марка.* КАК МаркаОтбора}
ИНДЕКСИРОВАТЬ ПО
Новинка,
НовинкаДатаСоздания,
НовинкаДнейОтСозданияДоКонецПериода
;
ПоказатьЕсли ПределВычисленияНовинок, например 30 дней, то любой товар "старше" 30 дней не считается новинкой.
подпилите, вроде работает несколько лет, я даже не слежу за этим отчетом.
Поле "код" тут числовое. Уберите строки с "Код" чтобы вычислять только по дате.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот