|
УстановитьСсылкуНового() не работает | ☑ | ||
---|---|---|---|---|
0
ASimonova
26.09.18
✎
16:09
|
ДокументГуид = Новый УникальныйИдентификатор(ДокументГуидСтрока);
ДокументПоГуиду = Документы[Тип].ПолучитьСсылку(ДокументГуид); ТекущийДокумент = Документы[Тип].СоздатьДокумент(); ТекущийДокумент.УстановитьСсылкуНового(ДокументПоГуиду); после чего ТекущийДокумент.Ссылка.УникальныйИдентификатор() остается все таким же нулевым |
|||
1
Вафель
26.09.18
✎
16:13
|
ПолучитьСсылкуНового()
|
|||
2
ASimonova
26.09.18
✎
16:16
|
(1) ???
|
|||
3
ASimonova
26.09.18
✎
16:17
|
может быть я непонятно выразилась чего я хочу. я хочу загрузить из одной базы в другую документ. и чтобы этот документ не перезаписывался много раз, я устанавливаю его гуид таким же, как и в исходной базе. и вот, в какой-то момент этот код перестал работать
|
|||
4
Вафель
26.09.18
✎
16:18
|
(2) ну уж прочитай описание в СП
|
|||
5
ASimonova
26.09.18
✎
16:18
|
(4) я почитала, не знаю как мне это может помочь
|
|||
6
Вафель
26.09.18
✎
16:18
|
(3) он не перестал, он никогда не работал
|
|||
7
s03
26.09.18
✎
16:18
|
(2) ПолучитьСсылку() позволяет получить ссылку по GUID для документа в базе, а надо для нового, поэтому (1)
|
|||
8
Вафель
26.09.18
✎
16:19
|
ПолучитьСсылкуНового()
Возвращаемое значение: Тип: ДокументСсылка.<Имя документа>. Описание: Позволяет для нового (созданного и еще не записанного) объекта получить ранее установленное методом УстановитьСсылкуНового значение ссылки. Что тут не понятного? |
|||
9
ASimonova
26.09.18
✎
16:20
|
(8) поняла, я неправильно проверяю. вот так:
ТекущийДокумент.ПолучитьСсылкуНового().УникальныйИдентификатор() так тоже по нулям |
|||
10
rozer76
26.09.18
✎
16:26
|
(0)
>>ТекущийДокумент.Ссылка.УникальныйИдентификатор() остается все таким же нулевым это после записи ТекущийДокумент ? |
|||
11
ASimonova
26.09.18
✎
16:32
|
(10) нет, я уже поняла, что неправильно проверяла. до загрузки документа и это и вот это ТекущийДокумент .ПолучитьСсылкуНового(). УникальныйИдентификатор() по нулям. а после записи не, не по нулям, просто создается новый гуид, не имеющий отношения к ДокументГуидСтрока
|
|||
12
Вафель
26.09.18
✎
16:34
|
сделай
|
|||
13
ASimonova
26.09.18
✎
16:35
|
(12) а без сообщить, через отладчик можно?)
1) 023b773e-bd74-11e8-ac15-e839355ac280 2) 00000000-0000-0000-0000-000000000000 |
|||
14
rozer76
26.09.18
✎
16:36
|
ндя
|
|||
15
Вафель
26.09.18
✎
16:37
|
(13) скорее всего ты что-то не так смотришь в отладчике
|
|||
16
ASimonova
26.09.18
✎
16:37
|
(14) что? какая-то совсем совсем глупая ошибка? не тяните, что там?
|
|||
17
ASimonova
26.09.18
✎
16:38
|
(15) я и ошибку то заметила без отладчика. когда мне база начала выдавать "номер документа неуникален"
|
|||
18
ASimonova
26.09.18
✎
16:38
|
(15) в отладичке только подтвердила. да и сообщить могу сделать, мне не лень, ща
|
|||
19
Вафель
26.09.18
✎
16:38
|
(17) так у тебя изначально другая ошибка была
|
|||
20
rozer76
26.09.18
✎
16:40
|
>>а после записи не, не по нулям, просто создается новый гуид, не имеющий отношения к ДокументГуидСтрока
и что ДокументПоГуиду = Документы[Тип].ПолучитьСсылку(ДокументГуид); ДокументПоГуиду - что тут ? Чего на Неопределено не проверяете? а вдруг есть такая ссыль ? |
|||
21
Вафель
26.09.18
✎
16:42
|
(20) ДокументПоГуиду никогда не будет неопределно
|
|||
22
ASimonova
26.09.18
✎
16:44
|
(20) проверяю, конечно. вот так:
Если Лев(Строка(ДокументПоГуиду),7) = "<Объект" Тогда ... (18) ну точно, в отладчике чего-то не то смотрю. выходит вот так: 023b773e-bd74-11e8-ac15-e839355ac280 023b773e-bd74-11e8-ac15-e839355ac280 НО! отдельно проверила: Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Новый УникальныйИдентификатор("023b773e-bd74-11e8-ac15-e839355ac280")) выдает объект не найден |
|||
23
ASimonova
26.09.18
✎
16:45
|
(19) да, изначально была другая ошибка, а когда начала копать, оказалось, что в итоге все сходится к тому, что не устанавливается гуид
|
|||
24
Fram
26.09.18
✎
16:45
|
Мне кажется или автор пытается существующий документ таким образом получить?
|
|||
25
Fram
26.09.18
✎
16:46
|
И вообще велосипед изобретает, по моему
|
|||
26
ASimonova
26.09.18
✎
16:46
|
(24) да, именно так, автор пытается получить существующий, и если база его находит, то просто перезаписывает, а если не находит, то создает новый
|
|||
27
rozer76
26.09.18
✎
16:47
|
(21) сорри ДокументПоГуиду.ПолучитьОбъект() проверять
|
|||
28
ASimonova
26.09.18
✎
16:47
|
(25) а как по-другому сделать загрузку из другой базы так, чтобы документ не создавался новый при каждой перезагрузке?
|
|||
29
ASimonova
26.09.18
✎
16:48
|
(27) а зачем его проверять, когда срабатывает Лев(Строка(ДокументПоГуиду),7) = "<Объект"? там точно ничего нет
|
|||
30
rozer76
26.09.18
✎
16:50
|
(28)
НовыйДок = Ложь; Ид = Новый УникальныйИдентификатор(Идентификатор); ПромДок = Документы.ЗаявкаПокупателя.ПолучитьСсылку(Ид); Если ПромДок.ПолучитьОбъект() = Неопределено Тогда Ссылка = ПромДок; Док = Документы.ЗаявкаПокупателя.СоздатьДокумент(); Док.УстановитьСсылкуНового(Ссылка); НовыйДок = Истина; КонецЕсли; |
|||
31
Fram
26.09.18
✎
16:51
|
(26) по моему декрет не пошел вам на пользу? )
|
|||
32
Fram
26.09.18
✎
16:52
|
(30) ну вот, такую ветку испортил
|
|||
33
Fram
26.09.18
✎
16:54
|
(28) существующие механизмы использовать? КД
|
|||
34
ASimonova
26.09.18
✎
16:56
|
(30) так вы же то же самое написали?
(32) конечно, приходится чем-то жертвовать ради детей) не, КД у нас было раньше. огромная неповоротливая махина, а у нас изменения в выгрузках по разу в неделю. |
|||
35
Вафель
26.09.18
✎
16:57
|
Для проверки существующего есть типовой метод
ОбщегоНазначения.СсылкаСуществует(Ссылка) |
|||
36
Вафель
26.09.18
✎
16:58
|
ПолучитьОбъект() крайне не рекомендуется, ибо ссыла может существовать и там быть тч на тыщу строк
|
|||
37
rozer76
26.09.18
✎
17:00
|
(36) это согласен )
|
|||
38
rozer76
26.09.18
✎
17:01
|
(35) + 1
|
|||
39
ASimonova
26.09.18
✎
17:02
|
(30) блин это кое-что поменяло. я переназвала все переменные и ТекущийДокумент. ПолучитьСсылкуНового(). УникальныйИдентификатор() стало какое нужно. а после записи обратно поменялось на новый гуид вместо нужного мне
(35) ок, спс |
|||
40
ASimonova
26.09.18
✎
17:05
|
я поняла ошибку. всем спасибо, мой косяк в дальнейшем коде. ну зато про СсылкаСуществует(Ссылка) узнала
|
|||
41
ASimonova
26.09.18
✎
17:08
|
(40) а нет, не то. сохраняется ошибка
|
|||
42
ASimonova
26.09.18
✎
17:08
|
(41) гуид меняется в момент записи
|
|||
43
ASimonova
26.09.18
✎
17:10
|
(42) удалила объект по той ссылке и создала новый, и ошибка пропала. то есть ошибка не решена, но просто пропала
|
|||
44
Aleksey
26.09.18
✎
18:33
|
(42) Это стандартное поведения типовых конфигураций. Они при записи проверяют, если это новый объект, то назначают ему новую ссылку.
Для обхода этого "подарка" от разработчиков используй конструкцию ТекущийДокумент.ОбменДанными.Загрузка = истина; Это типа ссылка прилетела с обменом и поэтому таким ссылкам гуид не меняют |
|||
45
Cyberhawk
26.09.18
✎
18:55
|
"Если Лев(Строка(ДокументПоГуиду),7) = "<Объект" Тогда" // Садись, два
|
|||
46
Cyberhawk
26.09.18
✎
18:58
|
(44) Назови пож-та конфу и объект МД, при записи которого можно наблюдать описанное поведение (что ссылка нового заменяется принудительно в типовом коде - правильно понял?)
|
|||
47
Aleksey
26.09.18
✎
19:39
|
(46) например БП
|
|||
48
Aleksey
26.09.18
✎
20:19
|
Хотя может погорячился, я обмены через кд делаю и там с этим сталкиваюсь. Буквально в прошлом месяце пришлось попотеть придумывая как из 7-ки загружать в 8-ке и подсунуть ему свой гуид без правки обработки загрузки
Сейчас проверил на типовой бп на документах и справочниках. 1С только на справочнике сотруднике подменил гуид на свой, в остальных случаях гуид не менял |
|||
49
youalex
26.09.18
✎
20:24
|
(30) >> Если ПромДок.ПолучитьОбъект() = Неопределено
не комильфо, лучше запросом |
|||
50
youalex
26.09.18
✎
20:29
|
(46) думаю, речь идет про синхронизацию по ссылке
|
|||
51
Cyberhawk
26.09.18
✎
21:28
|
(48) "1С только на справочнике сотруднике подменил гуид на свой, в остальных случаях гуид не менял" // Я правильно понял, что ты программно создаешь этот справочник-объект, устанавливаешь ему ссылку нового, вызываешь Записать() не в режиме загрузки (ОбменДанными.Загрузка = Ложь) и после этого у созданного объекта УИД не тот, что ты установил?
|
|||
52
Aleksey
26.09.18
✎
21:36
|
(51) угу
Для Каждого Мен Из Справочники Цикл Тип=Мен.Пустаяссылка().Метаданные().Имя; ГуидСтрока = "023b773e-bd74-11e8-ac15-e839355ac280"; Сообщить(ГуидСтрока); УИД = Новый УникальныйИдентификатор(ГуидСтрока); СсылкаПоУиду = Справочники[Тип].ПолучитьСсылку(УИД); ТекущийОбъект = Справочники[Тип].СоздатьЭлемент(); ТекущийОбъект.УстановитьСсылкуНового(СсылкаПоУиду); Попытка ТекущийОбъект.Записать(); Исключение Сообщить(""+тип+" "+ОписаниеОшибки()); Продолжить; КонецПопытки; Если строка(ТекущийОбъект.Ссылка.УникальныйИдентификатор()) <> ГуидСтрока тогда Сообщить(ТекущийОбъект.Ссылка.УникальныйИдентификатор()); Сообщить(тип); КонецЕсли; КонецЦикла; |
|||
53
Cyberhawk
26.09.18
✎
21:40
|
Релиз бы еще назвал. Мне охота проверить. Если это взаправду так, то это ахтунг какой-то.
|
|||
54
Cyberhawk
26.09.18
✎
21:43
|
Ну а так все просто: пади все сеансы завершаются, а в коде не вызывается метод, создающий менеджер заданий
|
|||
55
Cyberhawk
26.09.18
✎
21:43
|
(не туда)
|
|||
56
Aleksey
26.09.18
✎
22:06
|
(53) тестил на
Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.65.69) |
|||
57
Aleksey
26.09.18
✎
22:25
|
Запустил этот код в УТ 11.4.5.71
Справочники 3a1b8a23-c1c1-11e8-8464-00268332bca9 Контрагенты 3a1b8a27-c1c1-11e8-8464-00268332bca9 СтруктураПредприятия Документы ВводОстатков 3a1b8a30-c1c1-11e8-8464-00268332bca9 ВнутреннееПотреблениеТоваров 3a1b8a31-c1c1-11e8-8464-00268332bca9 p.S. Часть документов и справочников пропущены так как при записи ругались на незаполненые реквизиты |
|||
58
Cyberhawk
26.09.18
✎
22:35
|
Охереть. Проверил в "Бухгалтерия предприятия, редакция 3.0 (3.0.42.85)".
В ПередЗаписью следующий код: Если НЕ ЗначениеЗаполнено(ГоловнойСотрудник) Тогда СсылкаОбъекта = Неопределено; Если ДополнительныеСвойства.Свойство("СсылкаНового") Тогда СсылкаОбъекта = ДополнительныеСвойства.СсылкаНового; УстановитьСсылкуНового(СсылкаОбъекта); ИначеЕсли ЗначениеЗаполнено(Ссылка) Тогда СсылкаОбъекта = Ссылка; Иначе СсылкаОбъекта = Справочники.Сотрудники.ПолучитьСсылку(); УстановитьСсылкуНового(СсылкаОбъекта); КонецЕсли; ГоловнойСотрудник = СсылкаОбъекта; КонецЕсли; Т.е. ребяткам просто пох, что ссылка может быть до этого установлена через "УстановитьСсылкуНового" - теперь надо еще и в доп. свойства (свойство "СсылкаНового") ее запихать. |
|||
59
Fram
27.09.18
✎
01:08
|
(58) видать по другому они могли создать ссылку на самого себя
|
|||
61
Fram
27.09.18
✎
01:17
|
* НЕ могли
|
|||
62
Fram
27.09.18
✎
01:22
|
при этом тебе дали назначить свою ссылку
|
|||
63
Fram
27.09.18
✎
01:23
|
*дали возможность
|
|||
64
Cyberhawk
27.09.18
✎
09:08
|
(62) Возможность назначить свою ссылку мне дает платформенный метод УстановитьСсылкуНового. А ребятки-писатели типовых почему-то забили болт на это, но навесили сверху уже прикладной код.
|
|||
65
TormozIT
гуру
29.09.18
✎
11:16
|
Это только в одном справочнике одной конфигурации или еще где то есть?
|
|||
66
RomanYS
29.09.18
✎
11:56
|
(65) Запустил поиск по БП3.0.64 текста ""СсылкаНового"", нашлось 3 строки. 2 связаны с (58). Ещё одна связана с справочником пользователи, как понял пользователь "по умолчанию" создается с фикс. ид:
Свойства.Вставить("СтандартнаяСсылка", Справочники.Пользователи.ПолучитьСсылку( Новый УникальныйИдентификатор("aa00559e-ad84-4494-88fd-f0826edc46f0"))); Свойства.Вставить("ПолноеИмяДляПоиска", НСтр("ru = '<Не указан>'")); |
|||
67
Cyberhawk
30.09.18
✎
09:59
|
(65) Смотри (48) и (57), например
|
|||
68
TormozIT
гуру
01.10.18
✎
10:03
|
(67) Об этом надо сообщать разработчикам типовых решений. Пока вижу что масштабы проблемы не большие. Поэтому надо писать в 1С багрепорты. Думаю это быстро исправят, исключая места, где логика на это опирается.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |