Имя: Пароль:
1C
1С v8
Не добавляется запись в Регистр сведений...
0 Trance_1C
 
20.09.12
12:54
Все банально просто, но не могу понять почему записи не добавляются?
регистр сведений непереодический, независимый.

НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура);
НаборЗаписей.Отбор.Свойство.Установить(ТекущееСвойство);
// пробовал с этим, не помогло...
// НаборЗаписей.Записывать=Истина;
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Номенклатура = ТекущаяНоменклатура;
НоваяЗапись.Свойство = ТекущееСвойство;
НоваяЗапись.Значение = ТекущееЗначение;
НаборЗаписей.Записать();
1 aleks-id
 
20.09.12
12:55
читать СП до посинения
2 ChAlex
 
20.09.12
12:56
НаборЗаписей.Прочитать()
3 Trance_1C
 
20.09.12
12:57
(2) плин я еще думал про Прочитать() но решил что таких записей нет, читать нечего :)
4 Trance_1C
 
20.09.12
12:59
т.е. мне же их не изменить надо а добавить, раньше вроде без Прочитать() нормально добавлялись, это с 8.2 что-то изменилось, или я путаю?
5 ILM
 
гуру
20.09.12
12:59
(1) Чтобы читать СП, нужно сначала купить СП.
(0) НаборЗаписей.Добавить(); - оригинально чё..., а семки есть?
6 Trance_1C
 
20.09.12
13:17
(5)  ILM давай по-существу, что не так с этим г-кодом, у меня уже 8 вечера, и домой давно пора... в СП ничего необычного про РСВ нет.
7 Trance_1C
 
20.09.12
13:19
(2) НаборЗаписей.Прочитать()
с этим тоже не добавляются...


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

НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Номенклатура = ТекущаяНоменклатура;
НоваяЗапись.Свойство = ТекущееСвойство;
НоваяЗапись.Значение = ТекущееЗначение;
НаборЗаписей.Записать();
8 Irbis
 
20.09.12
13:19
А менеджер записи чем не угодил?
9 Trance_1C
 
20.09.12
13:21
(8)Хммм, я абсолютно лоялен и к менеджеру и к набору, лишь бы запись появлялась :)
10 Irbis
 
20.09.12
13:22
(9) Так чего же тебе бродяга надо ещё?©
11 Heckfy
 
20.09.12
13:23
(7) Вот, выдрал из базульки одной. Под твой случай немного адаптировал:

   НаборЗаписей=РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
   НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура);
   НаборЗаписей.Отбор.Свойство.Установить(ТекущееСвойство);
   НаборЗаписей.Прочитать();
   ТЗ=НаборЗаписей.Выгрузить();
   НоваяСтрока=ТЗ.Добавить();
НоваяСтрока.Номенклатура=ТекущаяНоменклатура;
НоваяСтрока.Свойство=ТекущееСвойство;
НоваяСтрока.Значение =ТекущееЗначение;
   НаборЗаписей.Загрузить(ТЗ);
   НаборЗаписей.Записать();
12 Irbis
 
20.09.12
13:24
РегистрКурсыВалют = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();

       РегистрКурсыВалют.Период    = ДатаКурса;
       РегистрКурсыВалют.Валюта    = Валюта;
       РегистрКурсыВалют.Курс      = 1;
       РегистрКурсыВалют.Кратность = 1;
       РегистрКурсыВалют.Записать();
13 xard
 
20.09.12
13:24
(11) тут они чтение из регистра делают чтобы не терять уже записанные данные.
14 ChAlex
 
20.09.12
13:25
(7) листинг верный - записи должны и наверное добавляются - может у вас какой отбор установлен, или не обновили форму списка и не видите изменений. Записать (вернее дописать) набор можно и без прочитать, но тогда .Записать(Истина) иначе затрете существующий
15 ChAlex
 
20.09.12
13:27
(11) - выгружать в таблицу, потом загружать - будет медленнее, и в данном простом случае необоснованно. Все работает - тут все просто как грабли, не ищите сложных путей
16 ChAlex
 
20.09.12
13:27
(7) кстати     НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура,Истина);
   НаборЗаписей.Отбор.Свойство.Установить(ТекущееСвойство,Истина);
17 ChAlex
 
20.09.12
13:29
(+7) хотя должно быть и одно и тоже, но не хочется зависеть от приходти разработчика (кто его знает в следующем релизе не появится ошибка в инициализации по умолчанию :))
18 ChAlex
 
20.09.12
13:31
(12) - черех менеджер записи добавлять стоит только единичные строки, иначе в целом запись будет происходить долго. Если несколько записей, то лучше все-таки через набор записей
19 ILM
 
гуру
20.09.12
13:31
(14) "-Золотые ваши слова, Юрий Бенедиктович, не бережёте вы себя."
Правильно что "Менеджер записи" применять нужно, а то "набором записей", да ещё и в РС непереодическом, независимом. Черевато. Любая запись набора будет стирать все записи и делать новые.
20 ChAlex
 
20.09.12
13:33
(7) - уверен, что данный код работает. Смотрите что вы потом сравниваете или получаете (может вы данные записываете не те, которые ожидаете увидеть)
21 Trance_1C
 
20.09.12
13:33
(14) Засада в этом и есть, листинг верный, в другом месте в этой же конфиге работает такой же код, на этом регистре не работает :((
(16) смотрел в отладчике свойства набора записей, отборы используются после инициализации по дефолту
(19) записи единичные, сейчас пробую менеджером
22 ChAlex
 
20.09.12
13:37
(21) - да не может он не работать в одном месте, а в другом работать. Разве что назначить подписку на событие ПриЗаписи для данного регистра и там отменять ваши действия - другого нет, ну или действие производится в транзакции , которая не закрывается
23 hhhh
 
20.09.12
13:37
(21) 1. не нажимаешь обновить в списке регистра
    2. установлен отбор, поэтому и не видишь.
24 Trance_1C
 
20.09.12
13:50
у регистра вообще формы нет, она генерится никаких отборов там нет, обновлял переоткрывал уже не раз, тоже думаю в сторону незавершенной транзакции, руками записи в форме списка добавляются, программно нет
25 Irbis
 
20.09.12
13:57
(18) А если у записей разный набор измерений что делать?
26 Ns33
 
20.09.12
14:04
(0)

НаборЗаписей.Записать(ЛОЖЬ); //тогда можно без НаборЗаписей.Прочитать();
27 Trance_1C
 
20.09.12
14:10
(19) Так это мне и нужно "Любая запись набора будет стирать все записи и делать новые." каждая запись делается с отбором по всем измерениям, и каждая запись уникальна, других там и не должно быть.
Еще бы работало в моем случае :)
28 ChAlex
 
20.09.12
14:13
(26) -  ну да, правильно - я не тот аргумент поставил
29 ChAlex
 
20.09.12
14:14
(27) - да работает все. Ну если искать что, то отладчик и вперед. После записи набора ничто не мешает его опять прочитать и посмотреть что-почем
30 ChAlex
 
20.09.12
14:16
+(29) - то бишь набор до запис и набор повторно считанный после записи -  уверен он будет одинаковый, а дальше уже будете искать почему вы его не видите где-то в другом измерении вселенной
31 ChAlex
 
20.09.12
14:18
ну или где потеряли зафиксироватьтранзакцию()
32 Trance_1C
 
20.09.12
14:31
В общем Менеджером тоже не получилось :(
И вот так не получилось
НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Номенклатура = ТекущаяНоменклатура;
НоваяЗапись.Свойство = ТекущееСвойство;
НоваяЗапись.Значение = ТекущееЗначение;

НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура);

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


Кстати речь идет о конфиге УПП 1.2, подписок на событие на этот регистр только одна при выгрузке на сайт, но обмена с сайтом нет,
в этой конфигурации есть обработка ЗначенияСвойствОбъекта из нее запись происходит, и они появляются в списке регистра, а из модуля справочника подразделения откуда я пытаюсь добавить запись - нет.
может все же не в транзакции дело
33 Heckfy
 
20.09.12
14:40
Чем тебе (11) то не нравится.
34 Trance_1C
 
20.09.12
14:46
(33) мне очень нравится и (11),12 и вариант из 0, все они отрабатывают но записи не появляются.
может что-то с таблицей регистра, завтра буду смотреть.
35 hhhh
 
20.09.12
14:53
(34) наверно, надо отладчиком копать в сторону ТекущаяНоменклатура и ТекущееСвойство. Похоже числа туда передаете. Или даты.
36 Trance_1C
 
20.09.12
15:11
(35) если бы все было так просто этой темы просто не было бы, я пересмотрел все свойства нового набора записей, перед записью и после все как и должно быть только период и регистратор не указаны т.к. не нужны.
37 Aprobator
 
20.09.12
15:15
модуль набора записей регистра отладчиком смотрел?
38 Aprobator
 
20.09.12
15:21
хотя в типовой он пустой.
39 alexkv_m
 
20.09.12
15:21
НаборЗаписей.Записывать = Истина;
попробуй дописать
40 hhhh
 
20.09.12
15:22
(38) в типовой не бывает измерения Номенклатура. Это самописка у него типа.
41 Aprobator
 
20.09.12
15:24
(40) на это даже не поглядел. Вообще, как вариант, в ведущее измерение ничего не пишется (значение неправильное какое то) и все дела.
42 Trance_1C
 
20.09.12
15:28
(39) дописывал уже, модули регистра все пустые
(40) конфа типовая и регистр типовой, пример кода вначале привел с немного другими названиями свойств сути это не меняет.
43 Aprobator
 
20.09.12
15:31
(42) тогда показывай значение и тип ТекущаяНомеклатура и тип измерения регистра.
44 alexkv_m
 
20.09.12
15:32
(42)
НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура);
НаборЗаписей.Прочитать()
НаборЗаписей.Очистить()
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Объект = ТекущаяНоменклатура;
НоваяЗапись.Свойство = ТекущееСвойство;
НоваяЗапись.Значение = ТекущееЗначение;
НаборЗаписей.Записывать = Истина;
НаборЗаписей.Записать();
Т.е. ты так прописывал?
45 Aprobator
 
20.09.12
15:32
впрочем, если типовая, то достаточно показать только ТекущаяНоменклатура. Вдруг туда объект вместо ссылки затесался?
46 Aprobator
 
20.09.12
15:32
(44)жуть то какая
47 hhhh
 
20.09.12
15:33
(42) да нет. Всё состоит из мелочей. Там недокрутил, тут не посмотрел, глядишь, а суть совсем другая.
48 ChAlex
 
20.09.12
16:22
Не ну нафиг итди простым путем, лучше будем догадки строить, в носу ковырятся, пивко посасывать глядишь и рассосется: ну что сложно стать отладчиком в точке

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

Проедварительно добавив строку после этого

НаборЗаписей.Прочитать();

Посмотреть в отладчике содержимое набора перед записью в базу. Сделать 2 шага по тексту программы и посмотреть содержимое набора после записи в базу.

Потом сделать выводы и дойти до понимания сути проблемы
49 Trance_1C
 
21.09.12
03:38
Разобрался в чем была проблема (48) отладчик здесь не помог бы, если так сделать он показывал что записи есть и в наборе до записи и после.
Я бы это назвал подставой платформы не иначе, в УПП 1.2.17 есть справочник подразделения, из его модуля, в ПередЗаписью() я и пытался добавить свойство подразделению если такого не обнаруживалось, у справочника на форме элемента подключена обработка ЗначенияСвойствОбъекта, она при открытии передает в свою таблицу на форме элемента исходный набор записей и при записи сохраняет этот же набор из своей таблицы, получается сначала отрабатывала запись нового свойства из модуля справочника перед записью, а затем эта обработка сохраняла свой исходный набор с таблицы на форме, а он не менялся...
вот такая засада, а я только потом ее заметил :)
50 alkov
 
21.09.12
06:18
(49) И чем тебе платформа виновата, если ты в коде типовой не разобрался?
51 Irbis
 
21.09.12
07:02
Как всегда: "Дело было не в боббине...а в прокладке между монитором и креслом"