=== GerSync Exchange for 1C ===
Requires at least: 6.4
Tested up to: 7.1
Requires PHP: 8.1
WC requires at least: 8.5
WC tested up to: 11.2
Stable tag: 1.4.0
License: GPLv2 or later
Автор: Игорь Герасимчук — https://www.linkedin.com/in/igor-gerasim%C4%8Duk/
Поддержать: https://buymeacoffee.com/ger.igor

Бесплатный обмен 1С ↔ WooCommerce по стандартному протоколу CommerceML 2 (2.05–2.10).
English version — readme.txt.

== Что умеет ==

* Категории (дерево групп), товары, описания, артикулы, вес, картинки.
* Свойства 1С → глобальные атрибуты WooCommerce (работают в фильтрах).
* Характеристики («Ид#Ид») → вариативные товары с вариациями.
* Цены: выбранный тип цены + необязательный тип цены «распродажи» (по названию или Ид типа).
* Остатки: сумма по всем складам, формат 2.05 и 2.08+ (offers / prices / rests).
* Помеченные на удаление в 1С товары и вариации — в черновики/скрытые или в корзину;
  если пометку сняли — товар возвращается с прежним статусом. Удалённое вручную обмен не трогает.
* Защита полей существующих товаров: название, описание, категории, картинки, артикул, вес, цены, остатки —
  каждое можно запретить перезаписывать. Галочка «Не обновлять из 1С» в карточке товара (вкладка «Запасы»)
  защищает отдельный товар; цены и остатки у него обновляются.
* Атрибуты: «синхронизировать с 1С», «только добавлять значения из 1С» или «не трогать».
  Атрибуты, добавленные вручную, не удаляются ни в каком режиме; видимость и порядок сохраняются.
* Полная выгрузка и выгрузка изменений определяются автоматически. При полной выгрузке товары из 1С, которых
  в ней нет, можно оставить, снять с публикации, поставить «Нет в наличии» или отправить в корзину. Работает в фоне
  после окончания обмена; если пропало больше половины товаров — ничего не делается (защита от оборванного обмена).
* Скорость: товары, которые в 1С не менялись, пропускаются; цены и остатки сохраняются, только если изменились.
  Картинки грузятся один раз — в том числе узнаются картинки прежнего плагина (без дублей после перехода).
  Режим «только размеры WooCommerce» ускоряет загрузку картинок в 2–3 раза.
* «Принудительный полный обмен» (вкладка «Обслуживание») — один раз обработать все товары заново.
* «Очистка картинок» — удаляет картинки обмена, которые больше не стоят ни у одного товара.
* Подхватывает GUID прежнего плагина (поле `_id_1c`) — переход без дублей.
* Polylang / WPML: при одинаковом GUID у переводов обновляется товар/категория основного языка;
  адрес обмена работает и с языковым префиксом (/en/wc1c-exchange/).
* Выгрузка заказов в 1С (после создания и при каждой смене статуса) с доставкой и сборами; приём статусов обратно.
* Пошаговый импорт: большие каталоги грузятся порциями, без тайм-аутов.
* Совместим с HPOS (новым хранением заказов).

== Установка ==

1. Плагины → Добавить новый → Загрузить плагин → выбрать zip.
2. WooCommerce → Обмен с 1С: задать логин (латиницей) и пароль, сохранить.
3. В 1С: Администрирование → Обмен данными → Обмен с сайтами (узел обмена).
   Адрес сайта — ссылка со страницы настроек (https://ваш-сайт/wc1c-exchange/), логин и пароль — из настроек плагина.
4. В 1С выгрузка «товары» → каталог, «заказы» → обмен заказами.

Если 1С пишет «Сервер не получил логин/пароль» — см. подсказку внизу страницы настроек (одна строка в .htaccess).

== Безопасность ==

* Пароль обмена хранится только в виде хеша; после входа — случайный токен сессии.
* Блокировка после 10 неверных паролей на 15 минут, необязательный список разрешённых IP.
* Временная папка со случайным именем, закрыта от прямого доступа (.htaccess / web.config).
  На nginx прямой запрет нужно добавить в конфиг сервера (имя папки — wc1c-exchange-… в uploads).
* Строгая проверка имён файлов: только xml/zip/картинки, без «..», без символических ссылок; защита zip-архивов от выхода за пределы папки и от zip-бомб.
* XML разбирается потоково без сетевого доступа и без подстановки внешних сущностей (XXE).
* Описания очищаются через wp_kses_post, картинки проходят штатную проверку WordPress.
* Статусы из 1С применяются только к заказам, которые сайт сам выгружал.
* Внутренние ошибки не показываются наружу — только в журнале WooCommerce (источник «gersync»).

== Связь с 1С ==

GUID из 1С хранится в мета-поле `_gersync_guid` товара, вариации и категории.
В админке он виден на вкладке «Запасы» товара и в каждой вариации; на витрине не выводится.
Для первого обмена с уже заполненным сайтом без GUID включите «Связывать по артикулу».

== Устройство ==

includes/
  Endpoint, Exchange   — приём запросов 1С и протокол
  Auth, Storage        — авторизация, временные файлы, zip
  Import/              — Importer (потоковый проход), Catalog (группы, свойства, типы цен),
                         Session + Missing (полная выгрузка), 
                         Products, Offers, Images, Lifecycle (скрытие/возврат)
  Orders, OrderXml     — выгрузка заказов и приём статусов
  Repo, Lang, Xml      — поиск по GUID, мультиязычность, разбор XML
  Admin, Settings, Log — настройки и журнал

== Это бесплатно? ==

Да, все функции работают без оплаты. Если плагин экономит вам время — поддержать автора можно по ссылке на странице настроек.

== Как обновлять без потери настроек ==

Обычным обновлением WordPress (Плагины → Обновить) — настройки, товары и связи с 1С сохраняются.
Вручную zip-файлом: «Загрузить плагин» → выбрать zip → «Заменить текущую версию загруженной».
Не удаляйте плагин перед установкой новой версии: удаление стирает его настройки (товары и связи с 1С останутся).

== Товарные знаки ==

1С и 1С:Предприятие — товарные знаки фирмы «1С». WooCommerce — товарный знак Automattic Inc.
GerSync — независимый плагин, не связан с фирмой «1С» и Automattic и не одобрен ими.

== Удаление ==

Удаляются настройки и временные файлы. Товары, категории и связи с 1С остаются.

== Изменения ==

1.4.0 — Уникальный префикс gersync (код, настройки, служебные поля) с автоматическим переносом данных 1.0–1.3;
        экранирование при выводе; параметры обмена читаются и очищаются по одному; явная проверка nonce;
        резервная копия настроек.
1.3.0 — Готов к каталогу wordpress.org (название «GerSync Exchange for 1C», slug gersync, проходит Plugin Check); миграции данных при
        обновлении; исправлен вход 1С с паролем, содержащим кавычки или «\»; «кофе автору» и визитка (только в админке);
        пропуск неизменённых товаров; картинки прежнего плагина без дублей; размеры миниатюр;
        принудительный полный обмен; очистка картинок; ответы 1С в Windows-1251; новая страница настроек с вкладками.
1.2.0 — Полная выгрузка / только изменения; защита артикула, веса, цен и остатков; галочка
        «Не обновлять из 1С» в карточке; режимы атрибутов; переводы скрываются и возвращаются вместе с оригиналом.
1.1.0 — Ссылка «Поддержать автора».
        Типы цен из классификатора offers.xml (2.08+); возврат товаров после снятия пометки удаления;
        удаление вариаций; сборы в заказах; статусы только для выгруженных заказов; Polylang/WPML;
        адрес обмена без правил ЧПУ; GUID у вариаций в админке; код импорта разбит на модули.
1.0.0 — Первая версия.
