Имя: Пароль:
1C
1С v8
Не записывается регистр сведений
0 БукинГена
 
04.08.15
12:55
Из модуля справочника номенклатура в событии ПриЗаписи() хочу записать в регистр сведений "Значения свойств объектов"
Почему то не записывается.
А во внешнем отчете например записывает. В чем может быть дело?


        РС = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
        РС.Объект = Ссылка;
        РС.Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Для переноса в УПП");
        РС.Значение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Истина");
        РС.Записать();
1 mikecool
 
04.08.15
12:57
плохо, и ошибки никакой?
2 БукинГена
 
04.08.15
12:57
(1) нет
3 lera01
 
04.08.15
13:08
"РС.Значение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Истина");" прикольно.
(0) Не записывается даже при перезаписи существующего элемента? Может, в ПослеЗаписи() эту запись регистра перенести?
4 NcSteel
 
04.08.15
13:09
(0) Все записывается, просто:
ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Для переноса в УПП")
И/ИЛИ
Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Истина")

Возвращают пустые ссылки. Посмотри непосредственно в регистре с отбором по объекту.

Возможно и Ссылка не заполнена
5 БукинГена
 
04.08.15
13:14
(3) "Может, в ПослеЗаписи() эту запись регистра перенести?"
У модуля объекта справочника нету такого события.
6 БукинГена
 
04.08.15
13:15
(4) в отладчике все реквизиты записи заполнены
7 lera01
 
04.08.15
13:19
(5) Значит, получи и установи ссылку нового. Или через подписку регистр пиши.
8 БукинГена
 
04.08.15
13:20
(7) существуюшие справочники тоже не пишет
9 vhl
 
04.08.15
13:20
(0) Почему думаешь не записывается?
10 NcSteel
 
04.08.15
13:22
(9) Вера, глубокая вера.
11 БукинГена
 
04.08.15
13:24
(9) хз
12 vhl
 
04.08.15
13:26
(11) Сделай запросик - проверь:
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Свойство,
    |    ЗначенияСвойствОбъектов.Значение
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Объект = &Объект";
    
    Запрос.УстановитьПараметр("Объект", МойСпр);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
    
        Сообщить("" + Выборка.Свойство+" "+Выборка.Значение);
    
    КонецЦикла;
13 AllJoke
 
04.08.15
13:28
А ссылка точно не пустая?
14 NcSteel
 
04.08.15
13:33
(13) Никто не знает, автор тоже, он не умеет пользоваться отладчиком
15 БукинГена
 
04.08.15
13:33
16 БукинГена
 
04.08.15
13:37
может кто нить попробует это у себя?
17 БукинГена
 
04.08.15
13:39
(12) Самое интересное.
Я этот код добавил в модуле справочника после "РС.Записать()".
Сообщение выводится
18 NcSteel
 
04.08.15
13:40
(17) Значит все записалось
19 БукинГена
 
04.08.15
13:41
(18) но после записи в консоле запроса все пусто!
20 Nuobu
 
04.08.15
13:42
(19) Отборы проверял?
21 NcSteel
 
04.08.15
13:42
(19) Проверяй свою консоль.
И естественно проверь, что справочник записался полностью
22 БукинГена
 
04.08.15
13:43
(20) в запросе отобрал все записи регистра. вооще пусто
23 Nuobu
 
04.08.15
13:45
(22) Перед "Записать()" добавь "Прочитать()"
24 Мимохожий Однако
 
04.08.15
13:45
Запрос покажи
25 БукинГена
 
04.08.15
13:45
(21) вот журнал регистрации

http://s019.radikal.ru/i617/1508/e6/7e44b5abd2ef.png
26 БукинГена
 
04.08.15
13:46
(24)

ВЫБРАТЬ
    ЗначенияСвойствОбъектов.Объект,
    ЗначенияСвойствОбъектов.Свойство,
    ЗначенияСвойствОбъектов.Значение
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
27 БукинГена
 
04.08.15
13:46
(23) пробовал. безнадега
28 Nuobu
 
04.08.15
13:48
Может, РЛС?
29 Мимохожий Однако
 
04.08.15
13:48
Фрагмент кода покажи. Может быть, ты без отбора пишешь и стираешь напрочь весь регистр
30 БукинГена
 
04.08.15
13:49
(28) У админа с полными правами?
31 БукинГена
 
04.08.15
13:51
(15) в (29)
32 NcSteel
 
04.08.15
13:51
(25) Тебе все говорит что зафиксировано, но ты упорно утверждаешь что нет....
33 NcSteel
 
04.08.15
13:52
(23) Никогда больше не пытайся открывать рот, а иначе засмеют
34 Мимохожий Однако
 
04.08.15
13:52
(31)Сначала надо сделать отбор, потом прочитать, а потом только записывать. У тебя вместо новой записи стирается весь регистр.
35 NcSteel
 
04.08.15
13:53
(34) рукалицо....
36 Nuobu
 
04.08.15
13:53
(34) Это для набора записей, а не для менеджера записей.
37 Мимохожий Однако
 
04.08.15
13:54
Например
Набор = РегистрыСведений.МойРегистр.СоздатьНаборЗаписей();
  
  Набор.Прочитать();
  
  НовЗапись = Набор.Добавить();
  НовЗапись.МоёИзмерение1= КакоетоЗначение1;
  НовЗапись.МоёИзмерение2= КакоетоЗначение2;
  НовЗапись.МойРесурс = КакоетоЧисло;
  Набор.Записать();
38 NcSteel
 
04.08.15
13:54
(37) Причем тут набор записей?
Зачем прочитать?

мда... люди вы что курите?
39 Мимохожий Однако
 
04.08.15
13:56
Наконец-то пришёл МАСТЕР. Он нам всё покажет ))
40 БукинГена
 
04.08.15
13:59
кто нибуд пробовал у себя?
41 Mitriy
 
04.08.15
13:59
(39) ну да, для того, чтобы прочитать в набор пару десятков миллионов записей и записать их обратно, добавив одну самую любимую, мастером быть не надо...
42 NcSteel
 
04.08.15
14:00
(40) Просто регистр сведений записывать, естественно
43 gigi789
 
04.08.15
14:01
(40) каждый день рс пишу
44 Timon1405
 
04.08.15
14:01
(0) Такое ощущение, что у вас несколько таких объектов Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Истина") и пишется не тот, который нужен. попробуйте указать правильного владельца в этом методе последним параметром
45 Мимохожий Однако
 
04.08.15
14:01
Попробуй
Процедура ЗагрузитьСвойстваПоСсылкеСвойства(Номенклатура, СвойствоСсылка, ЗначениеСвойства)
    Если Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда
        Возврат;
    КонецЕсли;
    Если НЕ ЗначениеЗаполнено(ЗначениеСвойства) Тогда
        Возврат;
    КонецЕсли;
    Если СвойствоСсылка = ПланыВидовХарактеристик.СвойстваОбъектов.ПустаяСсылка() Тогда
        Возврат;
    КонецЕсли;
    // Готовим свойство, заполняем его назначение
    // Если подходящего свойства нет - создаем его, и прописываем все необходимые реквизиты
    // Если есть подходящее свойство, то берём его в качестве ПВХ
    Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура;
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    СвойстваОбъектов.Ссылка
    |ИЗ
    |    ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов
    |ГДЕ
    |    СвойстваОбъектов.Ссылка = &СвойствоСсылка
    |    И СвойстваОбъектов.НазначениеСвойства = &НазначениеСвойства";
    Запрос.УстановитьПараметр("СвойствоСсылка", СвойствоСсылка);
    Запрос.УстановитьПараметр("НазначениеСвойства", Назначение);
    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
        ОбъектПВХ = ПланыВидовХарактеристик.СвойстваОбъектов.СоздатьЭлемент();
        ОбъектПВХ.УстановитьНовыйКод();
        ОбъектПВХ.Наименование = СвойствоСсылка.Наименование;
        ОбъектПВХ.НазначениеСвойства = Назначение;
        ОбъектПВХ.Записать();
        ПВХ = ОбъектПВХ.Ссылка;
    Иначе
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        ПВХ = Выборка.Ссылка;
    КонецЕсли;
    
    // Готовим значение свойства
    // Если подходящего значения свойства нет - создаем его, и прописываем все необходимые реквизиты
    // Если есть подходящее значение свойства, то берём его в качестве Значения
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Ссылка
    |ИЗ
    |    Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Владелец = &Владелец
    |    И ЗначенияСвойствОбъектов.Наименование = &Наименование";
    Запрос.УстановитьПараметр("Владелец", ПВХ);
    Запрос.УстановитьПараметр("Наименование", ЗначениеСвойства);
    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
        ОбъектЗначения = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
        ОбъектЗначения.УстановитьНовыйКод();
        ОбъектЗначения.Наименование = ЗначениеСвойства;
        ОбъектЗначения.Владелец = ПВХ;
        ОбъектЗначения.Записать();
        Значение = ОбъектЗначения.Ссылка;
    Иначе
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        Значение = Выборка.Ссылка;
    КонецЕсли;
    
    // Делаем записи в регистре "Значения свойств объектов"
    // Чтобы связать номенклатуру, свойство и значения свойства.
    Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
    Запись.Объект = Номенклатура;
    Запись.Свойство = ПВХ;
    Запись.Значение = Значение;
    Запись.Записать();
    
КонецПроцедуры // ЗагрузитьСвойстваПоСсылкеСвойства()
46 БукинГена
 
04.08.15
14:04
(44) проверил, там один
47 lera01
 
04.08.15
14:06
(46) В журнале регистрации написано что все записалось. С чего ты вообще взял, что это не так? Где-то не видишь это что ли?
48 NcSteel
 
04.08.15
14:07
(46) Совет один, позови специалиста, он тыкнет носом.
49 Мимохожий Однако
 
04.08.15
14:11
(46)Операции - Регистры сведений - Значения свойств объектов открой. Там что видишь?
50 БукинГена
 
04.08.15
14:17
(49) там вообще пусто
51 hhhh
 
04.08.15
14:18
(50) покажи скрин
52 Мимохожий Однако
 
04.08.15
14:18
(50)Ч.т.д.
Сделай отдельную обработку и проверь (45). я это выдрал из обработки, которая работает и записывает.
53 БукинГена
 
04.08.15
14:19
54 hhhh
 
04.08.15
14:20
(470 журнал еще ни о чем не говорит. Может был откат транзакции.
55 NcSteel
 
04.08.15
14:21
(53) ты уверен что справочник записался без ошибки? И не было отказа в записи?
56 БукинГена
 
04.08.15
14:22
(55) смотри здесь (25)
57 hhhh
 
04.08.15
14:23
(56) а почему там два раза в журнале запись. Покажи, где второй раз пишешь?
58 Nuobu
 
04.08.15
14:25
(57) Там один раз запись.
Предыдущая - на три минуты раньше.
59 БукинГена
 
04.08.15
14:25
(57) второй раз записал из обработки. Там нормально. регистр записывается
60 Nuobu
 
04.08.15
14:25
(59) Значит идёт откат транзакции.
Смотри (55)
61 БукинГена
 
04.08.15
14:27
(60) но в журнале регистрации транзакция зафиксировано
62 БукинГена
 
04.08.15
14:33
(60) В справочнике изменил реквизит, этот реквизит записался. Значить отката не было получается
63 vhl
 
04.08.15
14:54
Посмотри что в модуле набора записей регистра?
64 lera01
 
04.08.15
14:56
Вот что интересно. В (17) написано, что отладочное сообщение не выводится. Значит, этот фрагмент кода вообще не работает. В ЖР есть записи, что регистр пишется - значит, еще есть какое-то место, откуда это происходит.
65 БукинГена
 
04.08.15
15:02
(63)
Процедура ПередЗаписью(Отказ, Замещение)
    
    Если (Не ОбменДанными.Загрузка) И
        (ПланыОбмена.ГлавныйУзел() <> Неопределено) И
        НЕ Константы.РазрешитьРедактированиеДанныхВПериферийныхИБ.Получить() Тогда
        Отказ = Истина;
    КонецЕсли;
    
КонецПроцедуры


Но там условия дают ложь
66 БукинГена
 
04.08.15
15:02
(64) врал, ща выходит сообщение
67 vhl
 
04.08.15
15:10
(66) Закоментируй в спр. "номенклатура" все что до кода в (0) и все что после.
68 БукинГена
 
04.08.15
15:12
(67) зачем?
69 vhl
 
04.08.15
15:14
(68) у тебя есть получше идеи?
70 vhl
 
04.08.15
15:15
Кстати, что выдает:
Сообщить(ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Для переноса в УПП"));
Сообщить(Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Истина"));
71 БукинГена
 
04.08.15
15:16
Кажется понял.
В форме справочника есть закладка "свойства", а там это свойство пусто. Соответсвтенно при записи справочника если в форме это свойство пусто, тогда запись регистра удаляется.
Какой же я дурень!
72 БукинГена
 
04.08.15
15:17
все спасибо за внимание
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший