Имя: Пароль:
1C
1С v8
Уникальный идентификатор
,
0 Азат
 
29.02.12
10:35
Собственно, суть: выгрузка из самописки (ОУ) в бухгалтерию, причем из первой во вторую сразу несколько документов переносятся в документ одного вида ("Операция, введенная вручную"). Бухия ни разу не тронутая, девственная и тп.

Внимание, вопрос: что можно использовать в качестве уникального идентификатора при таком переносе?
1 PVV65
 
29.02.12
10:36
Уникальный идентификатор.
2 mikecool
 
29.02.12
10:36
новый уникальй, сохраненный в документе и присвоенный операции в бухе
3 PVV65
 
29.02.12
10:37
+(1) Который уже существует.
4 Reset
 
29.02.12
10:38
Уникальный идентификатор ссылки. Вероятность совпадения "крайне мала" (с).
5 Азат
 
29.02.12
10:38
(2) а повторения не будет?
6 Азат
 
29.02.12
10:38
(3) херню сказал
7 Азат
 
29.02.12
10:38
(4) см (6) к тебе тоже относится... получил я такую вероятность - когда сливал 2 объекта по 10000 элементов в 1 общий
8 PVV65
 
29.02.12
10:39
(6) Да ты что!!!
9 Reset
 
29.02.12
10:39
(6) Не груби
10 PVV65
 
29.02.12
10:39
(7) Не повезло...
11 mikecool
 
29.02.12
10:40
(7) я еще ни разу не попался на таком
бульбень тогда херь какую нить из вид + номер+ дата + время и все в 36 разрядном виде )
12 Reset
 
29.02.12
10:40
(10) ... с руками
13 Азат
 
29.02.12
10:42
(11) ну это канеш вариант - типа в коммент пихать "ЗначениеВСтрокуВнутр" или что-нить такое

(12) тебе с ДНК не повезло, никто же об этом не кричит на весь форум
14 ЭЦ
 
29.02.12
10:42
Я бы использовал GUID (Глобальный уникальный идентификатор).
И еще потребуется создать регистр в котором отслеживать какие исходные документы соответствуют каким операциям.
15 Азат
 
29.02.12
10:42
(14) в принципе, в ОУ проблем нет, вопрос, насколько это затронет все остальные процессы в конфе
16 ЭЦ
 
29.02.12
10:47
никакие процессы это не затронет и даже обновляться будет нормально.
При этом конечно имеется в виду, что в базе приемнике хранится XML представление GUID
17 Азат
 
29.02.12
10:49
(16) эмм, а что имеется в виду под ГУИД? в смысле, как его получить средствами 1С?
18 PVV65
 
29.02.12
10:50
(17) Не поверишь, так же как УникальныйИдентификатор.
19 ЭЦ
 
29.02.12
10:53
Например вот так :
XML_ПредставлениеGUID = XMLСтрока(СсылкаНаОбъект);
20 Азат
 
29.02.12
10:54
(19) спс, щас попробую
21 Sammo
 
29.02.12
10:57
(20) Секундочку, вроде бы оно у тебя судя по 7 пересеклось.
Кстати, пересечение возможно, когда гуиды ставят шаловливыми ручками...
22 Азат
 
29.02.12
10:59
(21) да, пересеклось, думалось, что будет уникально, но при попытке УстановитьСсылкуНового оч сильно ругалось и материлось...

ЗЫ, ни одного ууида из перечисленных руками не ставилось...
23 Reset
 
29.02.12
11:00
Про (19) сказано еще в (1). Правда, автор сказал, что это херня.
24 Sammo
 
29.02.12
11:04
(22) Что и требовалось доказать. Пересечение возникло при установке ссылки руками...
25 Азат
 
29.02.12
11:11
(24) читай постскриптум в (22) до полного просветления...

в ОУ загрузили 2 справочника по 10000 элементов...

после этого запустили перенос в один справочник в БП

в БП при создании устанавливали ссылку элемента из ОУ...
26 Азат
 
29.02.12
11:12
(23) читай второе предложение в (13) до полного просветления
27 Sammo
 
29.02.12
11:21
(25) У разных элементов метаданных могут быть одинаковые уникальные идентификаторы. Но опять же только в том случае, если их ставили руками
28 Азат
 
29.02.12
11:25
(27) я не собираюсь тебя уговаривать и в чем-то оправдываться...

(19) почему-то XMLСтрока тот же УУИД возвращает...
короче, все извраты нафиг, ЗначениеВСтрокуВнутр рулит...
29 PVV65
 
29.02.12
11:37
(28) Как будто ЗначениеВСтрокуВнутр вернет другое...
30 Азат
 
29.02.12
11:38
(29) ну ты хоть посмотри сначала, советчик ***
31 ЭЦ
 
29.02.12
11:40
(28) Смотри внимательно - часто бывает, что отличается только одна буква
32 Reset
 
29.02.12
11:46
(29) Забей, полудурок он и есть полудурок.
33 Азат
 
29.02.12
11:46
(31) я канеш оч сильно извиняюсь, но: http://s017.radikal.ru/i429/1202/ee/03b38bc8c687.jpg

Код: Стр = СокрЛП(Расход.УникальныйИдентификатор()) + Символы.ПС + СокрЛП(XMLСтрока(Расход.Ссылка)) + Символы.ПС + СокрЛП(ЗначениеВСтрокуВнутр(Расход));
34 Азат
 
29.02.12
11:49
(32) канеш забей, даром, что полудурок на тебя из зеркала смотрит
35 ZUM
 
29.02.12
11:51
Используй один и тот же GUID что в источнике что в приемнике и не будет проблем с синхронизацией УстановитьСсылкуНового() тебе поможет.
36 ЭЦ
 
29.02.12
11:51
а код обработки можно посмотреть
37 Sammo
 
29.02.12
11:52
(29) Емнип, значениевнутр вернет 2 идентификатора.
Второй - гуид в форме хранения скуля.
Первый, емнип, метаданного, но зуб не дам.
38 ZUM
 
29.02.12
11:55
//Определяем есть ли документ в системе
   докСсылка = Документы.ДокуменПриемник.ПолучитьСсылку(Новый УникальныйИдентификатор(ТаблицаДанных.Ид)); //ТаблицаДанных.Ид - текстовое представление GUID источника
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ДокуменПриемник.Ссылка
   |ИЗ
   |    Документ.ДокуменПриемник КАК ДокуменПриемник
   |ГДЕ
   |    ДокуменПриемник.Ссылка = &Ссылка";
   Запрос.УстановитьПараметр("Ссылка",докСсылка);
   Если Запрос.Выполнить().Пустой() Тогда // Нету, создаем новый устанавливаем ссылку
       ДокументОбъект = Документы.ДокуменПриемник.СоздатьДокумент();
       ДокументОбъект.УстановитьСсылкуНового(докСсылка);
   Иначе //Есть будем работать с найденным документом
       ДокументОбъект = докСсылка.ПолучитьОбъект();
   КонецЕсли;
39 ZUM
 
29.02.12
11:57
У меня указанная схема уже пол года молотит нареканий небыло
40 ЭЦ
 
29.02.12
11:59
(33)

СокрЛП(Расход.УникальныйИдентификатор())
СокрЛП(XMLСтрока(Расход.Ссылка))

это одно и тоже только второе набивать быстрее
и лучше просто
XMLСтрока(Расход.Ссылка)
41 ЭЦ
 
29.02.12
12:05
(38) А как быть если база приемник была ранее получена путем копирования базы источника.
и сответственно в ней много повторяющихся GUIDов
42 ZUM
 
29.02.12
12:06
Они не могут совпадать по определению это одни и те же элементы.
43 ZUM
 
29.02.12
12:08
Используйте конвертацию 2.0 быстро и красиво.
И по внутренним идентификаторам умеет синхронизировать.
Указанную обработку на конвертации можно за 1 час с чайком намолотить.
44 ЭЦ
 
29.02.12
12:10
Они не могут НЕ совпадать именно потому, что на момент копирования это были одни и теже объекты.
А затем эти объекты могли быть переименованы - т.е. по смыслу стать другими.
45 Sammo
 
29.02.12
12:11
(41) Тогда это одни и теже данные.
46 Sammo
 
29.02.12
12:11
+ 45 с учетом 44 - тогда ССЗБ
47 ZUM
 
29.02.12
12:23
(44) Регистр соответствия GUID-ов Вам в помощь.
48 ЭЦ
 
29.02.12
12:24
(45) С точки зрения GUID - одни и теже, а по смыслу может быть разные.
например был контрагент Пупкин.
Скопировали базу и мудрая девушка переименовала Пупкина в Газпром.
А в первичной базе Пупкин остался Пупкиным - Вы на него вешаете наладные и оплаты пупкина.
В тоже время в базе копии на него вешаются накладные Газпрома.
Потом Вы делаете обмен по GUID и в лучшем случае у Вас Пупкин пропадает и появляется Газпром, а в худшем на Пупкина вешаются все долги Газпрома.
49 PVV65
 
29.02.12
12:27
(48) И какой вывод?
50 ZUM
 
29.02.12
12:28
(47) :)
51 ЭЦ
 
29.02.12
12:32
(49) Вывод такой.
По GUID синхронизировать очень хорошо, НО
Если синхронизируются не пустые базы, то прежде чем запускать обмен надо проверить, что синхронизируемые по GUID объекты семантически идентичны (т.е. обозначают одно и тоже).
Я напимер, писал обработочку которая, которая находила одинаковые GUID в обеих базах и сравнивала их типы и наименования.
В случае их совпадения вс Зер гуд. Иначе - разбираться.
52 PVV65
 
29.02.12
12:34
(51) А если после (51) пользователь сделал (48)?
53 ZUM
 
29.02.12
12:35
(51) ага и в случае не совпадения создать новый элемент и
(47) :)
54 ЭЦ
 
29.02.12
12:38
(52) В этом случае уже должна работать бизнес логика заложенная в обмене. Какая база является первоисточником данных по контрагентам, кто может их переиминовывать, нужно ли спрашивать разрешение на переименование при загрузке и т.п.
55 PVV65
 
29.02.12
12:40
(54) Тогда к чему пост (48). То, что изложено в (54) должно быть всегда (хотя и не все).
56 PVV65
 
29.02.12
12:41
+(55) А бизнес-логика должна быть при работе с базой (например, нельзя переименовывать контрагента).
57 ЭЦ
 
29.02.12
12:44
(55) К тому что 48 - предполагает ручное разбирательсво которое никак не запрограмировать.
а 54 - это уже после выполнения ручного разбирательства и сопоставления контрагенов
58 ShoGUN
 
29.02.12
12:48
Облин, у кого-то GUID-ы пересеклись, причём он утверждает, что они сами по себе так сделали... Ну-ну. Математику принципиально игнорируем :)
59 ZUM
 
29.02.12
12:49
(57) Зачем эти сложности?
Один раз пишется обработка которая в базе приемнике в случае совпадения GUID  с базой приемника перепривязываются на другие
назначенные им в источнике
Пример:

  Источник:           Приемник
60 ZUM
 
29.02.12
12:50
Петров 1      Иванов 1
   Иванов 2      Петров 2
Обработали
   Пертров 1 Иванов 2
   Иванов  2 Петров 1
Все
61 ЭЦ
 
29.02.12
12:52
(60) В некоторых случаях надо препривязывать, а в некотрых не надо.
Каждый раз (до первичной синхронизации) надо смотреть.
62 Beduin
 
29.02.12
12:55
Смешно. У автора ИЗ в профиле.