Имя: Пароль:
1C
1С v8
Не появляется запись в регистре сведений ЗначенияСвойствОбъектов. Чяднт?
0 PCcomCat
 
29.02.16
15:59
Доброго времени, уважаемые!

Где-то туплю, но где?

Комплексная автоматизация, редакция 1.1 (1.1.55.2), платформа 8.3.7.1831.

Нужно сделать запись в регистр сведений ЗначенияСвойствОбъектов.

В модуле объекта справочника "Контрагенты" ПриЗаписи() пишу:

        Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Дата оформления");
        
        НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
        
        Запись = НаборЗаписейЗначенияСвойств.Добавить();
    
        Запись.Объект   = Ссылка;
        Запись.Свойство = Свойство;
        Запись.Значение = ТекущаяДата();
        
        НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(Ссылка);
        
        НаборЗаписейЗначенияСвойств.Записать();

Но запись не появляется!

Через обработку всё нормально записывается.

Что я делаю не так? Уже сдаюсь!
1 Лефмихалыч
 
29.02.16
16:01
>Но запись не появляется!
как ты это установил?
2 PCcomCat
 
29.02.16
16:02
Глазками в регистре сведений, через форму просмотра значений, запросом. Может я схожу с ума?
3 ptiz
 
29.02.16
16:09
(2)  Всё там появляется, только ты таким кодом всегда только 1 свойство пишешь, а остальные затираешь.
4 Access granted
 
29.02.16
16:09
(0) Зачем набор для одной записи? Используй менеджер записи.
5 PCcomCat
 
29.02.16
16:10
(3) Где я туплю???
6 PCcomCat
 
29.02.16
16:11
(4)Через менеджер записи тоже самое получаю.
7 Access granted
 
29.02.16
16:12
(6) Не может быть такого.
8 PCcomCat
 
29.02.16
16:14
Чего нужно: чтобы при записи нового контрагента записывалась дата его создания. Черти когда добавила свойство объекта "Дата оформления", назначение - Справочник "Контрагенты", тип значения - дата (Дата и время), текст, указанный выше, в модуль объекта в процедуру ПриЗаписи(). При тестировании всё было нормально. Опять же черти когда внешней обработкой достала из журнала регистрации дату создания элементов, записала таким кодом. А сейчас стали говорить, что даты нет. И реально нет и не пишется. Код сравнила со стандартным из модуля объекта обработки ЗначенияСвойствОбъектов. Я чекнусь скоро!
9 PCcomCat
 
29.02.16
16:14
Те записи, которые были раньше, они на месте.
10 PCcomCat
 
29.02.16
16:17
Да, обнаружилось это сегодня. Менеджеры утверждают, что у одного контрагента забивали уже дважды контактную информацию, а она исчезла. Может что-то с базой? SQL-2012.
11 Лефмихалыч
 
29.02.16
16:20
(10) да, конечно, база виновата.
Не умеешь наборами пользоваться, пользуйся менеджером записи.

И на продуктиве лучше не гоняй свои поделки
12 PCcomCat
 
29.02.16
16:23
(11)
Из стандартного кода:


// Функция записывает значения свойств в информационную базу.
//
// Параметры:
//  Нет.
//
// Возвращаемое значение:
//  Истина - если значения свойств были записаны, или их не требуется записывать
//  Ложь   - если значения свойств не удалось записать.
//
Функция ЗаписатьЗначенияСвойств() Экспорт
    
    НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
    
    Для каждого Строка Из СвойстваИЗначения Цикл
        Если ЗначениеЗаполнено(Строка.Значение) Тогда
            Запись = НаборЗаписейЗначенияСвойств.Добавить();
            
            Запись.Объект   = ОбъектОтбораЗначений;
            Запись.Свойство = Строка.Свойство;
            Запись.Значение = Строка.Значение;
        КонецЕсли;
    КонецЦикла;
    
    НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(ОбъектОтбораЗначений);
    
    Попытка
        НаборЗаписейЗначенияСвойств.Записать();
    Исключение
        #Если Клиент Тогда
            Предупреждение("Не удалось записать значения свойств:" + Символы.ПС + ОписаниеОшибки());
        #КонецЕсли
        Возврат Ложь;
    КонецПопытки;
    
    Возврат Истина;
    
КонецФункции

Ну ткните, пожалуйста, где у меня руки кривые?
13 Лефмихалыч
 
29.02.16
16:24
(12) да хрен тебя разберет, кгде не так у тебя. Код рабочий. Если не работает, значит ты где-то привираешь
14 PCcomCat
 
29.02.16
16:25
(13) В том-то и дело, что я знаю, что он рабочий. И такое!
15 Лефмихалыч
 
29.02.16
16:27
(14) протри спиртом
16 PCcomCat
 
29.02.16
16:30
Стоит начать?
17 PCcomCat
 
29.02.16
16:34
Весь мой код:

    //РС***
    Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Дата оформления");
    
    Запрос = Новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Объект,
    |    ЗначенияСвойствОбъектов.Свойство,
    |    ЗначенияСвойствОбъектов.Значение
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Объект = &Объект
    |    И ЗначенияСвойствОбъектов.Свойство = &Свойство";
    
    Запрос.УстановитьПараметр("Свойство", Свойство);
    Запрос.УстановитьПараметр("Объект", Ссылка);
    РезЗапроса = Запрос.Выполнить();
    
    Если РезЗапроса.Пустой() тогда
        //
        //НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
        //
        //Запись = НаборЗаписейЗначенияСвойств.Добавить();
        //
        //Запись.Объект   = Ссылка;
        //Запись.Свойство = Свойство;
        //Запись.Значение = ТекущаяДата();
        //
        //НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(Ссылка);
        //
        //НаборЗаписейЗначенияСвойств.Записать();
        
        Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
        
        Запись.Объект   = Ссылка;
        Запись.Свойство = Свойство;
        Запись.Значение = ТекущаяДата();
        
        Запись.Записать();
    КонецЕсли;    
    
    //РС
18 Лефмихалыч
 
29.02.16
16:36
(17) и чо?
19 PCcomCat
 
29.02.16
16:38
Я и спрашиваю: чо?
20 Лефмихалыч
 
29.02.16
16:39
(19) мне норм
21 hhhh
 
29.02.16
16:41
(19) может Объект не тот
22 PCcomCat
 
29.02.16
16:41
Чего базе не хватает???
23 PCcomCat
 
29.02.16
16:42
Через обработку работает, проверила. А модуле объекта справочника заходит, выполняет (отладчиком смотрю), но записи нет.
24 Лефмихалыч
 
29.02.16
16:42
(22) или код не тот запускаешь, который показываешь, или методика проверки результата у тебя корявая, или вообще запускаешь в одной базе, а смотришь в другой
25 Лефмихалыч
 
29.02.16
16:43
(23) посмотри в журнал регистрации, нет ли там отмены транзакции?
А то може там где Отказ=истина...
26 hhhh
 
29.02.16
16:44
(23) может партнеров смотришь, а не контрагентов?
27 PCcomCat
 
29.02.16
16:49
Смотрю у контрагента через стандартную форму просмотра доп. реквизитов, смотрю регистр сведений без отбора. В журнале регистрации запись зафиксирована. Через обработку тот же код всё записывает. Мозги набекрень...
28 ptiz
 
29.02.16
16:51
(23) Встань отладчиком в модуль набора записей регистра сведений, когда остановка сработает - смотри стек вызовов (ctl-alt-c)
29 ptiz
 
29.02.16
16:51
Тогда найдешь, откуда у тебя набор очищается (если это так).
30 PCcomCat
 
29.02.16
16:54
В модуле набора записей регистра пусто. И в модуле менеджера регистра пусто.
31 del123
 
29.02.16
16:55
(23) А объект справочника новый или уже записан в базу?
32 del123
 
29.02.16
16:56
а то может быть записываешь туда ссылку на еще не существующий объект.
33 PCcomCat
 
29.02.16
16:59
И нового создавала, и с записанным экспериментировала. У меня проверка на отсутствие записи стоит. И ее проходит, т.к. записи нет. В журнале говорит, что Регистр сведений. Значения свойств объектов транзакция зафиксирована.
34 PCcomCat
 
29.02.16
17:00
(32) Не до такой степени дура, естественно ссылка есть - отладчик подтверждает.
35 PCcomCat
 
29.02.16
17:02
Было бы не обидно, если в первый раз бы писала.
36 del123
 
29.02.16
17:04
(35) не хотел обидеть, просто перечисляю возможные варианты.
37 PCcomCat
 
29.02.16
17:05
(36) Я не обижаюсь. Я схожу с ума!
38 del123
 
29.02.16
17:08
А какой код в обработке, который выполняется корректно
39 PCcomCat
 
29.02.16
17:10
Если РезПоиска.Количество()>0 тогда
                    //НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
                    //
                    //Запись = НаборЗаписейЗначенияСвойств.Добавить();
                    
                    Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
                    
                    Запись.Объект   = ВыборкаКонтрагентов.Ссылка;
                    Запись.Свойство = Свойство;
                    Запись.Значение = РезПоиска[0].Дата;
                    
                    Запись.Записать();
                    //
                    //НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(ВыборкаКонтрагентов.Ссылка);
                    //
                    //НаборЗаписейЗначенияСвойств.Записать();
                    
                    Сообщить(СокрЛП(РезПоиска[0].Данные) + " - Нужно записать из ЖР - " + СокрЛП(РезПоиска[0].Дата));
                
            Иначе
КонецЕсли;
40 PCcomCat
 
29.02.16
17:11
И через менеджер, и через набор записей работает.
41 PCcomCat
 
29.02.16
17:13
Отлучусь. До дома доеду, продолжу.
42 alle68
 
29.02.16
17:24
(19) 1С пишет в набор ВСЕ непустые свойства, а ты всего лишь одну запись. Вот и потёрлись свойства чуть-чуть... Менеджер сейчас такого не делает.
43 lera01
 
29.02.16
18:29
А свойство, пусть даже пустое, видно в списке свойств у этого контрагента? Дело в том, что, если у свойства заполнено назначение, то само свойство видно только у тех, кому назначено.
44 PCcomCat
 
29.02.16
20:49
(43) Контрагента вообще нет в регистре.
45 PCcomCat
 
29.02.16
20:51
(42) Хоть через менеджер, хоть через набор - результат один - нет записи. Это, если через модуль объекта справочника писать, а через обработку всё нормально записывается обоими способами.
46 Сильф
 
29.02.16
20:56
А нет ли какой-нибудь подписки на событие ПриЗаписи спр-ка Контрагенты, в котором происходит кака?
47 PCcomCat
 
29.02.16
21:07
Да вот, буду искать. А то есть один сторонний разработчик...
48 PCcomCat
 
29.02.16
22:31
Всё, дятел я. При интерактивной записи у формы элемента есть реквизит типа обработка, в которой при открытии формы заполнен набор данных из регистра. А там нет моей записи. Не знала.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший