Имя: Пароль:
1C
1С v8
Проблеммы с GUID
,
0 Vadimok
 
27.06.12
09:43
Переношу справочники с 1С 7 в 1С 8. Для этого в справочиках в бухгалтерии 1С7 добавил роле GUID в нем програмно с помощью функции

Функция GUID_v7plus() Экспорт
   
   Инфо = СоздатьОбъект("AddIn.V7SysInfo");
   ГлобальноУникальныйИдентификатор = Инфо.СоздатьGUID();    

   Возврат ГлобальноУникальныйИдентификатор;
   
КонецФункции

создаю Уникальный идентификатор.


И через XML загружаю в 1С8.

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

КонецЕсли;
1 Vadimok
 
27.06.12
09:45
Элементы создавались нормально, но некоторое время назад все перестало работать. GUID что создаются в 1С7 не присваиваются новым элементам в 1С8.
2 Vadimok
 
27.06.12
09:49
Новый УникальныйИдентификатор(ТекСтроки.GUID)    098599fc-1e66-4bb6-92a9-c2670982a46d    УникальныйИдентификатор (уникальный идентификатор из 1С7)

Спр    <Объект не найден> (83:92a9c2670982a46d4bb61e66098599fc)    СправочникСсылка.Склады

Элемент.Ссылка.УникальныйИдентификатор()    b95c1ec3-c01b-11e1-a113-001e0b65f784    УникальныйИдентификатор (Уникальный идентификатор после записи)
3 Vadimok
 
27.06.12
09:50
Что может быть не так? Где ошибка?
4 Maxus43
 
27.06.12
09:54
Элемент = Справочники.Склады.СоздатьЭлемент();
           Элемент.УстановитьСсылкуНового(Спр);
это отрабатывает нормально? в отладчике там норм?
5 Широкий
 
27.06.12
09:55
Спр = Справочники.Склады.ПолучитьСсылку( Новый УникальныйИдентификатор(ТекСтроки.GUID));    
   Элемент = Спр.ПолучитьОбъект();
       
       Если Элемент = Неопределено Тогда  ???????
6 Vadimok
 
27.06.12
10:00
Элемент.УстановитьСсылкуНового(Спр)    {(1)}: Обращение к процедуре объекта как к функции (УстановитьСсылкуНового)
7 Vadimok
 
27.06.12
10:09
Что не так с этим кодом. Почему такая ошибка?
8 Maxus43
 
27.06.12
10:10
что есть Элемент?
9 Vadimok
 
27.06.12
10:11
Элемент = Справочники.Склады.СоздатьЭлемент();
10 Maxus43
 
27.06.12
10:13
чот не вижу ошибки, но в (5) ткнули правильно, хоть и отношения не имеет к ошибке
11 Vadimok
 
27.06.12
10:13
Новый элемент справочника тип СправочникОбъект.Склады
12 Vadimok
 
27.06.12
10:17
а что (5) не понятно?
13 Maxus43
 
27.06.12
10:20
Если Элемент = Неопределено Тогда  - Никогда не выполнится условие
14 Vadimok
 
27.06.12
10:24
Почему? Все выполняется. Я же что делаю создаю новый идентификатор и получаю ссылку через него на элемент справочник. Потом если он есть в базе получаю Спр.ПолучитьОбъект(); и элементу присваивается объект. А если такого элемента нет в справчнике то при получении Объекта выходит Неопределенно и значит нужно создать новый элемент справочника.
15 Maxus43
 
27.06.12
10:26
(14) при получении объекта выходит "<Объект не найден> (83:92a9c2670982a46d4bb61e66098599fc)" - и это никак не Неопределено
16 Vadimok
 
27.06.12
10:34
В этом куске кода Спр = Справочники.Склады.ПолучитьСсылку( Новый УникальныйИдентификатор(ТекСтроки.GUID)); выходит "<Объект не найден> (83:92a9c2670982a46d4bb61e66098599fc)" а тут Элемент = Спр.ПолучитьОбъект(); Неопределенно
17 Serg_1960
 
27.06.12
11:36
(0) Алгоритм, имхо, не содержит грубых ошибок (по крайней мере в той части, что указана).
Я бы дополнил его проверкой входного параметра и дополнительным контролем того, что элемент действительно создан и записан в базу.
Не исключаю вероятность того, что права пользователя не позволяют заносить новые записи в справочник.
И, возможно, ранее в алгоритме есть НачалоТранзакции или НачалоПопытки и далее в алгоритме ОтменитьТранзакцию или Исключение/КонецПопытки.
18 Vadimok
 
27.06.12
11:59
Не подскжите почему в отладчике выходит такое сообщение Элемент.УстановитьСсылкуНового(Спр)    {(1)}: Обращение к процедуре объекта как к функции (УстановитьСсылкуНового)
19 Serg_1960
 
27.06.12
13:42
(18) Возможно, строкой выше по тексту, вы забыли поставить ";"
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший