370
правок
Изменения
м
→Скрипты
_set('searchCoordinate', 'F');
,0)</NOWIKI>
OnSyncInsert - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.
OnSyncUpdate - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.
Если при загрузке нужно поменять любое поле в таблице address, то нужно использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert проапдейтить поле в адресе с вложениями, то данные могут потеряться. Изменения в Базе будут синхронизированы с ЛК, только при расчете станции метро и стоимости доставки.
Если адрес без вложений, то у него сразу будет station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, после синхронизации всех вложений, с ЛК приходит апдейт на 65535. С другими таблицами все проще. Пример кода для апдейта адресов:
<NOWIKI>
<?>
rem(ticket 23584, 23583);
if( ('%tablename%'='address'),
query('UPDATE address a
JOIN trace t ON t.address=a.code AND t.state=1
JOIN zakaz z ON z.code=a.zakaz
SET
a.mode = IF(z.source=646, 3, 2)
WHERE
a.code = %code%
AND a.station=65535
AND (
(z.source=646 AND a.mode<>3) OR
(A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR
(A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)
)')
, '');</NOWIKI>