Как вычислить дату создания элемента справочника?

1. levan 08.09.21 07:09 Сейчас в теме
Привет. Есть хитрая задача. Надо сделать отчет с отбором по дате создания элемента справочника. Добавить реквизит дата в справочник не вариант. Как можно типовыми средствами платформы вычислить дату создания в справочнике?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 08.09.21 07:20 Сейчас в теме
(1)в общем случае без геморроя - никак.

Можно узнать по ЖР, либо по значению UUID(она же ссылка в терминах 1с), но в общем случае время зашитое в значение UUID может вообще не соответствовать действительности.
3. SlavaKron 08.09.21 07:21 Сейчас в теме
(1) Из журнала регистрации или из ГУИД ссылки (может дать неверный результат). Но в любом случае, лучше где-то хранить результат, так как оба способа требуют время на вычисление.
4. comptr 35 08.09.21 07:27 Сейчас в теме
(1) как уже говорили, в запросе эту дату штатно не получить, и придётся сначала получить все записи, потом для них вычислить дату создания из ГУИД (которая может быть неверной), и только потом наложить отбор.
Если задача не разовая и нельзя добавлять дату создания в справочник, тогда создайте регистр сведений и пишите туда дату создания либо непосредственно в самом объекте, организовав проверку на ЭтоНовый(), либо через подписку на событие ПриЗаписи, проверяя, нет ли записи в регистре. Предварительно регистр нужно заполнить уже существующими объектами, взяв их дату из того же ГУИДа.
11. slavyan_arena 08.09.21 10:34 Сейчас в теме
(1)
включить версионирование справочника и сделать так:

ВЫБРАТЬ ПЕРВЫЕ 1
	ВерсииОбъектов.ВерсияОбъекта КАК ВерсияОбъекта,
	ВерсииОбъектов.ДатаВерсии КАК ДатаВерсии
ИЗ
	РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов

УПОРЯДОЧИТЬ ПО
	ДатаВерсии
5. chg 08.09.21 07:33 Сейчас в теме
 Функция ДатаСозданияСсылки(Ссылка)
	ГУИД = Ссылка.УникальныйИдентификатор();
	Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
	Разрядность = СтрДлина(Строка16);
	ЧислоСек = 0;
	Для Позиция = 1 По Разрядность Цикл
		ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка16,Позиция,1))*Pow(16,Разрядность - Позиция);
	КонецЦикла;
	ЧислоСек = ЧислоСек / 10000000;
	Возврат Дата(1582, 10, 15, 00, 00, 00) + ЧислоСек + СмещениеСтандартногоВремени() + СмещениеЛетнегоВремени();  
КонецФункции    
Показать
AndreySchel; criptid; ls600; AnryMc; vv2; +5 Ответить
7. AnryMc 848 08.09.21 08:33 Сейчас в теме
6. SlavaKron 08.09.21 08:14 Сейчас в теме
Вариант для ЖР:
Фильтр = Новый Структура("Событие,Метаданные", "_$Data$_.New", Метаданные.Справочники.<ИмяСправочника>);    
ТЗ = Новый ТаблицаЗначений;
ВыгрузитьЖурналРегистрации(ТЗ, Фильтр, "Данные, Дата", , 10000);
Может надолго повесить систему.
criptid; vv2; +2 Ответить
8. d.batovskiy 08.09.21 08:40 Сейчас в теме
Журнал регистрации не вариант, если вы восстановите базу из копии, то журнал будет пустой.
Мое мнение лучше из ГУИД (но она может быть неверной), а отличный вариант - это регистр сведений.
А версионирование у вас не включено?
9. SGordon1 08.09.21 09:59 Сейчас в теме
А с версионированием какой код будет, в запросе получится?
10. VmvLer 08.09.21 10:05 Сейчас в теме
(9) я так вычислял в УТ пару лет назад в СКД

ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ТаблТовары.Ссылка КАК ТоварОтбора,
	ВЫБОР
		КОГДА &СпособВычисленияНовинок = "покоду"
			ТОГДА ТаблТовары.Код > &ПределВычисленияНовинок
		КОГДА &СпособВычисленияНовинок = "подате"
			ТОГДА РАЗНОСТЬДАТ(ЕСТЬNULL(ВерсииОбъектов.ДатаВерсии, ДАТАВРЕМЯ(1, 1, 1)), &КонецПериода, ДЕНЬ) < &ПределВычисленияНовинок
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК Новинка,
	ВЫБОР
		КОГДА &СпособВычисленияНовинок = "подате"
			ТОГДА ЕСТЬNULL(ВерсииОбъектов.ДатаВерсии, ДАТАВРЕМЯ(1, 1, 1))
		ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
	КОНЕЦ КАК НовинкаДатаСоздания,
	ВЫБОР
		КОГДА &СпособВычисленияНовинок = "подате"
			ТОГДА ВЫБОР
					КОГДА ВерсииОбъектов.ДатаВерсии ЕСТЬ NULL
						ТОГДА &ПределВычисленияНовинок + 1
					ИНАЧЕ РАЗНОСТЬДАТ(ВерсииОбъектов.ДатаВерсии, &КонецПериода, ДЕНЬ)
				КОНЕЦ
		ИНАЧЕ 0
	КОНЕЦ КАК НовинкаДнейОтСозданияДоКонецПериода
ПОМЕСТИТЬ ВтНовинки
ИЗ
	Справочник.Номенклатура КАК ТаблТовары
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
		ПО (&СпособВычисленияНовинок = "подате")
			И (ВерсииОбъектов.НомерВерсии = 1)
			И ТаблТовары.Ссылка = ВерсииОбъектов.Объект
ГДЕ
	НЕ ТаблТовары.ЭтоГруппа
{ГДЕ
	ТаблТовары.Ссылка.* КАК ТоварОтбора,
	ТаблТовары.Производитель.* КАК ПроизводительОтбора,
	ТаблТовары.Марка.* КАК МаркаОтбора}

ИНДЕКСИРОВАТЬ ПО
	Новинка,
	НовинкаДатаСоздания,
	НовинкаДнейОтСозданияДоКонецПериода
;
Показать


Если ПределВычисленияНовинок, например 30 дней, то любой товар "старше" 30 дней не считается новинкой.
подпилите, вроде работает несколько лет, я даже не слежу за этим отчетом.
Поле "код" тут числовое. Уберите строки с "Код" чтобы вычислять только по дате.
12. levan 09.09.21 11:32 Сейчас в теме
Спасибо. Решил делать через историю данных.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот