<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
а чем отличается от стандартных обработок с ИТС «Выгрузка и загрузка в XML»
и чем лучше конвертации? при обмене между идентичными конфигурациями КД настраивается за 5 минут
Обработка на ИТС, как я понял, выгружает по внутреннему идентификатору и она не подтягивает объекты, на которые есть ссылки.
КД — на любителя, если обмен простой, не будешь же каждый новый релиз лазить в конвертацию и править изменившиеся реквизиты. А тут обработка сама метаданные перебирает.
(3) Потягивает, если кномпочку там нажать ;). Шерстит все зависимости ;).
А че там править реквизиты, они подтягиваются из самой же КД.
(4) Точно. Подтверждаю. Сам пользовался обработкой с ИТС — все отлично переносит.
Что-то разлюбил я прямые обмены… КД рулит!
из той-же оперы. мое решение. Только не загружаю а выгружаю…http://infostart.ru/public/60617/
Leshka_m молодец. С КД — на любителя — недоработана до сих пор(думаю еще долго…)
Выгрузка и загрузка в XML — рулит, но если добавил реквизит хрен перенесешь без виляния.
Моха,luns,Yashazz я вас люблю, 😀 ваш оптимизм заражает.
Скажите, а из ПРОФ в базовую отбработка перенесет?
Выгрузка и загрузка в XML — рулит, но если добавил реквизит хрен перенесешь без виляния.
(8) vgna06,
Хотел спросить:
«ВНИМАНИЕ!!! Недоработано:
1. Не пробовал переносить справочники с иерархией в пределах подчинения.
2. Отсутствует проверка на уникальность кодов в справочнике, поэтому при переносе полагайтесь на свой страх и риск.»
а что, это так трудно сделать? Или я что то не догоняю ? )))
Спасибо за обработку простой понятный интерфейс, ни чего лишнего. СПАСИБО БОЛЬШОЕ!
(1) slaviksoft, (2) WKBAPKA,
в типовом обмене между идентичными переносится по внутреннему идентификатору — если база «родная», то ничего, а если нет — идут сплошные задвоения всего и вся.
Через КД — полно ошибок при переносе (просто не переносит), а разбираться, что там понаворочено…
Правила — есть, конфы — идентичные, а ошибки — критические при загрузке.
В общем, не все так просто с этими переносами.
(13) AlexO,
если про 8.x то ничего подобного там не происходит… настроить можно не только по внутреннему идентификатору…
http://forum1c.com.ua/index.php?topic=181.0
там есть моменты, просто надо разобраться, что касается обменов по правилам обмена есть один косяк, по крайней мере для украинских конфигураций, описан вот тут
(14) WKBAPKA,
ничего подобного.
Косяков еще масса.
Пытался настроить выгрузку документов между идентичными конфами в КД — постоянно задваивает контрагентов, организации и прочее, невзирая на поиски по ИНН и прочим Наименованиям.
Если переносить в чистую базу — все переносится, и поиск объектов идет тот, который задашь. А если конфы одинаковые, но базы — разные, то все задваивает.
Видимо, из-за тогоо, что сначала поиск идет по идентификатору, а уже потом по полям, а отключить поиск по идентификатору — нельзя, т.к. тогда и по полям отключается.
И не говорите мне ничего про «готовить не умеете» — я этих конвертаций понаписал кучу уже ))
(15) AlexO,
может мы о разных конвертациях говорим?
если бы я не работал с конвертацией, я бы не писал бы тут… мне эта конвертация уже скоро снится будет…
да что за глупости?
оно и видно 😉
(16) WKBAPKA,
мне тоже
хорошо, как настраиваем поиск объектов?
(0) автор, укажите, пожалуйста, в описании, что обработка переносит ИЗ настраиваемого источника В открытую базу, а то ни из описания, ни из вида обработки понять невозможно — что-куда переносит, пришлось в код лезьть…
(17) AlexO,
можно по внутреннему идентификатору, или включить поиск по полям…
ПЫ СЫ: если бы там задваивалось, как пишите, то обмен по правилам обмена можно было бы выкинуть в топку…
кстати, через конвертацию написаны правила для обмена типовых конфигураций между собой, типа УТП и Розницы, перенос остатков из бухии 7.7 в 8.х… ни разу не сталкивался с мифическими задвоениями
(19) WKBAPKA,
вот именно.
Ставишь поиск по полям, галочки поиска ИНН-КПП-Наименование в разных сочетаниях — никакого эффекта.
Задваивает все основные справочники.(19) WKBAPKA,
я вам о том же и пишу — если ОДНА И ТА ЖЕ БАЗА (идентификаторы у объектов те же) — ищет и по реквизитам, если нет (разные идентификаторы объектов, но конфа одна) — то, как у меня, не ищет, а задваивает.
обмен по правилам обменивается с объектами в другой базе, созданными из единой базы-источника с теми же идентификаторами.
Если объекты другие (например, вручную занесете обного и того же контрагента в обеих базах) — то обмен создаст в приемнике еще одного такого же.
Эксперимент я не ставил (обмена нет), но полтора дня ушло на попытки нормально вписать такие объекты.
Так что выкидывать или нет обмен между типовыми — решайте сами 🙁
Доработал у себя версию — ввел настройки поиска объектов по Коду, Наименованию, ИНН (для контриков). Можно искать и/или по кодам, и/или по наименованию, если Контрагенты — то и/или по ИНН.
Поиск работает как при переносе справочников, так и при переносе документов, независимо.
ну что вы за глупости пишите? обмен по правилам это обмен по правилам… это когда я могу настроить обмен между совершенно разными конфигурациями… а синхронизация справочников может быть по УИД или по ключевым полям…
то что вы пишите, пришлите мне плж. правила обмена, я их загружу и посмотрю настройки
(22) WKBAPKA,
все это прекрасно работает, когда чистая база. Или догружается в базу, созданную из этой же.
Перегружал неоднократно, много раз уже. Видно там вам — не видно — значения не имеет ))
Постоянно то одно, то другое задваивалось. А вот эта последняя выгрузка из УПП в УПП (базы физически не родственны) — задваивается очень много всего, контрагенты — в первую очередь.
Загрузил правила… посмотрел настройки по контрагентам
Вопрос первый: зачем в ИНН делать строку неограниченной длинны?
ИНН и КПП разные коды и ИНН я так понимаю, что может повторяться у разных контрагентов или нет?
у нас тут такого понятия как КПП нет
и почему на закладке «Правила выгрузки» пусто?
(24) WKBAPKA,
а разница какая? есть 10, есть — 12. Или правила не могут верно обработать неогр длину? 🙂
У меня поиск стоит по ИНН, по КПП — это если филиалы (с одним ИНН). Но это к делу не относится — у меня по КПП вообще нет поиска.
(25) WKBAPKA,
не знаю, у меня стоит отключенные выгрузки одного справочника и другого документа, и выгрузка Отражения начисления НДС.
у тебя поиск по внутреннему ИД, а если не найден, тогда уже по ИНН
http://infostart.ru/public/56988/ очень активно используется обмен, причем по внутреннему ИД, я не верю, что у тебя просто так задваиваются элементы…
что касается ИНН, я вообще не понимаю смысла, зачем делать его неограниченной длинны если он сам по себе не может быть больше 12-14 символов… теоретически, конвертации должно быть пофиг, но вот при вводе этого самого ИНН пользователями могут быть косяки, типа пробелы слева справа… и это нужно учитывать… если у тебя двояться контрагенты то это одно из двух: либо одинаковые ИД либо ИНН… т.к. у меня вот тут
(27) WKBAPKA,
да, я знаю, о чем неоднократно писал выше :))
И проблема именно в этом — в любом случае идет поиск по ИД (а нужно — только по ИНН). Это и Универсальном обмене данными, и в ВыгрузкаЗагрузкаДанных.
это он только в обмене неогр длины — в справочнике он ограничен.
(27) WKBAPKA,
если ИНН меняется от 10 до 14 — то пробелы могут быть в любом случае, если не написать спецмеханизм для контроля за этим.
как раз задвоение из-за того, что не находит ни по ИД, ни по ИНН.
конечно, не просто так — посик по ИНН (какой только возможен) выставлен, а ИД не найден — все, контрагент (и не только, другие справочники по Наименвоанию ставлю — то же самое) не найден, создаем своего с «правильным» ИД.
У вас первый раз как был обмен? в чистую базу привнеслись объекты другой конфигурации. ПРИВНЕСЛИСЬ.
И потом уже только они же сравнивались при дальнейших обменах с объектами в исходной базе по ИНН, Наименованию и прочая…
(28) AlexO,
1. ну дык просто снимаешь галку «Искать объект приемника по внутреннему идентификатору …» и оно автоматически будет искать по указанным полям 😉
2. а как такое может быть, что различаются типы в описании конфигурации? я утверждать не буду, но есть вероятность, что при обмене конвертация не корректно преобразует типы
3. Если переменной длины, то спец. механизмы писать не надо
4. см. п.1 🙂
5. Не важно,как первый обмен был осуществлен, либо через первичную выгрузку, либо как пустая база… ошибки нужно искать в правилах обмена
(29) WKBAPKA,
… и оно автоматически погасит все остальные галки поиска :))
возможно, я в КД несколько раз уже обновлял конфигурацию…
ну как это — не важно..
вся разница в том — с чего началась база: либо с этой же базы, либо — те же контрагенты (с теми же ИНН, наименованиями), но вносились вручную (или из другой базы).
вот такие пироги с этим КД… это не считая черепашьей скорости 🙁
скачивал как пример подключения по com