<?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='\
Прошло чуть более года, как я выложил исправленный вариант по сравнению с авторским, исходным вариантом.
Работа обработки проверена в течение года на различных конфигурациях типа УПП.
Как раз сегодня возникла необходимость сравнить пару регистров. Спасибо.
+ и см.http://infostart.ru/projects/1386/?p=1#comm13 (мой 13 на твой 12)
Спасибо!
…картинка где?
(5) Забыл, будет.
Укажите область применения — внутри одной базы. Или я чего не понял?
(7) Я надеялся, что если в описании не написано про разные базы, то подразумевается одна 🙂
Используется система регистрации ошибокhttp://www.1cpp.ru/bugs/
Желательно ошибки продукта регистрировать именно в этой системе (Багзилла)
Используется система регистрации ошибокhttp://www.1cpp.ru/bugs/
Желательно ошибки продукта регистрировать именно в этой системе (Багзилла)
Обратите внимание, что «регистрация/авторизация идет только по e-mail, а не нику»
(7) Был не прав, возможность работы с другой базой есть через COM-подключение.
http://www.1cpp.ru/bugs/show_bug.cgi?id=4297
Честно говоря, лично пока не пользовался 🙂
Зарегил ошибку
чтобы не забыть доработать описание на сайте + доку
млин… после кнопки «Анализ» можно откатит изменения?
может кнопку переименовать — «выполнить»?
(12) Хочется одной большой кнопки 🙂 ?
Обработка только показывает различия, сама она не выполняет и не может выполнять каких-либо изменений.
Подумай сам, каким-образом можно сделать универсальный откат?
ЗЫ или я тебя не понял 🙁
(13)… точно, ложная тревога 🙂 смутила таблица с полем «статус» — «строка удалена» :-))
может тогда добавить создание док-та «корректировка записей регистров» с заполнением данных анализа ?
(14) Ага, в новой версии есть спец.строка расшифровки статуса, а то иногда сам путаюсь.
http://www.1cpp.ru/bugs/enter_bug.cgi?product=%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0% B5%20%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%BE%D0%B2% 20%D0%BD%D0%B0%D0%BA%D0%BE%D0%BF%D0%BB%D0%B5%D0%BD%D0%B8%D1% 8F%20%D0%B8%2F%D0%B8%D0%BB%D0%B8%20%D0%B1%D1%83%D1%85%D0%B3% D0%B0%D0%BB%D1%82%D0%B5%D1%80%D0%B8%D0%B8%20%D0%B4%D0%BB%D1% 8F%201%D0%A1%208.1
(15) Боюсь, что этот вариант уже будет не очень универсальным!
Все-таки не везде есть подобный док 🙁
Но можешь оформить заявку/пожелание 🙂
Вот прямой линк на оформление
(16+) Желательно ошибки продукта регистрировать именно в этой системе (Багзилла) — регистрация/авторизация только по e-mail
мне нужно было сравнить данные регистра накопления «НДС начисленный» с регистром бухгалтерии (в поле Регистр 2 подставил»Журнал проводок (бухгалтерский учет)» ) со счетом 90.3 Налог на добавленную стоимость. Оказалось — чтобы установить галочку на нужном счете пришлось переключиься в режим «Регистр накопления << — >> регистр накопления» , установить галку , в потом снова в положение «Регистр накопления << — >> регистр бухгалтерии» без этого нет доступа к пометкам в плане счетов. В «измерения сравнения» оказалось что можно выбрать только организацию. Но при таком раскладе анализ вообще не запустился , выдав сообщение «»При сравнении с регистром бухгалтерии д.б. выбран только один показатель (ресурс)!»»
1. В измерениях сравнения можно выбрать только ресурсы, совпадающие по имени. В твоем случае это только Организация.
2. Для сравнения ресурсов регистра накопления и бухгалтерии можно выбрать только один ресурс регистра накопления, а у тебя наверняка галка выбора стоит на всех ресурсах этого регистра.
3. «Чтобы установить галку на нужном счете» — у меня вроде все верно 🙁
Идея хороша…только вот реализация незавершена. Отчет глючный интерфейс кривой.
(20) Ругать легко, предложения по исправлению или недоработкам есть?
(21) да. есть. Отладить нормально работу через COM. Размещение элементов сделать более аккуратным. Разрешить сравнивать регистры бухгалтерии между собой.
(22) 1. «Более аккуратным» — это как?
Если есть варианты, плиз, выложи форму со своими исправлениями.
2. Пока нет планов доработка обработки для сравнения регистров бухгалтерии.
3. Что в работе через КОМ не нравится?
(22) 3. Как минимум не работает. При попытке поставить галочку выдает Invalid class string
2. Форма подключения к COM ужасная. Сама форма (основная) не масштабируется, все элементы вроде как бы выровнены, но разбросаны хаотично. Что к чему и в какой последовательности — непонятно.
читай 2. как 1.
(25) Работу через КОМ, честно говоря, я лично ни разу не тестировал и не занимался правками 🙁 — это осталось наследие от первого автора.
(24) по оформлению — можно стрелочками указать последовательность заполнения полей и таблиц.
(24) Какими стрелочками? и какую последовательность заполнения?
не понял, поясни
(28) Чтобы всё взлетело нужно заполнить необходимые поля и таблицы. Можно указать в какой последовательности это нужно делать. Сделать это или рисунками стрелочками или через порядок следования (но тогда ветвей не будет). Блок-схемы и бизнес-процессы видел?
(30) значит я чайник… Потому как было легче написать своё, чем разобраться в этом…
Видел моё сравнение через COM? — минимализм + help.
(0) Я смотрю вы у нас тоже не блещете уникумом, качать вломы, но по постам понятно что много очень притензий, минус не ставлю, я не злой 😉
(32) Ответил в исходной ветке
http://infostart.ru/ajax/show_comment.php?t=29431&c=8
«Очень много претензий» — ты бы их суть прочитал сначала.
hame1e00n — свинтус 🙁 или девочка — минусует только на базе эмоций 🙁
http://infostart.ru/public/63018 начиная с 5 поста.
Обоснование в обсуждении его разработки
у меня вот такие данные, что это значит, и как это можно исправить??? заранее большое спасибо 🙂
23 Изменена Регистр1:Количество=22.
8 Изменена Регистр1:Количество=7.
2 Изменена Регистр1:Количество=1.
(38) Еще один мститель 🙂 — не нравится ему мой минус за его платную разработкуhttp://infostart.ru/public/74330/#comm — смотрим комменты (43),(44) и далее
ЗЫ а вот предыдущие мстители — смотрим аналоги (33)-(36)
не функционирует на УПП 1.3 (8.2)…..Можно ли доработать?
(40) попробуй в коде поменять V81.COMConnector на V82.COMConnector
когда выбираешь регистр накопления и бухгалтерии материться
{Форма.Форма.Форма(412)}: Ошибка при вызове метода контекста (Выполнить)
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
по причине:
по причине:
{(1, 1)}: Ожидается выражение «ВЫБРАТЬ»
Счет нужно выбрать.пощелкай по регистрам и появится выбор
спасибо))полезно!!
спасибо за обработку
Скринов обработки так и не появилось =(
спасибо за обработку. очень кстати)
А подскажите мне пожалуйста. Если мне нужно сравнить остатки товаров в двух базах УТ 8.2, мне подойдет эта обработка или нет?)
Попробую ее в клиент-серверной под 8.2
Потом выложу вместе со своей если автор не против?
подключилась, но выдала ошибку при сравнении…
Я у себя хотя пока точечно, но реализовал построковое сравнение регистра.
Буквально перед закрытием месяца база перестала бэкапироваться и подавала опасные знаки. Поэтому пришлось ее пару раз ТИИ прогнать с удалением и очищением. Это конечно не прошло бесследно и пришлось пару сот записей регистра найти в базе до ТИИ. И создать с теми же реквизитами движения.
когда выбираешь регистр накопления и бухгалтерии материться
{Форма.Форма.Форма(412)}: Ошибка при вызове метода контекста (Выполнить)
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
по причине:
по причине:
{(1, 1)}: Ожидается выражение «ВЫБРАТЬ» — напишите как исправить или верните деньги