<?php // Полная загрузка сервисных книжек, создан 2025-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='\
При заполнении по алгоритму при указании имен конкренных колонок(проверка на условие если <>0 эта колонка то тогда заполняем другую) не работает
А какие типы колонок и какой код?
По идее не должно ни от чего зависеть.
Очень удобная обработка, спасибо! Есть пожелание. При действии «Заполнить значением» хорошо было бы, чтобы в поле «Значение» для выбора выдавались только те типы значений, которые присущи заполняемой колонке.
В режиме без подключения к документу обработка заполняет колонки, но документ не перепроводит. Пусть хоть предупреждение выдает что-ли, мол перепровести не забудьте.
Присоединяюсь к (4) и возможно ли запоминание последнего кода и вида документа, пришлось обрабатывать несколько документов и каждый раз выбирать один и тот же вид документа и копировать один и тот же произвольный алгоритм, и подключаю через севис — подключение внешних обработок, никак не появляется, а так +
(3), (4), (5) — вроде все сделал
Попробуемс что за зверь, а пока плюс авансом 😉
Попробовал… При заполнении значением колонки, содержащей тип строка, дает ввести не более 10 символов…. Я так понимаю не совсем корретно определяется тип реквизита
А было бы вообще замечательно, еслиб еще в выборе колонки отображалось бы не имя а например синоним реквизита или колонки табличного поля, или и то и другое
И чтоб можно было выбрать только видимые колонки, для пользователей без полных прав (защита от дурака так называемая). А то ведь можно понаккорректировать….
Спасибо!
полезная штука!
а можно сделать чтоб обрабатывался не один документ а сразу группа?? стандартная обработка не дает таких богатых возможностей по работе с табличными частями как эта
Полезно было бы для простых смертных, чтобы при выборе действий, автоматически появлялся бы текст кода, чтобы его потом можно было бы использовать как некое сохраненное значение произвольного алгоритма в сложных изменениях табличной части
Попробовал… При заполнении значением колонки, содержащей тип строка, дает ввести не более 10 символов…. Я так понимаю не совсем корретно определяется тип реквизита
Верно, тип ошибочно определяется как дата. Попробую подкорректировать…
А, оказывается при составном типа данных неограниченную строку делать низя… но лучше бы сделать длину в 30 символов по умолчанию, я уже поправил.
Хорошая обработка. Очень помогла, но пришлось немного доработать: поставил галочку для автоматического проведения документа.
Очень хорошо!
Помогла нам, при разукомплектовании товаров на составные части. Сколько времени сэкономили 🙂
Обработка помогла, спасибо, все очень хорошо.
Обработку пользую постоянно. Очень полезная весч. Автору отдельный респект.
Интересная задумка, думаю, много где пригодится. Спасибо!
Спасибо, пригодилась!
А есть ли возможность заполнения табличной части, например услуги, копировать из другого документа?
Данная обработка подойдет к 1с 8.2 Бух предп 2.0 при конвертации? Смогу ли я с помощью обработки умножить цену на количесто и получить в 3-ю колонку Сумму?
Смущают слова «при конвертации». Насчет 2.0 точно сказать не могу, не проверял. Но думаю должна также подключаться и работать.
То, что нужно
Спасибо!
Спасибо! Много раз помогала.
Хорошо было, если бы обрабатывался не один документ, а сразу группа. Действительно, стандартная обработка не дает таких богатых возможностей по работе с табличными частями.
Отличная публикация, хочется посмотреть, а баллов не хватает, блин, что же сделать… 🙁
Если бы сам смогу разобраться с:
Для Каждого … Из … Цикл
и т.д. тогда не скачивал бы…
Шикарная вещь….особенно порадовал произвольный алгоритм….
Плюс плюсевич )))
Супер! Очень понравилось! Спасибо 🙂
Очень нужная вещь, тем более с произвольным алгоритмом…
Спасибо !!!
Для УПП не подходит!