Создатьменеджерзаписи или создатьнаборзаписей в чем отличие
Перейти к содержимому

Создатьменеджерзаписи или создатьнаборзаписей в чем отличие

  • автор:

Создатьменеджерзаписи или создатьнаборзаписей в чем отличие

Не понимаю, в чем разница при использовании этих методов, если в регистре у меня только одна запись по измерению. Помогите, пожалуйста, разобраться.

(0) менеджер записи все равно создаст набор записей.

для твоего случая Менеджер записи удобнее.

Я так понимаю, что если одно измерение, то СоздатьМенеджерЗаписи, а если больше СоздатьНаборЗаписей

Менеджер записи надстройка над набором записей.

МенеджерЗаписи и НаборЗаписей — разные объекты с разными свойстами и методами. Погляди в СП.

(4) ты отладчик включи и посмотри модуль Набора записей при работе менеджера записи. А потом подумай.

Как всегда ответ нужно искать на диске ИТС. Там все написано, описано и разжевано.

Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой

Работа с регистрами сведений

Отличие от предыдущего примера в том, что мы не будем читать запись, а просто добавим ее. Если была запись с теми же измерениями, она будет замещена.

МенеджерЗаписи = РегистрыСведений.УВ_НоменклатураМагазинов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Магазин = Магазин; МенеджерЗаписи.Номенклатура = Номенклатура; МенеджерЗаписи.Минимум = Минимум; МенеджерЗаписи.Максимум = Максимум; МенеджерЗаписи.Использование = Использование; МенеджерЗаписи.Записать(Истина); 

Очистка регистра сведений

Отбор в наборе записей — это вообще важная вещь. Например, чтобы очистить регистр, нам достаточно записать набор записей без отбора.

НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); НаборЗаписей.Записать(); 

Логирование записей в регистр сведений

Ну и под конец интересненькое. Предположим, мы хотим записывать в лог все изменения записей регистра. Для хранения лога подойдет файл mxl, расположенный на сервере. Также нам понадобится макет. Макет и файл лога у меня не сохранились, но из кода все довольно очевидно.

Код будем вставлять в модуль набора записей регистра сведений.

Процедура ПриЗаписи(Отказ, Замещение) // Если ЭтотОбъект.Количество() > 0 Тогда Попытка ТабДок = Новый ТабличныйДокумент; ИмяФайла = "\\7flowers.local\company\Transfer\Transfer rules in UT11 log\log.mxl"; ТабДок.Прочитать(ИмяФайла); Макет = РегистрыСведений.ПравилаДляОбменаДанными.ПолучитьМакет("ЛогИзменений_7ЦВ"); ОбластьМакета = Макет.ПолучитьОбласть("ПриЗаписи"); ОбластьМакета.Параметры.ВремяСобытия = ТекущаяДата(); ОбластьМакета.Параметры.Пользователь = ПараметрыСеанса.ТекущийПользователь; ОбластьМакета.Параметры.Заполнить(ЭтотОбъект[0]); ТабДок.Вывести(ОбластьМакета); ТабДок.Записать(ИмяФайла); Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка при записи лога изменения правил обмена: " + ОписаниеОшибки()); КонецПопытки; КонецЕсли; //->Уманский Виктор 19.02.2016 КонецПроцедуры Процедура ПередЗаписью(Отказ, Замещение) // Если ЭтотОбъект.Количество() = 0 Тогда Попытка ТабДок = Новый ТабличныйДокумент; ИмяФайла = "\\7flowers.local\company\Transfer\Transfer rules in UT11 log\log.mxl"; ТабДок.Прочитать(ИмяФайла); Макет = РегистрыСведений.ПравилаДляОбменаДанными.ПолучитьМакет("ЛогИзменений_7ЦВ"); ОбластьМакета = Макет.ПолучитьОбласть("ПередЗаписью"); ОбластьМакета.Параметры.ВремяСобытия = ТекущаяДата(); ОбластьМакета.Параметры.Пользователь = ПараметрыСеанса.ТекущийПользователь; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ПравилаДляОбменаДанными.ИмяПланаОбмена, | ПравилаДляОбменаДанными.ВидПравил, | ПравилаДляОбменаДанными.ИмяМакетаПравил, | ПравилаДляОбменаДанными.ИмяМакетаПравилКорреспондента, | ПравилаДляОбменаДанными.ИмяПланаОбменаИзПравил, | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиВыгрузки, | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиЗагрузки, | ПравилаДляОбменаДанными.ИмяФайлаПравил, | ПравилаДляОбменаДанными.ИмяФайлаПротоколаОбмена, | ПравилаДляОбменаДанными.ИнформацияОПравилах, | ПравилаДляОбменаДанными.ИсточникПравил, | ПравилаДляОбменаДанными.НеОстанавливатьПоОшибке, | ПравилаДляОбменаДанными.ПравилаXML, | ПравилаДляОбменаДанными.ПравилаXMLКорреспондента, | ПравилаДляОбменаДанными.ПравилаЗачитанные, | ПравилаДляОбменаДанными.ПравилаЗачитанныеКорреспондента, | ПравилаДляОбменаДанными.РежимОтладки, | ПравилаДляОбменаДанными.РежимОтладкиВыгрузки, | ПравилаДляОбменаДанными.РежимОтладкиЗагрузки, | ПравилаДляОбменаДанными.РежимПротоколированияОбменаДанными, | ПравилаДляОбменаДанными.ИспользоватьФильтрВыборочнойРегистрацииОбъектов, | ПравилаДляОбменаДанными.ПравилаЗагружены |ИЗ | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными |ГДЕ | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена | И ПравилаДляОбменаДанными.ВидПравил = &ВидПравил"; Запрос.УстановитьПараметр("ВидПравил", ЭтотОбъект.Отбор.ВидПравил.Значение); Запрос.УстановитьПараметр("ИмяПланаОбмена", ЭтотОбъект.Отбор.ИмяПланаОбмена.Значение); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ОбластьМакета.Параметры.Заполнить(Выборка); ТабДок.Вывести(ОбластьМакета); ТабДок.Записать(ИмяФайла); КонецЕсли; Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка при записи лога изменения правил обмена: " + ОписаниеОшибки()); КонецПопытки; КонецЕсли; //->Уманский Виктор 19.02.2016 КонецПроцедуры 

Отбор записей регистра сведений в 1С

1. Набор записей регистра сведений 2. Менеджер записи регистра сведений
Здравствуйте, коллеги! В данной статье рассмотрим, как получить записи регистра сведений с некоторым отбором записей для последующей работы с ними.
Предположим, что в некоторой базе существует регистр сведений, в котором хранятся данные о доставке товара. Задачей является по нажатию кнопки обновить информацию в каждой из этих записей или добавить новую информацию в пустые поля, получив набор записей регистра сведений.

1. Набор записей регистра сведений

Для того чтобы выполнить данную задачу, можно воспользоваться функцией набора записей регистра сведений с помощью объекта «НаборЗаписей». Для создания объекта «НаборЗаписей» необходимо обратиться к регистру сведений и вызвать метод «СоздатьНаборЗаписей()». В результате мы получим пустую коллекцию объектов типа «ЗаписьРегистраСведений».
Создание набора записей регистра сведений
Создание набора записей регистра сведений
Представим, что у нас есть некоторые начальные данные, и нам необходимо получить записи, в которых значения полей равны нашим начальным данным. Для этого воспользуемся свойством «Отбор» у полученного ранее объекта, после чего вызовем метод «Установить (Параметр отбора)». Данный метод можно вызывать несколько раз в случае, если нужно установить отбор записей регистра сведений по нескольким полям. Если отборов несколько, то связь будет осуществляться при помощи логического «И».
Отбор записей регистра сведений
Отбор записей регистра сведений
После того как установлен отбор регистра, чтобы получить записи с установленным отбором, потребуется вызвать метод «Прочитать()», читающий записи регистра сведений с отбором, который был установлен ранее. После выполнения данного метода коллекция «Набор записей» заполнится данными отобранными из регистра сведений.
Метод чтения набора записей
Метод чтения набора записей
Далее можно обойти полученную коллекцию циклом и добавить или изменить какие-то поля в каждой записи. Либо же обработать любым другим доступным способом.
Цикл набора записей
Цикл набора записей
Для того чтобы записать измененные данные в базу, необходимо вызвать метод «Записать()», после чего весь набор записей после отбора будет снова записан в регистр сведений с измененными или новыми данными.
команда записи
Команда записи в регистр сведений
Наборы записей регистра сведений подходят в случае, если необходимо записать большую коллекцию значений с некоторыми одинаковыми полями.
Особенность отбора в регистре сведений заключается в том, что его можно установить только на равенство, соответственно нельзя, например, установить отбор «Записи в которых поле «Количество» больше чем 4», можно использовать только «Записи в которых «Количество» равно 5».
В том случае, если необходимо выбрать записи по какому-либо другому условию, например, записи, в которых поле «количество» имеет значение больше 4, либо если нужно воспользоваться связью отличной от логического «И», например, «ИЛИ»: «Физическое лицо = ФИО» ИЛИ «Год рождения < 31.08.2000», придется написать запрос регистра сведений
запрос к регистру сведений
Запрос у регистру сведений
Результатом этого будет подобная таблица:
результат запроса к регистру сведений
Результат запроса к регистру сведений В данном запросе к регистру сведений отбирались все записи, в которых дата рождения человека была меньше 31.08.2000, но при этом благодаря логическому «ИЛИ» в результат запроса был так же добавлен один человек, у которого дата рождения не удовлетворяла первому условию, но удовлетворяла второму.
После получения результата запроса с ним можно будет делать все что угодно, в том числе и записать снова в регистр.

2. Менеджер записи регистра сведений

Если в регистре сведений все записи уникальны или требуется получить только одну запись, следует воспользоваться объектом «Менеджер записи».
Менеджер записи регистра сведений создается аналогично Набору записей, но с использованием другого метода – СоздатьМенеджерЗаписей().
Метод СоздатьМенеджерЗаписией()
Метод СоздатьМенеджерЗаписией()
После создания можно установить отбор записей регистра сведений, задав значения полей и вызвать метод «Прочитать», который вернет в переменную «МенеджерЗаписи» запись регистра сведений.
Действия с записью после возвращения менеджера в регистр сведений
Прочтение менеджера записей и его возвращение в регистр сведений
Далее можно производить с данной записью какие-либо действия, например, обратиться к одному из полей данной записи.
Действия с записью после возвращения менеджера
Действия с записью после возвращения менеджера в регистр сведений
Стоит отметить, что менеджер записи регистра сведений в отличие от набора записей регистра сведений доступен только для регистров с установленным свойством «Независимый» регистр сведений, то есть только для тех, у которых нет регистратора.
Специалист компании «Кодерлайн» Айдар Фархутдинов

Вас могут заинтересовать следующие статьи:

94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) —> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) —> Как сделать в 1С [1] => 1С: Конвертация данных [2] => Конвертация данных [3] => Обмен между базами [4] => Закрытие месяца [5] => Оценка задач [6] => Отчеты в 1С [7] => Моделирование [8] => HTTP [9] => Управление проектами [10] => БУ [11] => com-объекты [12] => 1С: WMS Управление складом [13] => РСБУ [14] => 1С: Сценарное тестирование [15] => Запросы 1С [16] => LINUX [17] => WEB [18] => Оптимизация [19] => 1С:Зарплата и Управление Персоналом [20] => Excel [21] => 1С: ERP [22] => ADO [23] => 1С:Управление производственным предприятием [24] => Внедрение [25] => Продажи [26] => Отчетность [27] => 1С: Розница [28] => 1С: CRM [29] => 1С:Бухгалтерия [30] => 1С:Комплексная автоматизация [31] => Производство [32] => Интеграция 1С [33] => Налоги [34] => Отпуск [35] => MS SQL Server [36] => Расширение конфигурации [37] => МСФО [38] => СКД [39] => Word [40] => WEB-сервисы 1С [41] => Внедрение ERP [42] => Перенос данных [43] => Торговое оборудование [44] => Лизинг [45] => 1С:Управление нашей фирмой [46] => Администрирование 1С [47] => 1С: Колледж [48] => Правила обмена [49] => 1С: Платформа ) —>

МенджерЗаписи VS НаборЗаписей

Вообщем стоит задача: В обработке необходимо записать от 50(редко) до тысячи(часто) уникальных записей в регистр сведений. Запись будет происходить интерактивно 1-5 раз в день. Записи могут перезаписываться. Регистр активно читается в течении дня. Не могу определиться с инструментом записи. Набор или МенеджерЗаписи?
Что будет быстрее и главное менее подвержено блокировкам? Эмулировать проблематично, т.к. нагрузка может быть как нулевой, так и пиковой(чтение данных онлайн с 3+ рабочих мест).
Регистр непериодический, независимый.

  • Дата
  • Дата
  • Рейтинг всех уровней
  • Рейтинг 1-го уровня
  • Древо развёрнутое
  • Древо свернутое

Свернуть все
6. AlexO 135 06.03.13 22:23 Сейчас в теме
Не могу определиться с инструментом записи. Набор или МенеджерЗаписи?

Инструмент однозначный — и 1С не оставляет никаких вариантов: если записи будут имет общий ключ, т.е. могут выбираться «скопом» — то НаборЗаписей.
Если все записи уникальны — то только МенеджерЗапсии, без вариантов.
НаборЗаписей от 1С — это не набор записей, а набор ПОХОЖИХ (с единым ключом/ключами) записей.
А иначе никогда не сможете установить отбор в 1С на разнородные записи, и выбрать нужный пакет записей а-ля как делается в нормальных СУБД.
А если даже и сможете «виртуально» отдельным от регистра блоком создать в объекте НаборЗаписей нужный «набор» записей — то никогда не сможете записать их в регистр через НаборЗаписей, так как опять же Отбор будет отбирать сугубо ограниченное им самим пространство записей регистра, не давая ничего записать за рамками Отбора.
Только пробегаться по каждой записи и МенеджерЗаписи.
(5) RustamZz,

Для записи измерения должны идти в порядке: Документ, Контрагент, Организация.

для какой записи сие нужно? 🙂
В регистр записи будут записаны так, как построена запись в регистр в 1С — т.е. НЕЗАВИСИМО от порядка следования измерений.

Но если при чтении отбор по измерению Документ не используется (выбираются все документы контрагента), имеет смысл поменять порядок измерений на Контрагент, Организация, Документ.

Никакого смысла в предложенном варианте это не имеет.
Смысл располагать измерения в определенной последовательности — только если есть индексация измерений. И тогда последовательность выборки должна совпадать с последовательностью квазиключей данной «индексации».
А если её нарушить — то и смысл во всей такой «индексации измерений» тоже пропадает, а то и даст существенные тормоза вместо «скорости», чем если б их вообще не было.
Поэтому даже в типовых никто не связывается с этими «индексациями» измерений регистров, о чем часто спрашивают неофиты на форумах — быстрее получишь отрицательный результат, а не положительный эффект.

При таком подходе блокировок быть не должно.

блокировки зависят не от «подхода», а от запроса: если будет запрошено пустое значение отбора — будет заблокирован весь регистр, хотите того или нет.
Если набор записей — будут заблокированы только эти записи.

И обязательно должен быть установлены управляемые блокировки на конфигурацию.

чтобы работали управляемые блокировки — только установить галочку «Использовать управляемые блокировки» в конфе — это не сделать ничего.
Нужно прописывать, отслеживать и обрабатывать запись (проводки) регистраторов в данный регистр с учетом упрблокировок, чтобы был какой-то эффект от их применения (меньше деадлоков).
Самый оптимальный вариант — если SQL, то дать столько памяти, сколько размер базы: тогда SQL сможет все необходимое вынести в память, и блокировок по базе станет намного меньше, а огромный размер памяти будет гарантировать, что SQL-ю хватит загрузить все, что ему нужно.
А так — 1сники такие 1сники. 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *