v8: возможна ли замена GUID-ов из внутри? #554541


#0 by Mikhail Volkov
Если бы речь шла о малозначимом элементе справочника, не влияющем на проведение документа, то все просто: создаешь новый объект-копию с нужным GUID, старый объект помечаешь на удаление, и во всех ссылках на него заменяешь на новый... Но речь идет о смене GUID-ов организаций, это все документы надо будет пере проводить... Вспомнилось, в былые времена приходилось заниматься ремонтом баз 1Cv77 из внутри, dbf - файлы присоединял Access, sql - средствами SQL делал массовые замены. А вот с 1Cv8 такого делать не приходилось... Кто пробовал?
#1 by H A D G E H O G s
ЗАЧЕМ?
#2 by Reaper_1c
+100
#3 by Lama12
А переименовать старую организацию не то?
#4 by Mikhail Volkov
УТ 10.3 была создана не путем почкования от УПП, а совсем из другой не 1С базы. При обмене возникли проблемы с собственными контрагентами и их договарами, которые привязаны к подразделениям-магазинам.
#5 by H A D G E H O G s
Ты мне чакры этим не открыл. ЗАЧЕМ менять GUID ?
#6 by Mikhail Volkov
Чтобы использовать стандартные (в основном) правила обмена по GUID.
#7 by iamnub
Либо единую таблицу соответствий, либо дополнительный реквизит в объекте 1С. _Менять_ GUID, а тем более что-то там потом перепроводить или заменять - верх дилетантизма.
#8 by Reaper_1c
И чем же стандартному механизму мешают нынешние идентификаторы? Правильно. Ничем не мешают.
#9 by Mikhail Volkov
Проблема обмена баз частная (организации и контрагенты по ИНН нормально синхронизируются). У нас собираются внедрять "Документооборот", франчи требуют, чтобы структура предприятия во всех базах была идентична. Якобы GUID содержит в себе не только время создания объекта, но и какие-то "наследственные признаки", вплоть до мак-адреса компа, где он создан...
#10 by iamnub
У вас какая-то особая реализация генерации GUID-а? Лажа это всё.
#11 by iamnub
Еще - франч требует менять гуид в 1С? Это чья идея-то?
#12 by Reaper_1c
Имя, сестра, имя!© Франча давай сюда. Будем ржать
#13 by H A D G E H O G s
<<вплоть до мак-адреса компа, где он создан...>> городская легенда. Убрано Мелкософтом из соображений безопасности уже давно.
#14 by Reaper_1c
Вообще-то документооборот построен на БСП, технологии КД до борозды УИДЫ - в каждой базе хранится соответствие их друг другу. Сдается мне автора франчи троллят, чтоб делом занять. Пока он будет с идентификаторами сражаться - некогда будет мешать внедрению...
#15 by Immortal
ну как бе не совсем так
#16 by Reaper_1c
Ой. только ты еще не говори, что обмен зависит от сигнатуры идентификатора, а последний символ каждой группе - контрольная сумма, и без этого обмен не заработает...
#17 by Лефмихалыч
даже если бы это было правдой, то что с того? Какое отношение имеет GUID организации к внедрению документооборота?
#18 by Лефмихалыч
+1. в борозду такие обмены, а обменосоздателей - на галеры пирожками торговать и дворничать
#19 by Mikhail Volkov
, Ну требования менять GUID, откровенно говоря, не было, было лишь о идентичности структуры. Я лишь хотел узнать о возможности, хотя бы теоритически...
#20 by Лефмихалыч
есть и теоретически, и технически, если база SQL. Тебе заняться не чем?
#21 by Immortal
не-не=) думаю прост, что при создании нового объекта в приемнике его уид будет равен уиду объекта из источника
#22 by Immortal
изобретатель велосипедов?)
#23 by iamnub
Каким-то образом можно повлиять на 1С-овский GUID?
#24 by Immortal
назначить новому элементу можно произвольный, да
#25 by Mikhail Volkov
Если это не сложно, то лучше это сделать на ранней стадии, чем потом делать что советует
#26 by Reaper_1c
Лучше этого не делать вовсе. Открою тайну, если ты один уникальный идентификатор изменишь на другой - ничего не изменится. Уникальность останется при нем.
#27 by iamnub
Это смотря откуда он его возьмет. Вот те на, а я и не знал.
#28 by Mikhail Volkov
из УПП конечно же, там вся структура предприятия прописана. А база УТ недавно начата, в ней только одна организация и одно подразделение, которое не используется.
#29 by skunk
а какая собственно разница
#30 by Mikhail Volkov
Синхронизировать данные при обмене между базами. Из справки: УникальныйИдентификатор (UUID) - Предназначен для создания и хранения глобального уникального идентификатора GUID. Данный объект может быть сериализован в/из XML. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {. Имя типа XDTO: UUID Строка GUID задается в виде "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где Х - символы обозначающие шестнадцатеричное число. Просматривая SQL-таблицы справочников, что-то не увидел полей такого типа. Ключевые поля _IDRRef имеют вид 0х0123456789ABCDEF0123456789ABCDEF. Либо GUID как-то вычисляются (как?) при выгрузки в xml-файл, либо где-то хранятся в таблицах соответствия ключам. Во-втором случаи вообще нет проблемы по замене GUID... Где можно взять информацию о структуре? Для 1Cv7 это можно посмотреть в файле 1Cv7.DD, а для v8 где?
#31 by Defender aka LINN
Какбе на всех ИТСах лежит обработка, которая позволяет легко и непринужденно заменить ссылки на один элемент ссылками на другой везде, где только возможно.
#32 by Mikhail Volkov
"Если бы речь шла о..." см. я бы так и сделал, хотел найти более простой и быстрый способ. Если GUID-ы хранятся в таблицах соответствия ключам, то почему-бы непосредственно не исправить...
#33 by Immortal
потому что не надо к гландам через попу лазать, особо если не знаешь как-)
#34 by Дикообразко
даже боюсь предположить, как вы детей будите делать
#35 by Reaper_1c
Беременность будет внепапочная
#36 by Defender aka LINN
Чем ссылка на организацию отличается от ссылки на контрагента, например? Нафига что-то там перепроводить, в жизни острых ощущений не хватает?
#37 by sda553
Я этим занимался. Краткие советы: 1. Делаешь обработку замены ссылок, чтобы она вместо замены делала несколько sql скриптов UPDATE на каждую таблицу где надо замену 2. Тестируешь скрипт на копии базы, пересчитываешь итоги, замеряешь время. 3. Выделяешь ночью это время (с запасом) для регламентных работ, о чем согласуешь со всеми отделами. Объявление для всех отделов, что ночью со стольки то до стольки то база недоступна. 4. Бэкапим 5. В час Х вываливаем всех из всех баз и запускаем в sql наш скрипт, потом пересчитываем итоги. 6. Проверяем результат 7. Запускаем всех в базу. Если что то пошло не так, восстанавливаем из бэкапа и изучаем черные ящики о том что там пошло не так
#38 by Dolter
без проблем можно менять гуиды по всей базе... только очень-очень аккуратно ) пересчет итогов не требуется
#39 by sda553
У меня потребовался, т.к. я не выполнял замены в total таблицах
#40 by ptiz
Всё-таки, зачем?
#41 by Вуглускр1991
Советую (ибо страна советов), создать новые элементы с нужными GUIDами, потом заменить во всех ссылках старое на новое. Можно вообще создать почку УТ выгрузить всю базу в xml, в xml-е поменять и загрузить в новую.
#42 by skunk
и что ... какая разница что будет храниться в примари кей ... один фих преобразуется в асии-строку
#43 by butterbean
Сообщение
#44 by H A D G E H O G s
<<Просматривая SQL-таблицы справочников, что-то не увидел полей такого типа. Ключевые поля _IDRRef имеют вид 0х0123456789ABCDEF0123456789ABCDEF. Либо GUID как-то вычисляются (как?) при выгрузки в xml-файл, либо где-то хранятся в таблицах соответствия ключам. Во-втором случаи вообще нет проблемы по замене GUID... Где можно взять информацию о структуре? Для 1Cv7 это можно посмотреть в файле 1Cv7.DD, а для v8 где?>> 1С пошла своим путем. GUID храниться в бинарном типе SQL. WTH? Ну и пох. Используй силу! SELECT     CONVERT(varchar, CONVERT(uniqueIdentifier, _IDRRef)) AS _IDRRef FROM         _Reference7
#45 by H A D G E H O G s
Или так, монопенисуально в отладке SELECT     CONVERT(uniqueIdentifier, _IDRRef) AS _IDRRef FROM         _Reference7
#46 by Immortal
нарушение лиц. соглашения детектед
#48 by mdocs
Просто почему-то нет такой возможности в платформе, а надо бы.
#49 by H A D G E H O G s
Мне нельзя лазить sql enterprise manager в базы 1С?
#50 by Immortal
лазать то можно - работать так с ними нельзя
#51 by Mikhail Volkov
Выходит, что GUID - это другое представление ключа _IDRRef?
#52 by Mikhail Volkov
Другими словами: UUID - бинарное представление GUID, является ключом _IDRRef!? Тогда понятна реакция -... Надеялся, что GUID - отдельное поле для внешней идентификации. Типа как в 1Cv7, когда базу объявляешь публикацией, то SQL прикручивает дополнительные поля (если не находит пригодных для идентификации), а ключи не трогает. С ключами шутки плохи. Как только их удалось менять -?
#53 by Лефмихалыч
да лазий на здоровье, только этим ты нарушишь лицензионное соглашение
#54 by Immortal
т.е. на чтение тоже что ли? на изменение вроде да, на чтение сторонними программами (не субд)-да про запрет на чтение из em не слышал/не читал
#55 by Поручик
Сколько лет шарахаюсь по мисте, только один раз встретил название дятлофранча. Может всё-таки своего огласишь?
#56 by Sammo
Самый простой способ - средствами 1с создаешь ссылку с нужным гуидом и заемна всех ссылок. Можно через sql, но 1. Нарушение лицензионного соглашения 2. требует бОльших познний по внутреннему хранению данных Емнип, там вообще сказано доступ. Именно не изменение данных, а доступ к базе 1с только средствами 1с. Т.е. даже select уже нарушение лицензионного, емнип.
#57 by Mikhail Volkov
Создал новый объект, меняю на старый, а у него еще есть подчиненные объекты... Владельца как менять?
#58 by Defender aka LINN
Объект.Владелец = НовыйВладелец
#59 by Sammo
Вопрос 64 Это ограничение распространяется на любые действия с данными, в том числе на изменение их структуры, а так же на чтение или изменение самих данных информационной базы или служебных данных "1С:Предприятия". Т.е., насколько я понимаю, на _любое_ чтение, даже стандартными скулевскими средствами. Но там в начале ответа есть оговорочка...
#60 by sda553
У меня проблемы познания внутреннего хранения данных не было, т.к. я данным знанием искушен. Проблема была в том что стандартная замена ссылок по предварительной оценке должна была отработать в течение 30-40 часов, в то время как sql ная замена отработала за 6 часов. Не закрывать же работу в базе на 2 суток, вот и пришлось выкручиваться и сшивать sql-ем ночью. Но все получилось успешно. В таблицы итогов изначально не лез, потом просто вызвал полный пересчет
#61 by Широкий
#62 by Jolly Roger
>1. Нарушение лицензионного соглашения а чем грозит нарушение лицензионного соглашения?
#63 by Поручик
Терморектальными карами.
#64 by Jolly Roger
желтокрасным паяльником?
#65 by Mikhail Volkov
А поиск того, что менять по всем таблицам, тоже sql средствами? Код желательно... Назначение таблиц (подобное 1Cv7.DD) есть где?
#66 by sda553
Код длинный и нуждается в моих пояснениях. Суть в том что я переделал стандартную обработку замены ссылок с тем чтобы она не занималась заменой ссылок а создавала код типа такого (замена организации, существенно сократил, просто там больше мест где это заменять надо)    if object_id('tempdb..#zz') is not null drop table #zz    Create Table #zz (ZType varbinary,ZRTRef varbinary, ZRRRef varbinary,Type varbinary,RTRef varbinary, RRRef varbinary) PRINT 'Имя таблицы: Справочник.Автомобили, имя поля: ФирмаВладелец' PRINT 'Имя таблицы: Справочник.ДоговорыВзаиморасчетов, имя поля: Организация' PRINT 'Имя таблицы: Документ.АвансовыйОтчет.Состав, имя поля: СубконтоПоставщика1' PRINT 'Имя таблицы: РегистрНакопления.ПартииМПЗ, имя поля: Организация' UPDATE _AccumRg7355 --------------------------------------------------------------------------------------- PRINT 'Теперь учти, что скорее всего ты сломал базу! Не выкидывай этот скрипт т.к. он поможет в ее починке' ---------------------------------------------------------------------------------------
#67 by sda553
Ну а для определения имен таблиц и полей, используйте стандартную функцию ПолучитьСтруктуруХраненияБазыДанных(<ОбъектыМетаданных>, <ИменаБазыДанных>) вместо 1Cv7.DD
#68 by ptiz
Если их соглашение читать, то даже  DBCC CHECKDB под запретом.
#69 by Mikhail Volkov
Как я понял все эти запреты, касаются СУБД самой 1С, нельзя брать данные внутри себя. А из чужих СУБД можно? В качестве фронт-офиса стоит СуперМАГ СУБД ORACLE, надо оттуда забирать "Отчет о розничных продажах". Через документированный обмен можно получить товары. Не получается забирать "Оплата платежными картами", хотя в Z-отчетах есть такая информация. Хотелось бы пример, как забирать информацию из чужих СУБД?
#70 by MikleV
приматываем оркал к 1с в качестве внешнего источника данных и усе
#71 by MikleV
*базу супермага на оракле
#72 by oleg_km
ГК РФ: Статья 1280. Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ 1. Лицо, правомерно владеющее экземпляром программы для ЭВМ или экземпляром базы данных (пользователь), вправе без разрешения автора или иного правообладателя и без выплаты дополнительного вознаграждения: 1) внести в программу для ЭВМ или базу данных изменения исключительно в целях их функционирования на технических средствах пользователя и осуществлять действия, необходимые для функционирования таких программы или базы данных в соответствии с их назначением, в том числе запись и хранение в памяти ЭВМ (одной ЭВМ или одного пользователя сети), а также осуществить исправление явных ошибок, если иное не предусмотрено договором с правообладателем; 2) изготовить копию программы для ЭВМ или базы данных при условии, что эта копия предназначена только для архивных целей или для замены правомерно приобретенного экземпляра в случаях, когда такой экземпляр утерян, уничтожен или стал непригоден для использования. При этом копия программы для ЭВМ или базы данных не может быть использована в иных целях, чем цели, указанные в подпункте 1 настоящего пункта, и должна быть уничтожена, если владение экземпляром таких программы или базы данных перестало быть правомерным. 2. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения изучать, исследовать или испытывать функционирование такой программы в целях определения идей и принципов, лежащих в основе любого элемента программы для ЭВМ, путем осуществления действий, предусмотренных подпунктом 1 пункта 1 настоящей статьи. 3. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения воспроизвести и преобразовать объектный код в исходный текст (декомпилировать программу для ЭВМ) или поручить иным лицам осуществить эти действия, если они необходимы для достижения способности к взаимодействию независимо разработанной этим лицом программы для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой, при соблюдении следующих условий: 1) информация, необходимая для достижения способности к взаимодействию, ранее не была доступна этому лицу из других источников; 2) указанные действия осуществляются в отношении только тех частей декомпилируемой программы для ЭВМ, которые необходимы для достижения способности к взаимодействию; 3) информация, полученная в результате декомпилирования, может использоваться лишь для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, не может передаваться иным лицам, за исключением случаев, когда это необходимо для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, а также не может использоваться для разработки программы для ЭВМ, по своему виду существенно схожей с декомпилируемой программой для ЭВМ, или для осуществления другого действия, нарушающего исключительное право на программу для ЭВМ. 4. Применение положений, предусмотренных настоящей статьей, не должно наносить неоправданный ущерб нормальному использованию программы для ЭВМ или базы данных и не должно ущемлять необоснованным образом законные интересы автора или иного правообладателя. Норма императивная, т.е. не предполагает " если иное не установлено договором". Так что данную часть лицензионного соглашения 1С может засунуть себе в ухо. Я думаю, что часть лицензионного соглашения о запрете прямого доступа просто снимает ответственность за последствия с 1С
#73 by Mikhail Volkov
Все же пример можно, как из таблицы СУБД прочитать данные в таблицу значений? Не важно чья это таблица 1С или СуперМАГ, SQL или ORACLE... допустим эту 'Имя таблицы: Справочник.Автомобили'
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С