<?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='\
Нужная вещь…
Нужная-то может быть, но не для юзеров. Они же в ступор впадают от таких умных слов: источник, приёмник, соответствие.
(2) Да уж. Проверено на собственном опыте 🙁 Юзеру нужна кнопка типа «ПЫЩЬ!» — тогда он счастлив.
ещё не хватает для полного щасья возможность переносить табличные части из нескольких документов в один… с группировками.
Обработка полезная. Спасибо.
Только вот не пойму почему нельзя выбрать сам документ приемник, а только его тип.
Конечно если нужно исправить документ на основании другого, можно создать новый потом удалить старый и перебить номера.
Только это лишние движения…
Посмотрела, очень нужная вещь. Спасибки. +++++++
Применимо только если нужно перенести достаточно большую табличную часть. А до полного счастья еще очень далеко, не хватает удобства и возможностей:
1. заполнять списки соответствия реквизитов шапки, добавляя их по одному в 2 списка — это издевательство. Нельзя сделать автоматическое заполнение списков совпадающими реквизитами?
2. соответствие табличных частей — то же самое. Зачем их заполнять вручную? пусть заполняются по умолчанию совпадающими табличными частями.
3. как уже писали (5), жалко что нельзя выбрать уже существующий документ (но пусть останется возможность создать новый).
Такая обработка нужна пользователю (а не программисту), и не часто. А значит, она должна быть удобной, понятной и не сложной в применении.
(7) присоеденяюсь.
а идея отл! однозначно+
Класс! Пусть не очень удобно, но хоть что-то, а то вручную формировать передачу материалов в эксплуатацию и требование-накладную из авансового отчета — это ужас! Спасибо.
Плюсанул, а рановато!))) надо было из Поступления перенести данные в Оприходование, данные перенес все, только Сумма (регл.) не заполнилась, соответственно, документ НЕ ПРОВЕСТИ, следовательно, операция бессмысленна… (платформа 8.1 — УТ 10.3)
Не работает при заполнении доверенности на основании реализации
пригодилась
Спасибо. Плюс++. Пригодится.
Спасибо, помогло! Нужно было заполнить документ Поступление из переработки на основании Передачи товаров ++
!!! ))
(11) а названия полей совпадают? ибо по полям идет основная постановка сответствий ))
(10) то же самое — разные названия реквизитов в источнике и приемнике (либо еще могут быть разные типы данных — но это редкость).
Отличная идея. Спасибо и конечно плюсую.
это то, что я ищу! скачаю и опробую, результатом поделюсь
Очень полезная обработка
Планируется обновление обработки и добавление некотрых функций
Наконец-то руки дошли….
Итак какие новшества (18-07-2013):
1) Добавление версии обработки для платформы 1С 8.2
2) Доработка самой обработки: появилась новая функция автоматического соответствия реквизитов и табличных частей при выборе вида документа-приемника
Хорошая идея, но не хватило функционала.Поэтому чуть исправил(прости) и посмотрирезультат .
Вот спасибочки! Спасли израненный мозг 🙂
БП 2.0:
Поле объекта не обнаружено (СсылкаНаОбъект)
Подключил как внеш.печатную форму. По правилам бухи, внешняя печатная форма обязана иметь реквизит СсылкаНаОбъект
Спасибо, пригодилось.
Вопрос: на основе документа «Списание с расчетного счета» можно получить «Поступление товаров и ecku@ с таблицей «Услуги» и/или «Агентские услуги» ?