Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

УстановитьСсылкуНового() не работает

УстановитьСсылкуНового() не работает
Я
   ASimonova
 
26.09.18 - 16:09
ДокументГуид = Новый УникальныйИдентификатор(ДокументГуидСтрока);
ДокументПоГуиду = Документы[Тип].ПолучитьСсылку(ДокументГуид);        
ТекущийДокумент = Документы[Тип].СоздатьДокумент();
ТекущийДокумент.УстановитьСсылкуНового(ДокументПоГуиду);

после чего ТекущийДокумент.Ссылка.УникальныйИдентификатор() остается все таким же нулевым
 
 
   Вафель
 
1 - 26.09.18 - 16:13
ПолучитьСсылкуНового()
   ASimonova
 
2 - 26.09.18 - 16:16
(1) ???
   ASimonova
 
3 - 26.09.18 - 16:17
может быть я непонятно выразилась чего я хочу. я хочу загрузить из одной базы в другую документ. и чтобы этот документ не перезаписывался много раз, я устанавливаю его гуид таким же, как и в исходной базе. и вот, в какой-то момент этот код перестал работать
   Вафель
 
4 - 26.09.18 - 16:18
(2) ну уж прочитай описание в СП
   ASimonova
 
5 - 26.09.18 - 16:18
(4) я почитала, не знаю как мне это может помочь
   Вафель
 
6 - 26.09.18 - 16:18
(3) он не перестал, он никогда не работал
   s03
 
7 - 26.09.18 - 16:18
(2) ПолучитьСсылку() позволяет получить ссылку по GUID для документа в базе, а надо для нового, поэтому (1)
   Вафель
 
8 - 26.09.18 - 16:19
ПолучитьСсылкуНового()
Возвращаемое значение:
Тип: ДокументСсылка.<Имя документа>.
Описание:
Позволяет для нового (созданного и еще не записанного) объекта получить ранее установленное методом
УстановитьСсылкуНового значение ссылки.

Что тут не понятного?
   ASimonova
 
9 - 26.09.18 - 16:20
(8) поняла, я неправильно проверяю. вот так:
ТекущийДокумент.ПолучитьСсылкуНового().УникальныйИдентификатор()
так тоже по нулям
   rozer76
 
10 - 26.09.18 - 16:26
(0)
>>ТекущийДокумент.Ссылка.УникальныйИдентификатор() остается все таким же нулевым

это после записи ТекущийДокумент ?
 
 Рекламное место пустует
   ASimonova
 
11 - 26.09.18 - 16:32
(10) нет, я уже поняла, что неправильно проверяла. до загрузки документа и это и вот это ТекущийДокумент .ПолучитьСсылкуНового(). УникальныйИдентификатор() по нулям. а после записи не, не по нулям, просто создается новый гуид, не имеющий отношения к ДокументГуидСтрока
   Вафель
 
12 - 26.09.18 - 16:34
сделай
ДокументГуид = Новый УникальныйИдентификатор(ДокументГуидСтрока);
Сообщить(ДокументГуид);
ДокументПоГуиду = Документы[Тип].ПолучитьСсылку(ДокументГуид);        
ТекущийДокумент = Документы[Тип].СоздатьДокумент();
ТекущийДокумент.УстановитьСсылкуНового(ДокументПоГуиду);
Сообщить(ТекущийДокумент.ПолучитьСсылкуНового().УникальныйИдентификатор());

   ASimonova
 
13 - 26.09.18 - 16:35
(12) а без сообщить, через отладчик можно?)
1) 023b773e-bd74-11e8-ac15-e839355ac280
2) 00000000-0000-0000-0000-000000000000
   rozer76
 
14 - 26.09.18 - 16:36
ндя
   Вафель
 
15 - 26.09.18 - 16:37
(13) скорее всего ты что-то не  так смотришь в отладчике
   ASimonova
 
16 - 26.09.18 - 16:37
(14) что? какая-то совсем совсем глупая ошибка? не тяните, что там?
   ASimonova
 
17 - 26.09.18 - 16:38
(15) я и ошибку то заметила без отладчика. когда мне база начала выдавать "номер документа неуникален"
   ASimonova
 
18 - 26.09.18 - 16:38
(15) в отладичке только подтвердила. да и сообщить могу сделать, мне не лень, ща
   Вафель
 
19 - 26.09.18 - 16:38
(17) так у тебя изначально другая ошибка была
   rozer76
 
20 - 26.09.18 - 16:40
>>а после записи не, не по нулям, просто создается новый гуид, не имеющий отношения к ДокументГуидСтрока

и что ДокументПоГуиду = Документы[Тип].ПолучитьСсылку(ДокументГуид);   

ДокументПоГуиду - что тут ? Чего на Неопределено не проверяете? а вдруг есть такая ссыль ?
   Вафель
 
21 - 26.09.18 - 16:42
(20) ДокументПоГуиду никогда не будет неопределно
   ASimonova
 
22 - 26.09.18 - 16:44
(20) проверяю, конечно. вот так:
Если Лев(Строка(ДокументПоГуиду),7) = "<Объект" Тогда ...

(18) ну точно, в отладчике чего-то не то смотрю. выходит вот так:
023b773e-bd74-11e8-ac15-e839355ac280
023b773e-bd74-11e8-ac15-e839355ac280

НО!

отдельно проверила:

Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Новый УникальныйИдентификатор("023b773e-bd74-11e8-ac15-e839355ac280"))

выдает объект не найден
   ASimonova
 
23 - 26.09.18 - 16:45
(19) да, изначально была другая ошибка, а когда начала копать, оказалось, что в итоге все сходится к тому, что не устанавливается гуид
   Fram
 
24 - 26.09.18 - 16:45
Мне кажется или автор пытается существующий документ таким образом получить?
   Fram
 
25 - 26.09.18 - 16:46
И вообще велосипед изобретает, по моему
   ASimonova
 
26 - 26.09.18 - 16:46
(24) да, именно так, автор пытается получить существующий, и если база его находит, то просто перезаписывает, а если не находит, то создает новый
   rozer76
 
27 - 26.09.18 - 16:47
(21) сорри ДокументПоГуиду.ПолучитьОбъект() проверять
   ASimonova
 
28 - 26.09.18 - 16:47
(25) а как по-другому сделать загрузку из другой базы так, чтобы документ не создавался новый при каждой перезагрузке?
   ASimonova
 
29 - 26.09.18 - 16:48
(27) а зачем его проверять, когда срабатывает Лев(Строка(ДокументПоГуиду),7) = "<Объект"? там точно ничего нет
   rozer76
 
30 - 26.09.18 - 16:50
(28)

НовыйДок = Ложь;

Ид    = Новый УникальныйИдентификатор(Идентификатор);
    
        ПромДок = Документы.ЗаявкаПокупателя.ПолучитьСсылку(Ид);
        Если ПромДок.ПолучитьОбъект() = Неопределено Тогда
            Ссылка = ПромДок;
            Док = Документы.ЗаявкаПокупателя.СоздатьДокумент();
            Док.УстановитьСсылкуНового(Ссылка);
            НовыйДок = Истина;
        КонецЕсли;
   Fram
 
31 - 26.09.18 - 16:51
(26) по моему декрет не пошел вам на пользу? )
   Fram
 
32 - 26.09.18 - 16:52
(30) ну вот, такую ветку испортил
   Fram
 
33 - 26.09.18 - 16:54
(28) существующие механизмы использовать? КД
 
 
   ASimonova
 
34 - 26.09.18 - 16:56
(30) так вы же то же самое написали?
(32) конечно, приходится чем-то жертвовать ради детей) не, КД у нас было раньше. огромная неповоротливая махина, а у нас изменения в выгрузках по разу в неделю.
   Вафель
 
35 - 26.09.18 - 16:57
Для проверки существующего есть типовой метод
ОбщегоНазначения.СсылкаСуществует(Ссылка)
   Вафель
 
36 - 26.09.18 - 16:58
ПолучитьОбъект() крайне не рекомендуется, ибо ссыла может существовать и там быть тч на тыщу строк
   rozer76
 
37 - 26.09.18 - 17:00
(36) это согласен )
   rozer76
 
38 - 26.09.18 - 17:01
(35) + 1
   ASimonova
 
39 - 26.09.18 - 17:02
(30) блин это кое-что поменяло. я переназвала все переменные и ТекущийДокумент. ПолучитьСсылкуНового(). УникальныйИдентификатор() стало какое нужно. а после записи обратно поменялось на новый гуид вместо нужного мне
(35) ок, спс
   ASimonova
 
40 - 26.09.18 - 17:05
я поняла ошибку. всем спасибо, мой косяк в дальнейшем коде. ну зато про СсылкаСуществует(Ссылка) узнала
   ASimonova
 
41 - 26.09.18 - 17:08
(40) а нет, не то. сохраняется ошибка
   ASimonova
 
42 - 26.09.18 - 17:08
(41) гуид меняется в момент записи
   ASimonova
 
43 - 26.09.18 - 17:10
(42) удалила объект по той ссылке и создала новый, и ошибка пропала. то есть ошибка не решена, но просто пропала
   Aleksey
 
44 - 26.09.18 - 18:33
(42) Это стандартное поведения типовых конфигураций. Они при записи проверяют, если это новый объект, то назначают ему новую ссылку.
Для обхода этого "подарка" от разработчиков используй конструкцию 
ТекущийДокумент.ОбменДанными.Загрузка = истина;

Это типа ссылка прилетела с обменом и поэтому таким ссылкам гуид не меняют
   Cyberhawk
 
45 - 26.09.18 - 18:55
"Если Лев(Строка(ДокументПоГуиду),7) = "<Объект" Тогда" // Садись, два
   Cyberhawk
 
46 - 26.09.18 - 18:58
(44) Назови пож-та конфу и объект МД, при записи которого можно наблюдать описанное поведение (что ссылка нового заменяется принудительно в типовом коде - правильно понял?)
   Aleksey
 
47 - 26.09.18 - 19:39
(46) например БП
   Aleksey
 
48 - 26.09.18 - 20:19
Хотя может погорячился, я обмены через кд делаю и там с этим сталкиваюсь. Буквально в прошлом месяце пришлось попотеть придумывая как из 7-ки загружать в 8-ке и подсунуть ему свой гуид без правки обработки загрузки

Сейчас проверил на типовой бп на документах и справочниках. 1С только на справочнике сотруднике подменил гуид на свой, в остальных случаях гуид не менял
   youalex
 
49 - 26.09.18 - 20:24
(30) >> Если ПромДок.ПолучитьОбъект() = Неопределено

не комильфо, лучше запросом
 
 Рекламное место пустует
   youalex
 
50 - 26.09.18 - 20:29
(46) думаю, речь идет про синхронизацию по ссылке
   Cyberhawk
 
51 - 26.09.18 - 21:28
(48) "1С только на справочнике сотруднике подменил гуид на свой, в остальных случаях гуид не менял" // Я правильно понял, что ты программно создаешь этот справочник-объект, устанавливаешь ему ссылку нового, вызываешь Записать() не в режиме загрузки (ОбменДанными.Загрузка = Ложь) и после этого у созданного объекта УИД не тот, что ты установил?
   Aleksey
 
52 - 26.09.18 - 21:36
(51) угу
    Для Каждого Мен Из Справочники Цикл
           Тип=Мен.Пустаяссылка().Метаданные().Имя;
        ГуидСтрока = "023b773e-bd74-11e8-ac15-e839355ac280";
        Сообщить(ГуидСтрока);
        УИД = Новый УникальныйИдентификатор(ГуидСтрока);
        СсылкаПоУиду = Справочники[Тип].ПолучитьСсылку(УИД);        
        ТекущийОбъект = Справочники[Тип].СоздатьЭлемент();
        ТекущийОбъект.УстановитьСсылкуНового(СсылкаПоУиду);
        Попытка
            ТекущийОбъект.Записать();
        Исключение
            Сообщить(""+тип+" "+ОписаниеОшибки());
            Продолжить;
        КонецПопытки;    
        
    
        Если строка(ТекущийОбъект.Ссылка.УникальныйИдентификатор()) <> ГуидСтрока тогда
            Сообщить(ТекущийОбъект.Ссылка.УникальныйИдентификатор());
            Сообщить(тип);
        КонецЕсли;    
    КонецЦикла;
   Cyberhawk
 
53 - 26.09.18 - 21:40
Релиз бы еще назвал. Мне охота проверить. Если это взаправду так, то это ахтунг какой-то.
   Cyberhawk
 
54 - 26.09.18 - 21:43
Ну а так все просто: пади все сеансы завершаются, а в коде не вызывается метод, создающий менеджер заданий
   Cyberhawk
 
55 - 26.09.18 - 21:43
(не туда)
   Aleksey
 
56 - 26.09.18 - 22:06
(53) тестил на
Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.65.69)
   Aleksey
 
57 - 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. Часть документов и справочников пропущены так как при записи ругались на незаполненые реквизиты
   Cyberhawk
 
58 - 26.09.18 - 22:35
Охереть. Проверил в "Бухгалтерия предприятия, редакция 3.0 (3.0.42.85)".
В ПередЗаписью следующий код:
    Если НЕ ЗначениеЗаполнено(ГоловнойСотрудник) Тогда
        
        СсылкаОбъекта = Неопределено;
        Если ДополнительныеСвойства.Свойство("СсылкаНового") Тогда
            СсылкаОбъекта = ДополнительныеСвойства.СсылкаНового;
            УстановитьСсылкуНового(СсылкаОбъекта);
        ИначеЕсли ЗначениеЗаполнено(Ссылка) Тогда
            СсылкаОбъекта = Ссылка;
        Иначе
            СсылкаОбъекта = Справочники.Сотрудники.ПолучитьСсылку();
            УстановитьСсылкуНового(СсылкаОбъекта);
        КонецЕсли; 
        
        ГоловнойСотрудник = СсылкаОбъекта;
        
    КонецЕсли; 

Т.е. ребяткам просто пох, что ссылка может быть до этого установлена через "УстановитьСсылкуНового" - теперь надо еще и в доп. свойства (свойство "СсылкаНового") ее запихать.
   Fram
 
59 - 27.09.18 - 01:08
(58) видать по другому они могли создать ссылку на самого себя
   Fram
 
61 - 27.09.18 - 01:17
* НЕ могли
   Fram
 
62 - 27.09.18 - 01:22
при этом тебе дали назначить свою ссылку
   Fram
 
63 - 27.09.18 - 01:23
*дали возможность
   Cyberhawk
 
64 - 27.09.18 - 09:08
(62) Возможность назначить свою ссылку мне дает платформенный метод УстановитьСсылкуНового. А ребятки-писатели типовых почему-то забили болт на это, но навесили сверху уже прикладной код.
   TormozIT
 
65 - 29.09.18 - 11:16
Это только в одном справочнике одной конфигурации или еще где то есть?
   RomanYS
 
66 - 29.09.18 - 11:56
(65) Запустил поиск по БП3.0.64 текста ""СсылкаНового"", нашлось 3 строки. 2 связаны с (58). Ещё одна связана с справочником пользователи, как понял пользователь "по умолчанию" создается с фикс. ид:

    Свойства.Вставить("СтандартнаяСсылка", Справочники.Пользователи.ПолучитьСсылку(
        Новый УникальныйИдентификатор("aa00559e-ad84-4494-88fd-f0826edc46f0")));
    
    Свойства.Вставить("ПолноеИмяДляПоиска", НСтр("ru = '<Не указан>'"));
   Cyberhawk
 
67 - 30.09.18 - 09:59
(65) Смотри (48) и (57), например
   TormozIT
 
68 - 01.10.18 - 10:03
(67) Об этом надо сообщать разработчикам типовых решений. Пока  вижу что масштабы проблемы не большие. Поэтому надо писать в 1С багрепорты. Думаю это быстро исправят, исключая места, где логика на это опирается.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует