<?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='\
гууууд=)
Ага. Давно хотел сделать…
Зачем же скриншот такой тяжелый? ох-ох-ох… 😉
аа, BMP’шник. сорри =)
Спасибо, пригодится как-нибудь.
Уж давно есть такие…
я на инфостарте не нашёл такие…
(7) Рекомендую посмотреть обработки таб.частей от e.kogan — много полезных и дельных вещей ❗
(8) Спасибо, но иногда проще за 6-7 минут написать свою обработочку из 25-30 строк, чем тратить время на поиск.
(8) Кстати, на есть что-то подобное, боле универсальное, но куча настроек. Там для продвинутых пользователей так и написано. Надо указать в настройке этот же документ и тп… А тут все просто… Все в пределах одного документа…
Для реквизита «ТабличнаяЧасть», тип данных «Строка» — длины — 20 явно не хватает, желательно увеличить до 100 хотя бы, чтоб вмещались длинные названия таб.частей (напр. «ДоговорыНаВыполнениеРабот» или «ДополнительныеНачисления»)
Ок, уже заметил. 20 явно маловато. Ща исправим…
Скажите пожалуйста, а как можно не перенести данные в другую табличную часть, а добавить? То есть у меня в табличной части «Начисления» уже есть данные, мне нужно туда же перенести данные из табличной части «Дополнительные начисления».
(13) Пока никак. Если хотите, могу добавить, это недолго… Попробую в течение часа.
(13) Добавил. Пробуйте. Сам не проверял, если что — пишите.
Попробовала. Получилось. Спасибо! Но у меня осталась маленькая проблема. Дело в том, что я перекачиваю начисления из старой Clipper’овской программы. И, видимо, это моя тактическая ошибка — я переношу начисления и в ТЧ Начисления, и в ТЧ Дополнительные начисления (я их также добавила в разные ПВР — Основные и Дополнительные). Теперь,после использования Вашей обработки, я имею все виды начислений только в одной табличной части — Начисления, причем те, которые были в Дополнительных начислениях, перенеслись без названия. Понятно, почему. Видимо, мне изначально нужно было все виды начислений определить только в одном ПВР. Сейчас уже поздняк метаться, поскольку начисления закачаны с января, и база просто огромная. Че-то я вся в растерянности… Извините за женские сентенции. За обработку однозначно большой жирный плюс.
(16) Да, в документе начисления зарплаты на обеих закладках есть «начисление» — ПВР. Только на закладке осн. начисления тип ПВР «основные», а на закладке доп. начисления — тип ПВР «дополнительные». Так что тут ничего не поделаешь. разные типы данных.
(16) Могу, например, прописать однозначное соответствие для переноса ПВР, если это поможет. То есть при переносе поля «ВидРасчета», если ВидРасчета = «Х», то в новой ТЧ ВидРасчета = «Y». Нужно?
(18) Я думаю, мне проще будет перенести мои виды начислений из ПВР «Дополнительные начисления» — в ПВР «Основные начисления». Тогда со спокойной душой применю Вашу обработку.
У меня не получается в УПП переносить из вкладки услуги во вкладку товары в док-те поступление товаров и услуг((( . Пишет :
{Форма.Настройка(16)}: Получение элемента по индексу для значения не определено
ЭтотДок[Строка.ТабличнаяЧасть].Загрузить(ТЗ);
ПОМОГИТЕ ПЛИЗ
У меня не получается в УПП переносить из вкладки услуги во вкладку товары в док-те поступление товаров и услуг((( . Пишет :
{Форма.Настройка(16)}: Получение элемента по индексу для значения не определено
ЭтотДок[Строка.ТабличнаяЧасть].Загрузить(ТЗ);
ПОМОГИТЕ ПЛИЗ
(21) А у меня получается. Какой релиз?
в УПП не получается релиз Управление производственным предприятием, редакция 1.2 (1.2.31.1) 1С:Предприятие 8.1 (8.1.13.41)
получилось,спасибо
пользуюсь очень часто) спасибо)
полещная вещь, использовала несколько раз