В общем если делать программную запись в регистр сведений то как правильно?
РегистрСведений.Записать() или РегистрСведений.Записать(Ложь)
Уже был опыт когда из за не верно выбранного у меня был затерт весь регистр и когда нет регистратора то необходимо указывать Ложь!!! А если есть регистратор? и идет по строчная запись?
РегистрСведений.Записать() или РегистрСведений.Записать(Ложь)
Уже был опыт когда из за не верно выбранного у меня был затерт весь регистр и когда нет регистратора то необходимо указывать Ложь!!! А если есть регистратор? и идет по строчная запись?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Nadushka74, Если "РегистрСведений" у вас в коде - это набор записей, то:
Запись тождественна записи и означает, что все записи регистра с учетом установок отбора (см. свойство Отбор) будут замещены новыми записями по этому набору.
Запись
РегистрСведений.Записать()
РегистрСведений.Записать()
(1) Nadushka74, В любом РС запись в разрезе ключа записи должна быть уникальна. Ключ записи для РС - это его измерения (для периодического + период, для подчинённого + регистратор). Если записать через РегистрСведений.Записать(Ложь) и по ключу записи уже будет что-то в регистре, тогда программа вызовет ошибку. Поэтому в большинстве случаев требуется писать через РегистрСведений.Записать() или тоже самое РегистрСведений.Записать(Истина).
Теперь к тому что вы когда-то затёрли весь регистр. Скорее всего перед тем как использовать метод Записать() вы забыли набору записей применить отбор. Тем самым, добавив новый набор с замещением, вы удалили все записи регистра.
Вот пример как удалить все записи регистра:
Даже если бы вы между этими двумя строчками написали какие-нибудь присвоения ресурсам и измерениям, то всё-равно вы бы затёрли все записи:
Для того чтобы не затереть все записи нужно сделать отбор вида:
Но и тут нужно быть осторожным, т.к. если сделать мало отборов, то можете потерять все записи по измерениям, по которым не сделали отбор. Например у вас непериодический и независимый РС в котором 2 измерения Организация и Номенклатура. В результате выполнения выше написанного кода вы не затрёте все данные РС, но данные в пределах отбора по номенклатуре = СсылкаНомеклатура, вы все замените на вновь добавленную. Например по этой номенклатуре у вас были данные по Организации1, 2 и 3. Теперь их не станет и у вас будет всего одна запись.
Попробуйте на тестовой базе записать с замещением (Истина) или без (Ложь) с просмотром результата. Может когда результат и разницу уведите страх пропадёт. Но перед внесением в рабочую всё-равно советую делать резервную копию базы данных.
Теперь к тому что вы когда-то затёрли весь регистр. Скорее всего перед тем как использовать метод Записать() вы забыли набору записей применить отбор. Тем самым, добавив новый набор с замещением, вы удалили все записи регистра.
Вот пример как удалить все записи регистра:
НаборЗаписей = РегистрыСведений.НазваниеРегистра.СоздатьНаборЗаписей();
наборЗаписей.Записать()
Даже если бы вы между этими двумя строчками написали какие-нибудь присвоения ресурсам и измерениям, то всё-равно вы бы затёрли все записи:
НаборЗаписей = РегистрыСведений.НазваниеРегистра.СоздатьНаборЗаписей();
//Дальше любые присвоения, например:
Запись = НаборЗаписей.Добавить();
Запись.Номенклатура = СсылкаНомеклатура;
Запись.Сумма = 100;
наборЗаписей.Записать()
Для того чтобы не затереть все записи нужно сделать отбор вида:
НаборЗаписей = РегистрыСведений.НазваниеРегистра.СоздатьНаборЗаписей();
//Тут отбор:
НаборЗаписей.Отбор.Номенклатура.Установить(СсылкаНомеклатура);
Запись = НаборЗаписей.Добавить();
Запись.Номенклатура = СсылкаНомеклатура;
Запись.Сумма = 100;
наборЗаписей.Записать()
Но и тут нужно быть осторожным, т.к. если сделать мало отборов, то можете потерять все записи по измерениям, по которым не сделали отбор. Например у вас непериодический и независимый РС в котором 2 измерения Организация и Номенклатура. В результате выполнения выше написанного кода вы не затрёте все данные РС, но данные в пределах отбора по номенклатуре = СсылкаНомеклатура, вы все замените на вновь добавленную. Например по этой номенклатуре у вас были данные по Организации1, 2 и 3. Теперь их не станет и у вас будет всего одна запись.
Попробуйте на тестовой базе записать с замещением (Истина) или без (Ложь) с просмотром результата. Может когда результат и разницу уведите страх пропадёт. Но перед внесением в рабочую всё-равно советую делать резервную копию базы данных.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот