<?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='\
Простенькая такая, приятненькая обработочка 🙂
{Форма.Форма(291)}: Ошибка при вызове метода контекста (Содержит): Несоответствие типов (параметр номер ‘1’)
Если ТекущийДокумент.Движения.Содержит(ТекущийРегистр) Тогда
по причине:
Несоответствие типов (параметр номер ‘1’)
(2) Я бы исправил, но не могу смоделировать ситуацию возникновения ошибки. Тестировал на нескольких конфигурациях, работает нормально.
«Отметка по подсистемам» не учитывает объекты, включаемые во все подсистемы — их просто пропускает, а по подмножеству подсистем выбирает. Логика должна быть наоборот, если выбираются все подсистемы.
{Форма.Форма(291)}: Ошибка при вызове метода контекста (Содержит): Несоответствие типов (параметр номер ‘1’)
Если ТекущийДокумент.Движения.Содержит(ТекущийРегистр) Тогда
по причине:
Несоответствие типов (параметр номер ‘1’)
Посмотрел модуль, исправил строчку следующим образом: Если ТекущийРегистр <> Неопределено И ТекущийДокумент.Движения.Содержит(ТекущийРегистр) Тогда
Заработало 😉
Мня, на другой конфигурации выдало следующую ошибку:
{Форма.Форма(331)}: Значение не является значением объектного типа (ПолноеИмя)
ВидРегистра = СтрЗаменить(МдТекущийРегистр.ПолноеИмя(),
В общем надо везде проверки на «Неопределено» понатыкать 🙂
(5) Спасибо за тестирование. Где то возникает ошибка, причем проявляется она не на всех конфигурациях. По обох ошибках видно, что 1с не может найти объект метаданных регистра по его имени и возвращает Неопределено. Причем имя регистра берется из этой же конфигурации, а значит не может быть неправильным. Т.е. объект метаданных должен находится всегда. Если Вас не затруднит, не могли бы Вы сбросить на файлообменник (например zalil.ru) конфигурацию, на которой возникает ошибка (только *.cf без данных).
(4) Спасибо за подсказку. Я посмотрю что можно сделать и в ближайшее время обновлю обработку.
Хорошая идейка. Помогает. Плюс.
(8) Не было ошибок при формировании отчета? А то появилась какая то странная весчь, на одних конфигурациях вылазит на других нет.
Не скачивал. Но идея проста и наглядна.
(7) Конфигурацию скинуть не могу, меня расстреляют за разглашение коммерческой тайны. Это факт, я не шучу.
Просто нужна проверка на Неопределено.
(11) У меня такая же ошибка. Конфигурация на базе торговли 10.2.
(11) Ну да ладно, нельзя так нельзя. Просто я сейчас далеко от дома и под руками как на зло только каркасная конфигурация для сдачи спеца, да еще несколько небольших самописных. А на них выполняется все без ошибок. Что касается проверки на Неопределено, то это сделать нетрудно. Но дело в том, что по логике Неопределено не должно возникать.
Наверное я все таки вставлю эти проверки и обновлю файл, а попозже найду причину возникновения ошибок.
(11) (12 )У меня кстати возникло одно предположение насчет природы этой ошибки. Подскажите пожалуйста, встречаеться ли в в именах регистров в тех конфигурациях на которых возникает ошибка символ подчеркивания «_».
(11) (12) Причина ошибки найдена. Заменил файл. Сейчас все должно работать корректно.
Спасибо. Как раз пригодится при изучении новой конфигурации. Плюс
Желательно добавить возможность вывода результатов в файл.
(17) Файл какого формата? Если таблица xml то такая возможность заложена в платформе. Нужно щелкнруть мышью на любой ячейке отчета затем выбрать в меню 1с: «Файл» -> «Сохранить как».
(18) xml = mxl
Спасибо! Просто-ясно-удобно и СВОБОДНО!
Спасибо, удобная…запустилась на дописанной УПП 😉
Однозначно плюс 😉
Приятная штучка
Обработка полезная, идеально работает на типовых и измененных украинских БУ 81. Видны движения, особенно когда дорабатывали до тебя и бухгалтер не помнит, что и для чего заказывал, но нужно научить его этими «полезными доработками» пользоваться.
Однако на УТП 81 для Украины возникла проблема с интерфейсом
обработки — окно с перечнем регистров не двигается вправо. Видна только первая колонка «Всего регистров».
Очень жаль, т.к. мне конкретно сегодня нужно было подготовить для
клиентов памятку, какие док-ты двигают регистр накопл. «затраты» в УТП.
С интерфейсом на УТП украинской можно не заморачиваться,
хоть в обработке не посмотреть, в Exel Ваша матрица отлично сохраняется.
Спасибо.
(23) Спасибо за поддержку. Обработка написана таким образом, что должна работать во всех конфигурациях предприятия 8.1, независимо от того, типовые они, или самописные.
(24) Что касается украинского УТП, то здесь причина ошибки непонятна, нужно увидеть своими глазами. Попробуйте воспользоватся полосой прокрутки под полем отчета, может подействует.
(25) про воспользоваться прокрутки восприму как шутку 😀
Она как раз в УТП и не действовала. Могу скриншот кинуть.
Хотя в БУ и УТорговлей все отлично.
Но для наших украинских восьмерок, такое даже и не глюк…
Спасибо. Как раз пригодится при изучении новой конфигурации. Плюс
Ярослав, нет ли интереса доработать обработку под 8.2 ?