Добавить записи в регистр сведений программно. #734530


#0 by User_Agronom
Вопрос глупый. Но, тем не менее ответа не знаю/не нашёл. Есть непериодический, независимый Регистр сведений. Одно измерение объект (ДокументСсылка) и пара ресурсов (строки) Мне нужно одной операцией добавить в этот регистр несколько записей. Вариант: НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей; НаборЗаписей.Отбор.Объект.Установить(ПолеВводаНоменклатура); не устраивает, так как нельзя установить отбор (у записей разные измерения). Вариант: не устраивает, так как пишет по одному. Почему нужно оптом: есть регламентное задание, которое должно подцепить все документы. И вариант, когда часть запишется, а часть нет не годится.
#1 by ДенисЧ
Транзакции придумали трУсы!!
#2 by SeraFim
Записать
#3 by User_Agronom
Спасибо!)))
#4 by User_Agronom
Не катит. Если выполнить запрос во время выполнения цикла, то инфа про первые строки в запрос попадает. Чего я делаю не так?
#5 by User_Agronom
Будет же весь регистр перезаписан. А там строк может быть много.
#6 by Timon1405
нужно внимательно в прочитать строчку Прочитать или почитать про прочитать. или прочитать где почитать про прочитать
#7 by ShoGUN
Менеджер записи + транзакция - не предлагать?
#8 by ShoGUN
Наборы записей тут не очень подходят, т.к. пишут с отбором по измерениям.
#9 by happysan
"Если выполнить запрос во время выполнения цикла, то инфа про первые строки в запрос попадает." - что ты имеешь в виду?
#10 by User_Agronom
Если нет отбора будут прочитаны все записи регистра. А потом, при Записать будут все перезаписаны. С точки зрения скорости не совсем правильно. Я пример привёл в Запускаем отладчик. Ставим точку прерывания внутри цикла. Несколько раз проходим цикл. Например в таблице 10 записей, а мы цикл проходим 3 раза. Запускаем ещё раз 1С предприятие. ваяем запрос к регистру. Эти три строчки в результате запроса видим. Должно быть: либо видим все десять. Либо не одной.
#11 by Крошка Ру
НаборЗаписей.Записать(Ложь) спасет отца русской демократии
#12 by Крошка Ру
+ без НаборЗаписей.Прочитать
#13 by ShoGUN
Ему надо по нескольким измерениям.
#14 by ShoGUN
Имхо, тут только управляемые блокировки спасут.
#15 by ShoGUN
Хотя результат может отличаться от ожидаемого...
#16 by Крошка Ру
И?
#17 by ShoGUN
А, ты предлагаешь отбор не устанавливать? Тогда прокатит, наверное.
#18 by Крошка Ру
+ Регистр сведений, независимый, отборы ставить необязательно. Создаем, заполняем(хоть каждую запись по своему измерению) и записываем.
#19 by ShoGUN
+ Единственное что - надо тогда дубли перед записью проверять, т.к. иначе ошибка может вывалится.
#20 by D_E_S_131
Какие дубли в регистре сведений могут быть?
#21 by D_E_S_131
Что у тебя не получается в ? Зачем тебе записывать ЗаписьРегистра в Попытке?
#22 by Крошка Ру
Ну это да, тут дополнительную проверку надо Обыкновенные. Когда совпадают все измерения.
#23 by ShoGUN
В РС есть какие-то записи. Делаешь свой набор, в котором ВНЕЗАПНО встречается запись, в которой тот же набор значений измерений, который уже есть в регистре. Пишешь через НаборЗаписей.Записать(Ложь) Имеешь ошибку.
#24 by D_E_S_131
Зачем тогда ставить ЛОЖЬ? Кстати в у него не установлен параметр Замещать = Ложь (т.е. он равен Истина)
#25 by ShoGUN
Ему надо все записи записать одновременно. Либо сделать так, чтобы не было фантомного чтения.
#26 by ShoGUN
+ Точней, грязного чтения.
#27 by D_E_S_131
И как параметр "Замещать" может помочь в этом деле? Только транзакция или управляемая блокировка (в зависимости от режима управления блокировкой данных).
#28 by User_Agronom
Спасибо. Так нормально работает.
#29 by ShoGUN
Набор записей пишется в SERIALIZABLE, если не ошибаюсь(поправь, если не так). А это как раз то, что нужно.
#30 by D_E_S_131
Если натыкается на уже имеющиеся записи с такими измерениями, то не останавливается с сообщением "Не удалось записать по причине:"? НаборЗаписей это всего лишь инструмент для удобства. По сути та же запись в транзакции нескольких ЗаписейРегистра.
#31 by ShoGUN
>По сути та же запись в транзакции нескольких ЗаписейРегистра. Спасибо, кэп. Вопрос в уровне изоляции этой транзакции.
#32 by D_E_S_131
Хочешь сказать, что в режиме Управляемых блокировок, если я буду писать данные НаборомЗаписей и не установлю саму блокировку на записываемые данные, то я не получу возможность "грязного чтения" до окончания записи?
#33 by ShoGUN
Утверждает, что это так. Я не проверял.
#34 by ShoGUN
Опять же у ни слова про блокировки, может у него на регистре блокировки в автоматическом режиме.
#35 by D_E_S_131
Судя по примеру в у него таки Управляемые блокировки. Но в не утверждается "что это так", т.к. он останавливает в цикле при записи через МенеджерЗаписи. Если бы писал НаборомЗаписей, то у него и цикла никакого не было бы. В любом случае, если в конфигурации УБ, то для защиты от "грязного чтения" нужно использовать установку УБ.
#36 by D_E_S_131
Тогда пусть ставит транзакцию, считывает запросом имеющиеся данные с использованием "Для изменения" и уже потом пишет свои новые данные. Другого в 1С не придумано.
#37 by User_Agronom
В свойствах конфы режим управления блокировкой данных - управляемый.
#38 by User_Agronom
На регистре режим управления блокировкой данных тоже управляемый.
#39 by ShoGUN
>В любом случае, если в конфигурации УБ, то для защиты от "грязного чтения" нужно использовать установку УБ. Ещё раз спасибо, кэп :) Я неточно выразился. Но каким-то образом у него при грязное чтение, а при записи набором - нет.
#40 by D_E_S_131
"а при записи набором - нет" — я так и не понял где такое утверждается.
#41 by ShoGUN
в
#42 by ShoGUN
А, хотя я туплю. У него способ проверки извращённый.
#43 by D_E_S_131
Вот и мне интересно как он это проверил. Так же интересно, что будет с "внезапно одинаковыми" записями при таком способе.
#44 by ShoGUN
Используй принудительную блокировку в коде, иначе, при записи большого набора - всё равно получишь грязное чтение. А своим способом ты это не проверишь никак.
#45 by D_E_S_131
И еще после этого "кэп" :)
#46 by D_E_S_131
И Я еще...
#47 by ShoGUN
Меня ввело в заблужение :)
#48 by ShoGUN
+ заблужДение.
#49 by ShoGUN
А надо проверять чтением из регистра, увы.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С