v8: Нестандартное удобное использование регистров сведений Ключевые слова: регистр сведений,регистратор
Необязательный регистратор
Иногда нужен регистр сведений с регистратором и без него.
В таком случае нужно использовать регистр сведений с регистратором, а там, где нужно дать пользователю возможность использовать ввод без регистратора, относить введенные пользователем данные на специально созданный документ (один документ на весь регистр).
Таким образом, в одном флаконе можно использовать и
Пример (НП-0000 - специальный документ для ручного ввода):
Регистратор Товар Цена
НП-0000 пиво 10 //Ручной ввод
НП-0001 пиво 10
НП-0002 пиво 10
НП-0000 пиво 10 //Ручной ввод
Альтернативный красивый вариант - использование реквизита Владелец в реквизитах регистра, но только тогда нужно вставлять в процедуру удаления обработки проведения удаление движений по документу.
Служебный документ, который используется для отметки ручного вида лучше делать недоступным пользователю, чтобы он его случайно не провел. Т.е. лучше для этого использовать особый вид документов (Служебный, Сервисный, Пустой и т.п.)
Хотя наиболее грамотная реализация - имитировать ручной ввод пользователя, создавая документ движения по регистратору.
Периодичность регистра сведений
Аналогично решается вопрос с периодичностью регистратора сведений. Если неизвестно заранее, какую периодичность использовать, используйте периодичность с точностью до секунды. А затем в модуле набора записей регистра сведений корректируйте период с нужной периодичностью.
Запись только изменений
Если в периодическом регистре сведений хранится несколько ресурсов, то становится достаточно проблематично определить, когда поменялся один из этих ресурсов, потому что при добавлении новой записи приходится дублировать остальные ресурсы.
Пусть например у нас есть регистр с измерением Человек и ресурсами Рост и Вес.
Дата, Человек -> Рост, Вес
20060101, Иванов -> 176, 67 //Измеряли рост и вес
20060101, Петров -> 200, 150 //Измеряли рост и вес
20060201, Иванов -> 177, 67 //Измеряли только рост
20060201, Иванов -> 177, 78 //Измеряли только вес
20060301, Иванов -> 177, 80 //Измеряли только вес
Для получения записей используется запрос:
ВЫБРАТЬ
Человек,
Рост,
Вес
ИЗ
РегистрСведений.ПоказателиЧеловека.СрезПоследних(&Период)
Из организованном таким образом регистра сведений не понятно, когда именно изменялся рост человека.
Более понятной была бы структура, где те данные, что не менялись, заменялись бы нулями:
Дата, Человек -> Рост, Вес
20060101, Иванов -> 176, 67 //Измеряли рост и вес
20060101, Петров -> 200, 150 //Измеряли рост и вес
20060201, Иванов -> 177, 0 //Измеряли только рост
20060201, Иванов -> 0, 78 //Измеряли только вес
20060301, Иванов -> 0, 80 //Измеряли только вес
Для получения записей используется чуть более сложный запрос:
ВЫБРАТЬ
Человек,
Рост
ИЗ
РегистрСведений.ПоказателиЧеловека.СрезПоследних(&Период, Рост<>0) КАК А
ВНЕШНЕЕ СОЕДИНЕНИЕ
ВЫБРАТЬ
Человек,
Рост
ИЗ
РегистрСведений.ПоказателиЧеловека.СрезПоследних(&Период, Рост<>0) КАК Б ПО А.Человек=Б.Человек
То есть по каждому показателю формируется отдельный запрос.
Если ресурсы содержат не числа, а ссылки, то можно сравнивать с пустой ссылкой. Если ресурс может принимать значение ноль, то можно использовать составной тип, чтобы значение могло принимать значение неопределено.
|