<?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='\
Добрый день. Купили обработку. Для ERP 2.4.5 той же обработкой пользоваться?
Добрый день еще раз. Детали к моему письму выше. Релиз ERP 2.4.5.135.
Создает документ ввод начальных остатков, контрагента ищет — договор НЕ ищет.
Я не понимаю, как правильно в формате excel назвать поля договора. По номеру и дате — как указано у вас в комментариях — не ищет, а создает новый договор.
Типовой ввод остатков даже договора с расчетами «По договору» требует сгенерить сами расчетные документы, а этого ваша обработка не умеет делать.
Или умеет, но не эта?
Смотрите скриншот.
(2)
Если требуется указать договор как расчетный документ , то в файле excel в поле «Объект взаиморасчетов» надо указать слово «Договор», а в номере и дате расчетного документа указать дату и номер договора.
Договор будет искать по номеру и дате (с учетом контрагента и организации) , если он не будет найден, то создаст новый.
Найденный или новый будет выступать расчетным документом.
Если все равно не получается, то я проверю как работает для ERP 2.4.5.135, возможно там какие-то нюансы.
Добрый день. Я так и сделала, в файле указала слово договор, в отдельных полях номер и дату. При загрузке он мне создал новый договор, ранее созданный с теми же номером и датой не нашел. Все равно создает новые договора
Теперь по поводу объекта расчетов., посмотрите скриншот внимательно. на поля документа ввода остатков.
раньше, если в договоре стоял вид расчетов «По договору» — он сам объект расчетов записывал как договор. Сейчас он записывает как объект расчетов сам договор, и дополнительно требует документ расчетов в отдельном поле. Обработки, которая генерит документы расчетов (как в УПП была встроенная в документе ввода остатков) — тут нет. Если допишите, буду благодарна и вам доплачу. Сама не программист.
(4) Ок, я проверю в ближайшее время работу в версии 2.4.5.135
Добрый день. Не получилось проверить?
Добрый день. Уточнения по задаче. До редакции 2.4.2 в документе ввод остатков по взаиморасчетам тоже было поле Расчетный документ, но его можно было оставлять пустым для договора с детализацией расчетов «по договору». При проведении в соответствующие регистры записывался в качестве документа сам документ ввод начальных остатков.
Начиная с редакции 2.4.2 обязательным стало в качестве расчетного документа указание первичного документа, с определенным типом данным.
На ИТС есть статья об этом.
Так что Андрей, чтобы ваша обработка была востребована в новых релизах, ее надо подправить. И продавать дороже-))
я так думаю, что сейчас народ, который готовится к внедрениям с 1 января 19 года, начнет искать подобные обработки.
Нам нужно уже очень быстро, вы сможете поправить?
(7) Проверил, всё работает и для 2.4.5.135
Какой «Тип операции» документа?
Было бы хорошо прикрепить сюда файл , откуда загружаются остатки (Наименование контрагента можно удалить, ОКПО изменить на любое другое, остальное не трогать)
Добрый день.
Для любого типа операции. Например, начнем с ввода остатков задолженности клиента.
1. Открываю обработку.
2. Эксельный файл создаю из шаблона вашей же обработки «Сформировать шаблон для заполнения»
3. Поля заполняю, как написано у вас в примечаниях в шаблоне.
4. Подгружаю заполненный шаблон, нажимаю загрузить файл.
5. Переходим на вторую закладку — из файла не подставляется дата платежа. Для проверки прямо в обработке ставлю ее вручную.
6. Нажимаю создать документ.
Документ создается без установленных галочек ОУ и БУ, ставим вручную — открывается табличная часть, в которой видно что расчетный документ (который должен быть типа Реализация клиенту) — пустой. Без него документ не проводится. В версиях до 2.4.2 с пустым полем проводилось.
Прикрепила файл со скриншотами с порядком действий и файл загрузки.
Что вы имеете в виду «изменить ОКПО» — у вас ни в обработке, ни в файле загрузки нет такого реквизита. Я использовала наименование и ИНН, находит. Странно, что если в наименовании хоть одна буква не совпадает — то по ИНН не ищет.
Я сейчас для написания файла со скриншотами «прогнала» еще раз, только открыла БД на другой платформе. Не знаю, это помогло или нет — договоры начал находить, и даже создал расчетные документы. Только для типа операции Задолженность клиенту создал документы Приобретения у поставщика. Должен был реализация клиенту. Ну и даты платежа не подставляет.
Добрый день.
На загрузке с реальными контрагентами при считывании данных из эксельного файла в табличную часть обработки база падает с ошибкой с записью дампа. Скажите, пожалуйста, встречалась ли уже у кого-то такая ошибка? Если да, при каких условиях она появлялась?
Добрый день еще раз. Разобрались с падением базы — падала всегда если строк в файле больше 10. Исправили ошибку — в этой процедуре, смотреть скрин
(11)Так если переделывать обработка достойная. Дописывать конечно приходится, но основной объем работы вы проделали. Кстати лучше перевыложить обработку, одного скрина явно недостаточно, чтобы исправить зависания
Доработал под версию 2.4.5, теперь создает первичные документы, проводит ввод остатков. Проверил во всех четырех режимах, проводит документы без проблем.
У меня загружается без ошибок с количеством строк в файле гораздо больше 10. Возможно не дружит с какой-то версией экселя. И необходимо, что бы файл загрузки не был открыт в этот момент в экселе.
Добрый день. Как мне скачать актуальную версию?
Я бы купила заново, если она исправлена, но смущает наименование файла для скачивания «Загрузка начальных остатков взаиморасчетов с партнерами из файла excel для конфигурации ERP 1.1»
Это точно новая версия выложена?
(14) могу на почту прислать, киньте почту в сообщении или сюда
Спасибо. skuv@list.ru