Непереодический независимый РС. Как правильно записать набор в цикле?
Есть непереодический независимый регистр в который записываются данные из ТЗ, наполняемой при чтении текстовых файлов логов.
Регистр:
Измерения: Дата(датавремя), ФизЛицо(справочникссылка);
Ресурс: Вес (Число);
Данные снимаются хаотично, т.е. в файле может быть за день 5 взвешиваний одного человека, может одно, может 234. Один человек - один файл, который наполняется дописываением новых данных в конец. Частота обновления лога - неделя (через неделю данные в файле очищаются и он пишется с нуля).
Данные логов пишутся в ТЗ, после чего ТЗ необходимо записать в регистр.
Проблема в том, что регистр уже может содержать часть данных из файла и нужно дописать только новые данные (ТЗ же каждый раз содержит данные файла целиком).
Можно-ли использовать для записи набор и если да -как правильно это сделать?
Регистр:
Измерения: Дата(датавремя), ФизЛицо(справочникссылка);
Ресурс: Вес (Число);
Данные снимаются хаотично, т.е. в файле может быть за день 5 взвешиваний одного человека, может одно, может 234. Один человек - один файл, который наполняется дописываением новых данных в конец. Частота обновления лога - неделя (через неделю данные в файле очищаются и он пишется с нуля).
Данные логов пишутся в ТЗ, после чего ТЗ необходимо записать в регистр.
Проблема в том, что регистр уже может содержать часть данных из файла и нужно дописать только новые данные (ТЗ же каждый раз содержит данные файла целиком).
Можно-ли использовать для записи набор и если да -как правильно это сделать?
НаборЗаписей = РегистрыСведений.КонтрольВеса.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
Для Каждого Стр из ТабЛогов Цикл
НовЗапись= НаборЗаписей.Добавить();
НовЗапись.Дата = Стр.Дата;
НовЗапись.Пользователь = Стр.Пользователь;
НовЗапись.Вес = Стр.Вес;
КонецЦикла;
НаборЗаписей.Записать();
ПоказатьНайденные решения
(5) с итс:
Назначение и особенности использования менеджера записи регистра сведений
Объект РегистрСведенийМенеджерЗаписи используется для работы с независимыми регистрами сведений (не подчиненными регистратору). Можно сказать, что данный объект является вспомогательным.
Основным объектом, предназначенным для модификации записей регистра сведений, является РегистрСведенийНаборЗаписей. Он позволяет считывать и записывать группы записей, отобранные по значениям измерений и периоду (для периодических регистров сведений). В модуле набора записей имеются обработчики событий, позволяющие контролировать все операции изменения данных регистра.
Объект РегистрСведенийМенеджерЗаписи используется в тех случаях, когда необходимо выполнить операцию только над одной записью. При этом менеджер записи использует для выполнения записи два набора записей, устанавливая им соответствующие значения отборов. Поэтому обработчики событий набора записей вызываются и тогда, когда для записи данных используется менеджер записи.
При редактировании записи в списке регистра сведений система использует именно менеджер записи. На примере редактирования списка видно, что менеджер записей предоставляет разработчику модель манипулирования записями регистра, допускающую корректировку значений измерений. То есть менеджер выполняет удаление записи со старыми значениями измерений и запись с новыми значениями. Именно такая модель выглядит в списке для пользователя как редактирование записи. Таким образом, основное назначение менеджера записи - обеспечить без дополнительных сложностей редактирование отдельных записей в интерактивных режимах.
С точки зрения производительности использование наборов записей будет максимально эффективным. Использование менеджера записей в некоторых случаях будет столь же эффективным, а в некоторых менее, так как будут выполняться лишние действия.
Назначение и особенности использования менеджера записи регистра сведений
Объект РегистрСведенийМенеджерЗаписи используется для работы с независимыми регистрами сведений (не подчиненными регистратору). Можно сказать, что данный объект является вспомогательным.
Основным объектом, предназначенным для модификации записей регистра сведений, является РегистрСведенийНаборЗаписей. Он позволяет считывать и записывать группы записей, отобранные по значениям измерений и периоду (для периодических регистров сведений). В модуле набора записей имеются обработчики событий, позволяющие контролировать все операции изменения данных регистра.
Объект РегистрСведенийМенеджерЗаписи используется в тех случаях, когда необходимо выполнить операцию только над одной записью. При этом менеджер записи использует для выполнения записи два набора записей, устанавливая им соответствующие значения отборов. Поэтому обработчики событий набора записей вызываются и тогда, когда для записи данных используется менеджер записи.
При редактировании записи в списке регистра сведений система использует именно менеджер записи. На примере редактирования списка видно, что менеджер записей предоставляет разработчику модель манипулирования записями регистра, допускающую корректировку значений измерений. То есть менеджер выполняет удаление записи со старыми значениями измерений и запись с новыми значениями. Именно такая модель выглядит в списке для пользователя как редактирование записи. Таким образом, основное назначение менеджера записи - обеспечить без дополнительных сложностей редактирование отдельных записей в интерактивных режимах.
С точки зрения производительности использование наборов записей будет максимально эффективным. Использование менеджера записей в некоторых случаях будет столь же эффективным, а в некоторых менее, так как будут выполняться лишние действия.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для Каждого Стр из ТабЛогов Цикл
НаборЗаписей = РегистрыСведений.КонтрольВеса.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Дата.Установить(Стр.Дата);
НаборЗаписей.Отбор.ФизЛицо.Установить(Стр.Пользователь);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.ФизЛицо= Стр.Пользователь;
НоваяЗапись.Дата= Стр.Дата;
НоваяЗапись.Вес = Стр.Вес;
иначе
НоваяЗапись = НаборЗаписей[0];
НоваяЗапись .ФизЛицо= Стр.Пользователь;
НоваяЗапись .Дата= Стр.Дата;
НоваяЗапись.Вес = Стр.Вес;
КонецЕсли;
НаборЗаписей.Записать();
КонецЦикла;
Показать
Lenten, Благодарю за то, что отписались.
Т.е. если я правильно понимаю, Вы предлагаете каждый раз внутри цикла создавать набор записей с отбором? Что-то мне подсказывает, что это не корректно... может есть "типовое" элегантное решение для такого случая?
Если нет, правильно-ли я понимаю, что замена записи набора на просто запись с замещением является более правильным решением?
Т.е. если я правильно понимаю, Вы предлагаете каждый раз внутри цикла создавать набор записей с отбором? Что-то мне подсказывает, что это не корректно... может есть "типовое" элегантное решение для такого случая?
Если нет, правильно-ли я понимаю, что замена записи набора на просто запись с замещением является более правильным решением?
Для Каждого Стр из ТабЛогов Цикл
НовЗапись = РегистрыСведений.КонтрольВеса.СоздатьМенеджерЗаписи();
НовЗапись.Дата = Стр.Дата;
НовЗапись.Пользователь = Стр.Пользователь;
НовЗапись.Вес = Стр.Вес;
НовЗапись.Записать(Истина);
КонецЦикла;
(3) более типового способа я не помню. И надо понимать что все эти запросы в цикле вредны только при большом объеме данных и длительном выполнении операции. Запросы в цикле есть и типовых примерах 1с, ничего страшного.
касательно вашего кода
вам обязательно в наборе записей делать отбор. Иначе вы будете очищать ВЕСЬ регистр. Это не верно.
касательно вашего кода
вам обязательно в наборе записей делать отбор. Иначе вы будете очищать ВЕСЬ регистр. Это не верно.
(5) с итс:
Назначение и особенности использования менеджера записи регистра сведений
Объект РегистрСведенийМенеджерЗаписи используется для работы с независимыми регистрами сведений (не подчиненными регистратору). Можно сказать, что данный объект является вспомогательным.
Основным объектом, предназначенным для модификации записей регистра сведений, является РегистрСведенийНаборЗаписей. Он позволяет считывать и записывать группы записей, отобранные по значениям измерений и периоду (для периодических регистров сведений). В модуле набора записей имеются обработчики событий, позволяющие контролировать все операции изменения данных регистра.
Объект РегистрСведенийМенеджерЗаписи используется в тех случаях, когда необходимо выполнить операцию только над одной записью. При этом менеджер записи использует для выполнения записи два набора записей, устанавливая им соответствующие значения отборов. Поэтому обработчики событий набора записей вызываются и тогда, когда для записи данных используется менеджер записи.
При редактировании записи в списке регистра сведений система использует именно менеджер записи. На примере редактирования списка видно, что менеджер записей предоставляет разработчику модель манипулирования записями регистра, допускающую корректировку значений измерений. То есть менеджер выполняет удаление записи со старыми значениями измерений и запись с новыми значениями. Именно такая модель выглядит в списке для пользователя как редактирование записи. Таким образом, основное назначение менеджера записи - обеспечить без дополнительных сложностей редактирование отдельных записей в интерактивных режимах.
С точки зрения производительности использование наборов записей будет максимально эффективным. Использование менеджера записей в некоторых случаях будет столь же эффективным, а в некоторых менее, так как будут выполняться лишние действия.
Назначение и особенности использования менеджера записи регистра сведений
Объект РегистрСведенийМенеджерЗаписи используется для работы с независимыми регистрами сведений (не подчиненными регистратору). Можно сказать, что данный объект является вспомогательным.
Основным объектом, предназначенным для модификации записей регистра сведений, является РегистрСведенийНаборЗаписей. Он позволяет считывать и записывать группы записей, отобранные по значениям измерений и периоду (для периодических регистров сведений). В модуле набора записей имеются обработчики событий, позволяющие контролировать все операции изменения данных регистра.
Объект РегистрСведенийМенеджерЗаписи используется в тех случаях, когда необходимо выполнить операцию только над одной записью. При этом менеджер записи использует для выполнения записи два набора записей, устанавливая им соответствующие значения отборов. Поэтому обработчики событий набора записей вызываются и тогда, когда для записи данных используется менеджер записи.
При редактировании записи в списке регистра сведений система использует именно менеджер записи. На примере редактирования списка видно, что менеджер записей предоставляет разработчику модель манипулирования записями регистра, допускающую корректировку значений измерений. То есть менеджер выполняет удаление записи со старыми значениями измерений и запись с новыми значениями. Именно такая модель выглядит в списке для пользователя как редактирование записи. Таким образом, основное назначение менеджера записи - обеспечить без дополнительных сложностей редактирование отдельных записей в интерактивных режимах.
С точки зрения производительности использование наборов записей будет максимально эффективным. Использование менеджера записей в некоторых случаях будет столь же эффективным, а в некоторых менее, так как будут выполняться лишние действия.
(5) в вашем случае не думаю что можно сразу много записывать. У вас измерения Дата, ФизЛицо и вы по ним отбираетесь. Кучей можно было бы сделать например данные по 1 физ Лицу, но без даты. Т.е. вы все данные по человеку переписывали бы
КонецЦИкла;
НаборЗаписей = РегистрыСведений.КонтрольВеса.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ФизЛицо.Установить(Пользователь);
НаборЗаписей.Прочитать();
Для каждого Стр из ТабЛогов Цикл
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись .ФизЛицо= Стр.Пользователь;
НоваяЗапись .Дата= Стр.Дата;
НоваяЗапись.Вес = Стр.Вес;
НаборЗаписей.Записать();
ПоказатьКонецЦИкла;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот