Жуткий страх перед регистрами сведений

1. Nadushka74 5 07.08.15 13:37 Сейчас в теме
В общем если делать программную запись в регистр сведений то как правильно?

РегистрСведений.Записать() или РегистрСведений.Записать(Ложь)

Уже был опыт когда из за не верно выбранного у меня был затерт весь регистр и когда нет регистратора то необходимо указывать Ложь!!! А если есть регистратор? и идет по строчная запись?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dj_serega 392 07.08.15 14:01 Сейчас в теме
(1) Nadushka74, а в СП все красиво расписано.
3. dabu-dabu 292 07.08.15 14:03 Сейчас в теме
(1) Nadushka74, Если "РегистрСведений" у вас в коде - это набор записей, то:
Запись
РегистрСведений.Записать()
тождественна записи
РегистрСведений.Записать()
и означает, что все записи регистра с учетом установок отбора (см. свойство Отбор) будут замещены новыми записями по этому набору.
7. klinval 339 07.08.15 17:51 Сейчас в теме
(1) Nadushka74, В любом РС запись в разрезе ключа записи должна быть уникальна. Ключ записи для РС - это его измерения (для периодического + период, для подчинённого + регистратор). Если записать через РегистрСведений.Записать(Ложь) и по ключу записи уже будет что-то в регистре, тогда программа вызовет ошибку. Поэтому в большинстве случаев требуется писать через РегистрСведений.Записать() или тоже самое РегистрСведений.Записать(Истина).

Теперь к тому что вы когда-то затёрли весь регистр. Скорее всего перед тем как использовать метод Записать() вы забыли набору записей применить отбор. Тем самым, добавив новый набор с замещением, вы удалили все записи регистра.
Вот пример как удалить все записи регистра:
НаборЗаписей = РегистрыСведений.НазваниеРегистра.СоздатьНаборЗаписей();

наборЗаписей.Записать()

Даже если бы вы между этими двумя строчками написали какие-нибудь присвоения ресурсам и измерениям, то всё-равно вы бы затёрли все записи:
НаборЗаписей = РегистрыСведений.НазваниеРегистра.СоздатьНаборЗаписей();
//Дальше любые присвоения, например:
Запись = НаборЗаписей.Добавить();
Запись.Номенклатура = СсылкаНомеклатура;
Запись.Сумма = 100;
наборЗаписей.Записать()

Для того чтобы не затереть все записи нужно сделать отбор вида:
НаборЗаписей = РегистрыСведений.НазваниеРегистра.СоздатьНаборЗаписей();
//Тут отбор:
НаборЗаписей.Отбор.Номенклатура.Установить(СсылкаНомеклатура);
Запись = НаборЗаписей.Добавить();
Запись.Номенклатура = СсылкаНомеклатура;
Запись.Сумма = 100;
наборЗаписей.Записать()


Но и тут нужно быть осторожным, т.к. если сделать мало отборов, то можете потерять все записи по измерениям, по которым не сделали отбор. Например у вас непериодический и независимый РС в котором 2 измерения Организация и Номенклатура. В результате выполнения выше написанного кода вы не затрёте все данные РС, но данные в пределах отбора по номенклатуре = СсылкаНомеклатура, вы все замените на вновь добавленную. Например по этой номенклатуре у вас были данные по Организации1, 2 и 3. Теперь их не станет и у вас будет всего одна запись.

Попробуйте на тестовой базе записать с замещением (Истина) или без (Ложь) с просмотром результата. Может когда результат и разницу уведите страх пропадёт. Но перед внесением в рабочую всё-равно советую делать резервную копию базы данных.
4. Follower 07.08.15 14:14 Сейчас в теме
Пишите менеджерами записи, там в худшем случае одна запись пропадет. Методически, конечно, не совсем верно, зато надежно.
5. dabu-dabu 292 07.08.15 15:35 Сейчас в теме
(4) Follower, Очень плохой совет. Просто надо не лениться и разбираться
dj_serega; +1 Ответить
6. KlesAlex 3 07.08.15 15:55 Сейчас в теме
ТС напиши подробнее
Все решаемо в зависимости от поставленной вами цели.
ничего бояться не нужно.
dj_serega; +1 Ответить
8. Чарик 2 07.08.15 18:09 Сейчас в теме
Если есть регистратор - то в регистраторе опиши обработку проведения, платформа автоматом перезапишет существующие записи по регистратору
9. Chameleon1980 07.08.15 18:28 Сейчас в теме
По закону - все делаем на копии. :)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот