|
Не понятно как записывается набор записей | ☑ | ||
---|---|---|---|---|
0
Ayvengo
05.07.11
✎
16:27
|
Простейшая процедура
//СсылкаНаОбъект - СправочникСсылка.Контрагенты или СправочникСсылка.ДоговорыКонтрагентов //Свойство = ПланВидовХарактеристикСсылка.СвойстваОбъектов Срабатывает данный механизм при записи объекта - в моем случае при записи нового контрагента (то, что это новый контрагент узнаю из доп свойств, который добавляются перед записью объекта), можно конечно поизвращаться через получить ссылку нового, но мне нехочется :) Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("000001"); НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(Источник.Ссылка); НаборЗаписей.Отбор.Свойство.Установить(Свойство ); НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() = 0 Тогда СтрокаНабора = НаборЗаписей.Добавить(); СтрокаНабора.Значение = "Здесь значение свойства!!!"; СтрокаНабора.Объект = источник.ссылка; СтрокаНабора.Свойство = Свойство; НаборЗаписей.Записать(); КонецЕсли; Что я наблюдают: Свойство для контрагента не устанавливается, а в договоре устанавливается (т.к. при записи контрагента создается договора и записывается) ... Простите, но ЧТО КУРИТЬ? |
|||
1
Amiralnar
05.07.11
✎
16:28
|
Простите, но ЧТО КУРИЛИ?
|
|||
2
Ayvengo
05.07.11
✎
16:28
|
Набор записей - отборы и всякая ерунда, в принципе смысла не имеет, т.к. объект новый. но не обращайте на это внимания :)
|
|||
3
Ayvengo
05.07.11
✎
16:29
|
(1) вот и я не понимаю...
|
|||
4
Amiralnar
05.07.11
✎
16:31
|
Во-первых, я не знаю, где конкретно этот код, но удостоверьтесь, что ссылка не пустая.
Во вторых, я использую менеджер записи. Просто по смыслу - одна запись. И проще в работе. |
|||
5
Ayvengo
05.07.11
✎
16:31
|
МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Значение = "Здесь значение свойства!!!"; МенеджерЗаписи.Объект = СсылкаНаОбъект; МенеджерЗаписи.Свойство = Свойство; МенеджерЗаписи.Записать(); С этим такая же беда :( |
|||
6
Amiralnar
05.07.11
✎
16:33
|
Во-первых, проверьте, что ссылка не пустая.
ПолучитьСсылкуНового() - скорее всего вернет правильную ссылку, которая ляжет в измерение. |
|||
7
Ayvengo
05.07.11
✎
16:33
|
(4) код в подписке на событие ПриЗаписи справочника. Если отдельно код использовать, то все работает ...
|
|||
8
НЕА123
05.07.11
✎
16:33
|
(5)
СсылкаНаОбъект - это кто? |
|||
9
Ayvengo
05.07.11
✎
16:34
|
СсылкаНаОбъект - Источник.Ссылка
|
|||
10
vmv
05.07.11
✎
16:34
|
много сумбура, увы
мож в артисты еще не поздно пойти, подумай |
|||
11
Ayvengo
05.07.11
✎
16:35
|
(10) в артисты не возьмут, много сумбура ;)
|
|||
12
hhhh
05.07.11
✎
16:35
|
(9) а что такое "источник"?
|
|||
13
le_
05.07.11
✎
16:35
|
ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("000001");
Для контрагентов и договоров одно и то же? И в назначениях ничего не указано? |
|||
14
Amiralnar
05.07.11
✎
16:36
|
(12) Б--ть, что же такое Источник в подписке?
|
|||
15
vmv
05.07.11
✎
16:36
|
локализуй, выдели проблему, выбрось шушару и спроси еще раз
|
|||
16
Amiralnar
05.07.11
✎
16:38
|
(13) Назначение для отбора служит, по моему. Программно возьмется записать даже с чужим назначением в свойстве.
Правда не покажет в списке =) |
|||
17
Ayvengo
05.07.11
✎
16:40
|
:facepalm:
Подписка на событие использует обработчик в котором есть параметр "Источник" в моем случае - это СправочникОбъект.Контрагенты или СправочникОбъект.ДоговорыКонтрагентов Событие срабатывает "ПриЗаписи" Объекта, ну что тут не понятного? |
|||
18
hhhh
05.07.11
✎
16:43
|
(17) что непонятно, смотри (13).
|
|||
19
Ayvengo
05.07.11
✎
16:45
|
(18) (13) Свойство ищется по коду - в чем проблема? ПВХ.СвойстваОбъектов - код устанавливается уникальным на все ПВХ ...
|
|||
20
MNS_Ротерта
05.07.11
✎
16:46
|
(0) Какая ошибка то выскакивает. Засунь твое чудо в попытку и выведи сообщение об ошибке. Я даже не пойму в чем ошибка у тебя и ты похоже тоже. Тут все гаданием уже устали заниматься. Используй СоздатьНаборЗаписейа не СоздатьМенеджерЗаписи даже для одной строки. Раньше СоздатьНаборЗаписей работал на 50% быстрее хоть для одной хоть для миллиона записей. Мозможно что то изменили в платформе. Замерь производительность и сделай так как работает быстрее. Вполне возможно что у тебя либо пустой источник либо тип не тот что надо. Либо у тебя 2 строки с идентичными измерениями пытаются записать. Убери НаборЗаписей.Прочитать();
|
|||
21
Ayvengo
05.07.11
✎
16:47
|
(20) нет никакой ошибки... просто у контрагентов не записывается свойство, а в договоре для этого контрагента записывается... срабатывает эта подписка дважды. Может я какую-то мелочь упустил ..
|
|||
22
Ayvengo
05.07.11
✎
16:47
|
+(19) - Назначение - Справочники.
|
|||
23
Amiralnar
05.07.11
✎
16:48
|
Отладчик в зубы.
|
|||
24
le_
05.07.11
✎
16:50
|
(22) Предлагаю эксперимент - измени назначение элемента с кодом "000001" на "Справочник "Контрагенты"" и попробуй записать набор и для контрагентов и для договоров.
|
|||
25
Ayvengo
05.07.11
✎
16:56
|
(24) у меня так и работает, я первоначально пробовал записывать через набор .. та же самая фигня ...
Такое при записи договора МенеджерЗаписи РегистрСведенийМенеджерЗаписи.ЗначенияСвойствОбъектов РегистрСведенийМенеджерЗаписи.ЗначенияСвойствОбъектов Активность Истина Булево Значение "=0004253" Строка НомерСтроки 0 Число Объект Основной договор СправочникСсылка.ДоговорыКонтрагентов Период 01.01.0001 0:00:00 Дата Регистратор Неопределено Свойство Код из 1С 7.7 ПланВидовХарактеристикСсылка.СвойстваОбъектов ВерсияДанных "AAAAAAACWI0=" Строка Код "00000000002" Строка НазначениеСвойства Справочник "Договоры контрагентов" ПланВидовХарактеристикСсылка.НазначенияСвойствКатегорийОбъектов Наименование "Код из 1С 7.7" Строка ПометкаУдаления Ложь Булево Предопределенный Ложь Булево Родитель ПланВидовХарактеристикСсылка.СвойстваОбъектов Ссылка Код из 1С 7.7 ПланВидовХарактеристикСсылка.СвойстваОбъектов ТипЗначения Строка ОписаниеТипов ЭтоГруппа Ложь Булево А так при записи контрагента МенеджерЗаписи РегистрСведенийМенеджерЗаписи.ЗначенияСвойствОбъектов РегистрСведенийМенеджерЗаписи.ЗначенияСвойствОбъектов Активность Истина Булево Значение "=0003156" Строка НомерСтроки 0 Число Объект 1234123 СправочникСсылка.Контрагенты Период 01.01.0001 0:00:00 Дата Регистратор Неопределено Свойство Код из 1С 7.7 ПланВидовХарактеристикСсылка.СвойстваОбъектов ВерсияДанных "AAAAAAACWIw=" Строка Код "00000000003" Строка НазначениеСвойства Справочник "Контрагенты" ПланВидовХарактеристикСсылка.НазначенияСвойствКатегорийОбъектов Наименование "Код из 1С 7.7" Строка ПометкаУдаления Ложь Булево Предопределенный Ложь Булево Родитель ПланВидовХарактеристикСсылка.СвойстваОбъектов Ссылка Код из 1С 7.7 ПланВидовХарактеристикСсылка.СвойстваОбъектов ТипЗначения Строка ОписаниеТипов ЭтоГруппа Ложь Булево |
|||
26
Ayvengo
05.07.11
✎
16:57
|
Оу, ну и хренотенькая получилась :D
|
|||
27
Ayvengo
05.07.11
✎
17:11
|
Мда... какая-то непонятная вещь происходит :(
|
|||
28
vmv
05.07.11
✎
17:12
|
(27) еще можно подать документы в щуку в этом году
|
|||
29
Ayvengo
05.07.11
✎
17:15
|
(28)да хоть в окуня ... это не поможет
|
|||
30
Bober
05.07.11
✎
17:17
|
(0)
два варианта: - значение уже в регистре по этому объекту с этим свойством, поэтому по твоему условию запись в РС не добавляется. - значение записывается, но в пользовательской интерфейсе не отображается, так как свойство не привязано к этому типу объекта. |
|||
31
Ayvengo
05.07.11
✎
17:19
|
(30) - первое отпадает, ибо записи замещаются
второе тоже отпадает, потому что через консоль запросов гляжу ;) |
|||
32
Bober
05.07.11
✎
17:23
|
первое не отпадает, так как есть условие
НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() = 0 Тогда т.е. если уже есть запись с ключами объект-свойство, то ничего не замещается. |
|||
33
Ayvengo
05.07.11
✎
17:24
|
(32) отпадает, отпадает :) Объект-то новый ;)
|
|||
34
Bober
05.07.11
✎
17:26
|
(33) Новый - еще не записанный на момент записи набора записей в РС?
|
|||
35
Ayvengo
05.07.11
✎
17:27
|
Даже если так делать, перед записью, такая же фигня происходит
Источник.УстановитьСсылкуНового(Справочники[ИмяСправочника].ПолучитьСсылку(Новый УникальныйИдентификатор)); СсылкаНаОбъект = Источник.ПолучитьСсылкуНового(); МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Значение = КодДля1С77; МенеджерЗаписи.Объект = СсылкаНаОбъект; МенеджерЗаписи.Свойство = Свойство; МенеджерЗаписи.Записать(ИСТИНА); |
|||
36
Ayvengo
05.07.11
✎
17:28
|
(35) фигня такого рода: у справочника контрагенты свойство не задается, а у справочника договор задается...
|
|||
37
Ayvengo
05.07.11
✎
17:29
|
Куда бы капнуть то =\
|
|||
38
Ayvengo
05.07.11
✎
17:29
|
в рюмку 100г и домой :D
|
|||
39
Ayvengo
05.07.11
✎
17:36
|
(34) Новый - это значит, что перед записью ЭтоНовый() = Истина.
|
|||
40
Ayvengo
05.07.11
✎
17:41
|
А самое плачевное, что даже если объект не новый, просто перезаписываю.. все-равно свойство не добавляется =\
|
|||
41
Ayvengo
05.07.11
✎
17:49
|
Это ппц... попробовал следующее:
В обработчике при записи (с номенклатурой уже) такой код: Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00000000004"); МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Значение = "=" + Прав(Источник.Код,7); МенеджерЗаписи.Объект = Источник.Ссылка; МенеджерЗаписи.Свойство = Свойство; МенеджерЗаписи.Период = ТекущаяДата(); МенеджерЗаписи.Активность = Истина; МенеджерЗаписи.Записать(); В обработке, где я выбираю нужный мне элемент справочника: СсылкаНаОбъект - выбранный элемент справочника. Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00000000004"); МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Значение = "=" + Прав(СсылкаНаОбъект.Код,7); МенеджерЗаписи.Объект = СсылкаНаОбъект; МенеджерЗаписи.Свойство = Свойство; МенеджерЗаписи.Период = ТекущаяДата(); МенеджерЗаписи.Активность = Истина; МенеджерЗаписи.Записать(); |
|||
42
Ayvengo
05.07.11
✎
17:50
|
И что вы думаете? При срабатывании при записи ничего не добавляется в регистр, а обработкой все отлично добавляется... может где-то что-то с сервером связано? может что-то на сервере не выполняется =\
|
|||
43
Bober
05.07.11
✎
17:51
|
(41) (42) пошел в разнос
|
|||
44
Ayvengo
05.07.11
✎
17:51
|
Кудаж копать то :\
|
|||
45
Bober
05.07.11
✎
17:52
|
код написанный в (0) -рабочий
|
|||
46
Ayvengo
05.07.11
✎
17:53
|
(45) вот и я там ошибок не вижу ... но у меня работает как-то не понятно :(
|
|||
47
Bober
05.07.11
✎
17:54
|
(44) нужно поставить точку остановки в отладчике в модуле набора записей и посмотреть, что перед записью. поставить точку остановки при записи и посмотреть, что в наборе после записи
|
|||
48
Bober
05.07.11
✎
17:54
|
посмотреть, появляется-ли запись в журнале регистрации
|
|||
49
Ayvengo
05.07.11
✎
17:57
|
(48) появляется запись в журнале регистраций, но данные пустые :(
|
|||
50
Ayvengo
05.07.11
✎
18:02
|
(47) жесть какая-то .. 3 раза объект записывается о_О на втором записи пустые уже по этому регистру сведений... мдааааа....
|
|||
51
Ayvengo
05.07.11
✎
18:06
|
Почему пустые .. нипанятна...
|
|||
52
Bober
05.07.11
✎
18:23
|
(51) посмотри в стек вызывов
|
|||
53
Шапокляк
05.07.11
✎
18:35
|
(50) Значит в какой-то момент подписка отработала на новом, не имеющем ссылки объекте. В регистре сведений установился отбор по пустому объекту и в результате все записи регистра сведений потерлись.
|
|||
54
Bww_
05.07.11
✎
18:45
|
Проблема в том, что запись в подписке не попадает в транзакцию записи контрагента и как следствие - у тебя все правильно - и все записывается, но идет откат.
Умные товарищи, здесь на сайте, наверное знают решение. Я пока плюнул, хотя в ближайшее время аналогичные очень нужны... |
|||
55
Ayvengo
06.07.11
✎
10:53
|
(54) Но это странно, т.к. транзакция одна, по крайней мере так пишет журнал =\
Эх ... буду продолжать поиски решения проблемы ... =/ |
|||
56
Ayvengo
06.07.11
✎
12:03
|
Отрыл я эту злосчастную процедуру... ох ... какие же 1С молодцы ....
// Функция записывает значения свойств в информационную базу. // // Параметры: // Нет. // // Возвращаемое значение: // Истина - если значения свойств были записаны, или их не требуется записывать // Ложь - если значения свойств не удалось записать. // Функция ЗаписатьЗначенияСвойств() Экспорт НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей(); Для каждого Строка Из СвойстваИЗначения Цикл Если ЗначениеЗаполнено(Строка.Значение) Тогда Запись = НаборЗаписейЗначенияСвойств.Добавить(); Запись.Объект = ОбъектОтбораЗначений; Запись.Свойство = Строка.Свойство; Запись.Значение = Строка.Значение; КонецЕсли; КонецЦикла; НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(ОбъектОтбораЗначений); Попытка НаборЗаписейЗначенияСвойств.Записать(); Исключение #Если Клиент Тогда Предупреждение("Не удалось записать значения свойств:" + Символы.ПС + ОписаниеОшибки()); #КонецЕсли Возврат Ложь; КонецПопытки; Возврат Истина; КонецФункции Эта процедура в договоре используется так: Свойства - это обработка записи значений свойств Свойства.ЗаписатьЗначенияСвойств(); а в контрагенте Если Свойства.ЗначенияСвойствМодифицированы() Тогда Свойства.ЗаписатьЗначенияСвойств(); ОбновитьСвойства(); КонецЕсли; я плакал ... |
|||
57
Ayvengo
06.07.11
✎
12:07
|
В номенклатуре, кстати, по другому условия стоят .. везде по своему в общем ...
|
|||
58
Ayvengo
06.07.11
✎
12:22
|
А самая няшка кроется в процедуре ПрочитатьТаблицуСвойствИЗначений() этой обработке "ЗначенияСвойствОбъекта" ...
|
|||
59
Ayvengo
06.07.11
✎
12:33
|
Даа! И еще очень нравится однообразные названия этой обработки в формах ... в номенклатуре одно, в контрагентах другое ... ааа.. нелюбофь к 1совцам.. точно..
|
|||
60
Ayvengo
06.07.11
✎
13:03
|
С такой подпиской все работает замечательно :) Может кому пригодится
#Если Клиент Тогда Форма = Источник.ПолучитьФорму(); Обработка = Неопределено; ИмяОбработкиСвойств = ""; Если ИмяСправочника = "Номенклатура" и Не Источник.ЭтоГруппа Тогда ИмяОбработкиСвойств = "ОбработкаОбъектЗначенияСвойств"; ИначеЕсли ИмяСправочника = "Контрагенты" и Не Источник.ЭтоГруппа Тогда ИмяОбработкиСвойств = "Свойства"; ИначеЕсли ИмяСправочника = "ДоговорыКонтрагентов" и Не Источник.ЭтоГруппа Тогда ИмяОбработкиСвойств = "Свойства"; ИначеЕсли ИмяСправочника = "Склады" и Не Источник.ЭтоГруппа Тогда ИмяОбработкиСвойств = "Свойства"; КонецЕсли; Если Не ПустаяСтрока(ИмяОбработкиСвойств) Тогда Выполнить("Обработка = Форма."+ИмяОбработкиСвойств); Обработка.НазначениеСвойств = Свойство.НазначениеСвойства; Обработка.ОбъектОтбораНазначений = Свойство.НазначениеСвойства; Обработка.ОбъектОтбораЗначений = Источник.Ссылка; СтрСвойств = Обработка.СвойстваИЗначения.Добавить(); СтрСвойств.Значение = КодДля1С77; СтрСвойств.Свойство = Свойство; СтрСвойств.ПометкаУдаления = Ложь; Обработка.ЗаписатьЗначенияСвойств(); Иначе МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Значение = КодДля1С77; МенеджерЗаписи.Объект = Источник.Ссылка; МенеджерЗаписи.Свойство = Свойство; МенеджерЗаписи.Период = ТекущаяДата(); МенеджерЗаписи.Активность = Истина; МенеджерЗаписи.Записать(); КонецЕсли; #КонецЕсли #Если Сервер Тогда МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Значение = КодДля1С77; МенеджерЗаписи.Объект = Источник.Ссылка; МенеджерЗаписи.Свойство = Свойство; МенеджерЗаписи.Период = ТекущаяДата(); МенеджерЗаписи.Активность = Истина; МенеджерЗаписи.Записать(); #КонецЕсли КонецЕсли; |
|||
61
Amiralnar
06.07.11
✎
13:35
|
Стало быть отладку наконец запустили?
|
|||
62
Ayvengo
06.07.11
✎
14:36
|
(61) вчера в эту процедуру не попадал, сегодня в другом месте решил точки останова поставить, и мифическим образом чудо свершилось ;) Все-таки на свежую голову лучше работается :D
|
|||
63
Amiralnar
06.07.11
✎
16:06
|
Тогда вам будет интересно:
У модуля регистра есть процедура ПриЗаписи. В этой процедуре можно поставить точку останова. При срабатывает точки можно увидеть: Отбор, и содержимое набора записей; Стек вызовов. Эти данные позволяют очень быстро ответить на вопросы: Что, откуда и куда. Кто, зачем почему. |
|||
64
Ayvengo
07.07.11
✎
16:33
|
(63) спасибо, я как раз и создал такую процедуру и уже от туда проследил что да как происходит ;)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |