🔄
МойСклад
Изменение API синхронизации с 1С
1C Хук (1C Hook) - это PHP функция, которая перехватывает на себя выполнение заводских функций PHPShop API 1C синхронизации, дающая возможность "на лету" перехватывать данные и видоизменять их вывод, добавлять новые возможности, управлять настройками API.
Дизайн Хуки применимы только к функции 1С-Синронизации и к папке /1cManager/.

Добавления произвольного поля в 1С-выгрузку

Для выгрузки дополнительной информации в интернет-магазин необходимо в режиме выгрузки товаров в запущенном 1С-обработчике перейти на вкладку "Дополнительные параметры" и добавить в таблицу определение выгружаемого значения, где:
  1. 1.
    Наименование - произвольное представление значения;
  2. 2.
    Выражение - произвольное выражение на языке 1С, по которому может быть вычислено значение.
Например, для заполнения на сайте значения "Старая цена" и при наличии в 1С типа цен "Маркетинговая" достаточно указать выражение как на скриншоте.
1С Хуки доступны только для 1С версий 8.2 и 8.3.

Файл-приемщик 1С хука

На стороне сайта нужно создать файл-приемщик 1С хука, в котором закладывается PHP часть учета нового поля.

Позиционировании активации в функции

Хуки 1С синхронизации располагаются в папке 1cManager/hook/ Для быстрого включения/выключения хука нужно поставить знак решетки # перед в его имени, пример:
  • #hook.php; - выключен
  • hook.php; - включен

Пример файла для выгрузки старой цены

1
<?php
2
3
// Персонализация настроек
4
function mod_option($option) {
5
$GLOBALS['option']['sort'] = 18;
6
}
7
8
9
// Персонализация обновления
10
function mod_update($CsvToArray, $class_name, $func_name) {
11
if (!empty($CsvToArray[17])) {
12
return "price_n='". $CsvToArray[17] . "', ";
13
}
14
}
15
16
// Персонализация вставки
17
function mod_insert($CsvToArray, $class_name, $func_name) {
18
if (!empty($CsvToArray[17])) {
19
return "price_n='". $CsvToArray[17] . "', ";
20
}
21
22
}
23
24
// Персонализация в конце выполнения
25
function mod_end_load($ReadCsv, $class_name, $func_name) {
26
$_SESSION['result'] = true;
27
}
Copied!

Функции хука

Список функций

  1. 1.
    mod_option() - функция, задающая общие параметры файла загрузчика номенклатуры. Строкой $GLOBALS['option']['sort'] = 18; мы переносим идентификатор колонки характеристики на одну вправо, используя 17 колонку под свои нужды. Структура транспортного CSV файла обмена четко упорядоченная и каждому столбцу относится тот или иной параметр в базе 1С (наименование, цена и т.д.). Начиная с 17 столбца идет динамическое указание характеристик без четких границ по длине. Этим и пользуется система 1С-хуков, сдвигая колонки характеристик вправо, освобождая колонки для учета дополнительных колонок в выгрузке.
  2. 2.
    mod_update() - функция, выполняющаяся для каждого товара (строки CSV) при обновлении его данных, это происходит когда товар найдет в БД магазина по артикулу.
  3. 3.
    mod_insert() - функция, выполняющаяся для каждого товара (строки CSV) при создании нового товара.
  4. 4.
    mod_end_load() - функция, выполняющаяся в конце обработки всего файла.

Аргументы функций

  1. 1.
    $CsvToArray - массив данных строки(товара), образованный при разборе строки на составляющие, разделенные ; По ключу массива можно получить доступ к любым данным. В нашем случаи $CsvToArray[17] будет иметь значение новой цены.
  2. 2.
    $class_name - имя перехваченного класса
  3. 3.
    $func_name - имя перехваченного метода

Возврат значений

Функции должны возвращать часть SQL запроса на добавление/редактирование элемента. В нашем случаи, это строка return "price_n='". $CsvToArray[17] . "', ";, добавляющая учет параметра price_n, отвечающего за старую цену товара.

Предустановленные хуки

В папке 1cManager/hook/ содержатся следующие хуки:
  1. 1.
    addfiles.php - выгрузка прикрепленных к товарам файлов
  2. 2.
    addoldprice.php - выгрузка старой цены
  3. 3.
    json.php - выгрузка дополнительных полей товаров в формате JSON
  4. 4.
    option.php - выгрузка дополнительных полей товаров для модуля Product Option

База 1С-хуков

Выгрузка штрихкода из УТ 11

Активируем модуль дополнительных полей товар Product Option и добавляем поле к товару с названием Штрихкод формата text, в него будет записываться данные по штрихкоду из 1С.

Выражение отбора для 1С

В настройках 1С обработчика в дополнительные параметрах добавляем поле с именем Штрихкод и следующем содержанием:
1
НоменклатураИХарактеристики=Новый ТаблицаЗначений;
2
НоменклатураИХарактеристики.Колонки.Добавить("Номенклатура", Метаданные.ОпределяемыеТипы.НоменклатураРаботаСНоменклатурой.Тип);
3
НоменклатураИХарактеристики.Колонки.Добавить("Характеристика", Метаданные.ОпределяемыеТипы.ХарактеристикаРаботаСНоменклатурой.Тип);
4
НоваяСтрока = НоменклатураИХарактеристики.Добавить();
5
НоваяСтрока.Номенклатура = Номенклатура;
6
НоваяСтрока.Характеристика = ХарактеристикаНоменклатуры;
7
ДанныеПоШтрихкодам = Новый ТаблицаЗначений;
8
РаботаСНоменклатуройПереопределяемый.ПолучитьШтрихкоды(НоменклатураИХарактеристики, ДанныеПоШтрихкодам);
9
Если ДанныеПоШтрихкодам.Количество()>0 Тогда
10
РезультатВыражения="";
11
Иначе
12
РезультатВыражения=ДанныеПоШтрихкодам[0].Штрихкод;
13
КонецЕсли;
Copied!

Файл-приемщик на сайте

В папке 1cManager/hook/ создаем файл barcode.php с содержанием:
1
<?php
2
3
// Персонализация настроек
4
function mod_option($option) {
5
$GLOBALS['option']['sort'] = 18;
6
}
7
8
// Персонализация обновления
9
function mod_update(&$CsvToArray, $class_name, $func_name) {
10
return " option1='" . $CsvToArray[17] . "', ";
11
}
12
13
// Персонализация вставки
14
function mod_insert(&$CsvToArray, $class_name, $func_name) {
15
return " option1='" . $CsvToArray[17] . "', ";
16
}
Copied!
В результате выгрузки в карточке редактирования товара на сайте появится закладка Дополнительно с полем Штрихкод. Вывести это поле на сайте можно через переменную @[email protected]

Выгрузка файлов товара

Если в 1С в товаре прикреплены дополнительные файлы (инструкции, сертификаты и т.д.), то можно их выгрузить на сайт и так же прикрепить к товару.

Настройка в 1С

В настройках 1С обработчика в основных настройках выгрузки товара ставим галочку выгружать прочие присоединеннеы файлы.

Файл-приемщик на сайте

В папке 1cManager/hook/ следует перемиеновать файл #addfiles.php в addfiles.php
Last modified 9mo ago