Обновление товаров выгрузкой через UUID #2321
Чтобы система управления Вашим сайтом и конфигурация 1С, в которой ведется учет, однозначно идентифицировали один и тот же товар, мы вывели в параметрах товаров поля «UUID Товара» и «UUID Основной модификации».
Теперь, зайдя в редактор магазина и кликнув по любому названию товара (или по иконке «Изменить» в строке любого товара) Вы сможете их увидеть:
Шаг 1
Для корректной связи товаров в системе управления и в 1С Вам следует для всех товаров и модификаций заполнить соответствующие поля.
Для наглядности разберем, что именно является «UUID Товара», а что «UUID Основной модификации»:
Если в 1С у Вас ведется учет определенного товара в разрезе характеристик, то в файле offers.xml идентификатор товара выглядит так:
Левая часть идентификатора (до решетки) — 24d57f6a-df6a-11e4-8038-9c8e99f31b78 — это «UUID товара»
Правая часть (после решетки) — da0ad76a-e800-11e4-80ca-000c29bbdb77 — это «UUID Основной модификации» для основного товара и «UUID модификации» для остальных модификаций:
Шаг 2
После установки всех UUID для всех товаров, Вы можете попробовать провести импорт данных из 1С.
Внимание! Непосредственно перед импортом настоятельно рекомендуем обратиться в нашу компанию для создания резервной копии Вашего сайта.
Импорт товаров из 1С Вы можете проводить по инструкции: http://help.megagroup.ru/import-1s
Если Вам требуется обновлять только цену и количество у уже созданных на сайте товаров, не трогая прочих данных, используйте режим импорта «Обновлять только цены и количество».
Если на стороне 1С у Вас появляются новые товары, которые необходимо добавить на сайт, рекомендуем использовать режим импорта «Добавлять новые, не изменять существующие». При выборе такого режима параметры добавленных ранее товаров (такие как иллюстрации, описание и пр.) не затрутся, если в 1С и на сайте они не совпадают (по ключевому полю).
Обращаем Ваше внимание!
Описанный выше алгоритм применим только для товаров с модификациями, когда учет товаров в 1С идет в разрезе характеристик.
Если в 1С характеристик нет, то UUID будет коротким, например: <Ид>24d57f6a-df6a-11e4-8038-9c8e99f31b78</Ид> тогда модификаций у товара не будет и в оба поля «UUID Товара» и «UUID Основной модификации» нужно будет вводить одно и тоже: 24d57f6a-df6a-11e4-8038-9c8e99f31b78.
Если поля «UUID Товара» и «UUID Основной модификации» заполнены не будут, то не получится обновить данные товары с помощью выгрузки из 1С, таким образом, будет создан полный аналог существующего товара. Обновляться через 1С будет тоже именно этот новый товар.
Что такое UUID?
Объясните пожалуйста русским языком, что такое uuid , читал и википедию и другие источники, все равно не особо понимаю.
Например при переходе по url posts/1 мы получим саму статью. А с использованием uuid идентификатор поста будет что-то вроде этого posts/ac5fb2c6-e43a-48e3-a116-47fc719a69c5
Зачем это нужно и почему лучше использовать с uuid , а не без него (по умолчанию posts/1 )?
Зачем это нужно и почему лучше использовать с uuid , а не без него (по умолчанию posts/1 )?
Чтобы нельзя было получать сущности (в данном смысле посты) по их номеру. Т.е. перебором от 1 до n .
Это защита от получения произвольных данных всякими парсерами.
Например, захотел я собрать все посты с другого сайта, пишу:
И через пару секунд получаю содержимое 1000 постов с того сайта.
Если бы там каждый пост имел uuid , то пришлось бы другим способом получать их:
- Через разделы: главное меню, категории, и т.п.
- Через поиск на сайте (можно даже через поисковики)
- <Другие способы>
Основное назначение UUID — это позволить распределённым системам уникально идентифицировать информацию без центра координации. Таким образом, любой может создать UUID и использовать его для идентификации чего-либо с приемлемым уровнем уверенности, что данный идентификатор непреднамеренно никогда не будет использован для чего-то ещё. Поэтому информация, помеченная с помощью UUID, может быть помещена позже в общую базу данных, без необходимости разрешения конфликта имен.
Например у вас работают две копии сайта. В каждом из них идет автоинкрементное добавление id++. И вот вдруг к вам поступила задача слить эти две базы в одну. Вы столкнетесь с тем, что и в одной и в другой базе есть одинаковые id. А вот с uuid таких проблем не возникнет
Или у вас большая высоконагруженная система. Для распределения нагрузки вы создаете кластер из нескольких серверов. На каждом из серверов идет интенсивное добавление информации, а синхронизация между ними идет не сразу, а с опозданием. С uuid не возникнет проблем с дублированием ключей при синхронизации
Как узнать UUID диска в Linux
Для начала разберемся в том, что такое UUID и зачем он вообще может понадобиться. UUID расшифровывается как Universal Unique Identifier. Это идентификатор устройства, который можно использовать для точного определения конкретного аппаратного компонента (жесткого диска) в операционной системе.
Также UUID используют для поиска и идентификации разделов диска в загрузчике операционной системы. Они еще отображаются в файле /etc/fstab/. Идентификаторы помогают находить разделы и отдельные жесткие диски, даже если вы их отсоединили от компьютера, а затем снова подключили, но уже в другой разъем материнской платы (речь о SATA-разъемах). Идентификатор диска фиксирован и меняется только после внесения каких-то серьезных изменений в раздел или диск. Например, после изменения его размера. В этом случае могут возникнуть проблемы на этапе загрузки операционной системы. Тогда UUID обновится, так что придется его снова разыскать и исправить. Собственно, поиску UUID и посвящен этот текст.
Узнаем UUID помощью утилиты blkid
Вообще, утилит для отображения UUID в терминале довольно много. Все они справляются с поставленной задачей примерно одинаково. Разница в визуальном представлении информации и в дополнительных данных, которые показывают разные программы.
Довольно удобно и наглядно показывает нужную информацию утилита blkid. Она работает следующим образом:
- Открываем терминал. Это можно сделать, одновременно нажав клавиши Ctrl + Alt + T.
- Вводим туда команду sudo blkid
blkid надо запускать с правами суперпользователя
- Затем вводим пароль администратора.
Заметьте, что при вводе пароля в Linux набираемые знаки никак не отображаются в интерфейсе. Даже звездочек не будет
— Ищем строчку UUID=. Все, что следует за ней — это и есть код UUID, за которым мы охотимся.
Сколько всего отображает blkid
Помимо идентификатора диска команда blkid выдает еще кучу посторонних данных, которые могут мешать поиску нужной информации. Возможно, придется воспользоваться фильтром. Для этого:
- Вводим в терминал команду sudo blkid | grep UUID=
Это сразу две команды. Запуск blkid и фильтр выдачи через grep
В выдаче окажется только UUID и все. Никакой лишней информации.
Отфильтрованная выдача команды blkid только с нужными данными
Узнаем с помощью утилиты ls
Отыскать UUID раздела можно, используя утилиту list. Обычно ее используют, чтобы найти все файлы, лежащие в папке, в которой находится пользователь. Это наиболее частое применение ls, но у нее есть и другие возможности. Все зависит от места поиска и используемых флажков в соответствующих командах.
Для отображения UUID:
- Открываем терминал.
- И вводим в него команду ls -l /dev/disk/by-uuid
Опция -l в нашем случае заставляет утилиты ls отображать информацию в более развернутом виде. А то обычно она показывает только название директории или файла, но никаких дополнительных данных.
Как видно по скриншоту, ls выполняет свою базовую функцию и ищет файлы, но в этой папке как раз лежат файлы в нужном формате и с необходимой информацией, поэтому она срабатывает как поисковик UUID
- Затем ищем код, который отображается сразу после времени в 24-часовом формате. Это и есть идентификатор диска.
Вот такую выдачу показывает ls
С помощью lsblk
Еще один способ достать UUID с помощью командной строки — программа lsblk.
Чтобы ею воспользоваться:
- Просто открываем терминал.
- И вписываем туда команду sudo lsblk -f
Эту тоже надо запускать на правах суперпользователя
- После этого в терминале отобразится список доступных разделов диска. Каждый диск будет подписан типом файловой системы и кодом UUID.
Как видите, здесь тоже много ненужной информации, но UUID трудно не заметить, поэтому эта команда тоже подходит
Команду можно дополнить фильтром, чтобы убрать все записи loop, и оставить только разделы с UUID-кодом. Для этого введем в терминал sudo lsblk -f | grep -v loop. Теперь выдача будет почище.
Узнаем UUID, используя графическую оболочку
Если боитесь, что с командной строкой не сладите или хотите по-быстрому скопировать UUID из графического интерфейса, то можно воспользоваться программой «Диски». Она по умолчанию встроена в оболочку GNOME. В KDE и других есть схожие альтернативы.
Системный номер раздела диска UUID / GUID / serial number
На чистом диске нет никаких разделов и соответственно нет никаких номеров раздела.
В чем отличие UUID от GUID
UUID (Universally unique identifier «универсальный уникальный идентификатор») — UUID представляет собой 16-байтный (128-битный) номер. В каноническом представлении UUID изображают в виде числа в шестнадцатеричной системе счисления, разделённого дефисами на пять групп в формате 8-4-4-4-12.
GUID (Globally Unique Identifier) — это так называется у Microsoft — фактически это последняя реализация UUID (да, там были свои предыдущие версии и свой зоопарк).
Именно по этому актуальная разметка диска от Microsoft называется GPT (GUID Partition Table), читаем статью
В целом используется как идентификатор (в составе также закодирована дата и время создания):
- раздела на диске
- операционной системы
- загрузчика
- и прочая
Почему такая загадочная запись?
Очень удобно переводить двоичные числа в шестнадцатеричный формат (а в десятичный формат — очень неудобно).
Помним, что для половинки байта (4 бита):
Bin | Hex | Dec |
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
0100 | 4 | 4 |
0101 | 5 | 5 |
0110 | 6 | 6 |
0111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | A | 10 |
1011 | B | 11 |
1100 | C | 12 |
1101 | D | 13 |
1110 | E | 14 |
1111 | F | 15 |
Т.е. один байт (8 бит) вида 11111111 легко представляется в виде FF = т.е. каждая половинка байта — это F (15 в десятичной системе).
Поэтому 128 бит легко превращаются в номер из 32 цифр в шестнадцатеричной системе счисления, 128/4 = 32
В номере UUID <8e44ac32-40e2-11ea-93a4-bff4e4da2abb> каждые два разряда фактически кодируют один байт.
Посмотрим на структуру номера
xxxxxxxx-xxxx-Mxxx—Nxxx-xxxxxxxxxxxx
4 бита M обозначают версию («version») UUID, а 1-3 старших бита N обозначают вариант («variant») UUID.
Первые две цифры кодируют дату и время создания.
Такое разделение на группы основано на структуре UUID:
Название поля | Длина (в байтах) | Длина (число 16-ричных цифр) | Содержимое |
---|---|---|---|
time_low | 4 | 8 | целое число, обозначающее младшие 32 бита времени |
time_mid | 2 | 4 | целое число, обозначающее средние 16 бит времени |
time_hi_and_version | 2 | 4 | 4 старших бита обозначают версию UUID, младшие биты обозначают старшие 12 бит времени |
clock_seq_hi_and_res clock_seq_low | 2 | 4 | 1-3 старших бита обозначают вариант UUID, остальные 13-15 бит обозначают clock sequence |
node | 6 | 12 | 48-битный идентификатор узла |
Как вытащить дату и время из GUID?
bdb62d89-cede-11e4-b12b-d4ae52b5e909
дата содержится в первых символах, bdb62d89-cede-11e4 которые нужно переставить задом наперед: 11e4-cede-bdb62d89
первый символ отбрасываем, убираем «лишние» знаки «-«(тире)
интервал в десятых долях микросекунд (HEX) получается равным: интервал 16= 1E4CEDEBDB62D89
переводим его в десятичный интервал интервал 10 = HexToDec(интервал 16);в результате получаем: интервал 10 = 136 461 344 788 852 105
находим интервал в секундах: интервал Сек = интервал 10 / 10 000 000;
Делаем сдвиг даты от
В Windows свой зоопарк.
Для FAT 32 — серийный номер из 4 байт = 8 символов в шестнадцатеричной системе
Для NTFS — серийный номер из 8 байт = 16 символов в шестнадцатеричной системе
Системный номер раздела записан непосредственно на диске — создается при форматировании диска. В серийном номер также закодирована дата и время создания раздела.
ВАЖНО: каждый диск «помнит» дату и время создания на нем конкретного раздела, это фактически записано в номере созданного раздела (при форматировании). Нужна шапочка из фольги…
Этот номер мы можем увидеть в свойствах раздела, который показывают программы для управления разделами.
Номер 4610e64f 10e64611 — 16 цифр в шестнадцатеричной системе
Правую половинку номера тома мы также можем увидеть через команду DIR в режиме командной строки
10e6-4611
Он используется Windows уже для регистрации (например раздела) — как устройства, подключенного к системе, вот на фото ниже (как это красиво называется — «точка монтирования» — Mount point).
Этот номер уже записан в недрах реестра — в отличии от серийного номера раздела, записанного в заголовке тома на диске.
Этот же номер мы можем увидеть в bcdedit — как номер основного диска С для работы системы
Видно, что номер GUID используется также для идентификации текущей операционной системы (т.е. в загрузчике явно указано, какую операционную систему нужно загружать и на каком диске она находится).