<?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='\
Надо полагать, что последует и работа с регистрами 😉
Плюс однозначный.
(1) боюсь, что тогда ФАС займется мной.
очень хороший инструмент. интерфейс понятный и не перегруженный кнопками
(2) ФАС никем не занимается без команды ФАС с самого верха 😀
Хорошая вещь! Особенно для сотрудников «поумнее», которые вечно подчищают за теми у кого ручонки «кривоватые»! Однозначно +! 🙂
Плюс за работу.
http://www.infostart.ru/public/14315/ .
Замечание:
Но выгрузку и загрузку справочников надо обязательно сделать по ссылке
Отличается тем, что умеет (позволяет) работать с большими объемами справочников. Использует возможности расширения V7PLUS.DLL. ❗
(6) теперь с использованием возможности расширения V7PLUS.DLL
класс!
ЗафиксироватьТранзакцию();
{F:\_С ИНЕТАРАБОТАСОСПРАВОЧНИКАМИ.ERT(1196)}: Ошибка при выполнении процедуры ЗафиксироватьТранзакцию
***
выгрузил справочник Договора. типовая бух.
изменил в базе коды трех договоров. хочу увидеть, что при загрузке не найдет по коду трех элементов, но на закладке загрузка нет доступа к установке реквизитов, по которым искать. т.е. не могу поставить там флаг «код»(( при попытке сделать такой маневр со справочником контрагентов всё прошло отл. т.е. показало правильно, у каких элементов коды я изменил…
для подчиненных нельзя искать по коду? или что?
Проверено в работе. Класс!!!
Хотелось бы разнообразить тип файла выгрузки и загрузки —
Excel намного бы расширил круг применения данной обработки.
А так все очень понравилось, жаль что нельзя ставить за разработку не просто плюс, а конкретную оценку, т.е. много плюсов.
(9) Неверно определялся пустой/непустой подчиненный справочник. Ошибку исправил.
(10) давай обработку выгрузки и загрузки —
Excel, вставлю.
(11) у нас сейчас такая задача. в двух базах вносят контрагентов и договора к ним. т.е. в одной код с120-это ООО Солнышко, а в другой а41 это тоже Солнышко ООО. попробую с помощью выгрузки-загрузки твоей обработкой сделать синхронизацию по коду. т.е. в конце месяца все коды в обоих базах должны быть одинаковы.
(11) спасибо, баг пофиксился. а можно в таблицу несуществующих элементов добавить Владельца, для подчиненного, и код Владельца. а также код загружаемого элемента? тогда это полностью решит мою задачу..
очень хочется. заранее спасибо!
(13) т.е. добавить колонки с этими данными? можно все обсудить по icq
(14) да, добавить дефолтную колонку код справоничка, а для подчинных справочников ещё и колонку владелец. можно в виде Код+Наименование. Имхо это будет идеальный вариант, отлавливать изменения.
Господа программисты… однако мы всегда забываем прописывать в циклах, которые могут длиться очень долго, возможность прерывания! Убедительная просьба не забывайте этого делать! =) всего то 1 строчка в каждом цикле! =)
(16) Млин… это ведь в восьмерке все так просто сделать… в 7-ке не могу найти аналога восьмерошной процедуре ОбработкаПрерыванияПользователя(); 😥
(15) добавил колонки в таб.несуществующих эл. со значениями реквизитов из поля со списком несуществующих эл.
Исправил ошибки, добавил новые возможности. Новые строки в описании помечены «New!»
(18) ну теперь по-моему близко к идеалу! ещё бы 💡 в табличку
с колонками «загружать, наименование, родитель, владелец»
добавить Код элемента который указан в Наименование и код владельца.
потому что например имеем в базе ООО солнышко с кодом С00045, а грузим Солнышко с кодом 00058, так бы сразу видели, что в базе надо перебить руками с00045 на 00058…
5300 строк … 😮
Солидно … 😮
С первым условием работает нормально, а при добавлении второго вот такая ошибка
+(21) Это при нажатии на кнопку «Выбрать элементы»
(22) исправил, проверь.
(23) Ошибок нет
1. Исправлена ошибка: при печати подч.справочников порядок следования реквизитов в шапке не соответствовал порядку в теле таблицы.
2. добавлена возможность установки порядка следования реквизитов при печати
(0) хм… разочарование…
Только группы. Условие по родителю. Выбрать элементы.
Показывается только 11 групп.
+(26) При чем первая показывается неправильно.
Кто Вам сказал, что группа сама себе родитель?
И кто Вам сказал, что пихать эти группы в
(27) благодарю за тестирование, ошибку исправил.
Полезная обработка. Буквально вчера с её помощью в очередной раз подправлял косяки коллег.
Очень полезная обработка. Спасибо разработчику.
10.02.2010 изменения:
— в условиях выбора добавлена клавиша «Очистить значение»
— если в условии выбора задан Родитель с пустым значением, то будут выбраны элементы, находящиеся в корне справочника (без родителей) .
Автору спасибо большое прибольшое!!!!!!!!! классная обработка!!! Очень долго искал что то подобное!!!! ❗ 😀 +1000000000000000
Очень полезная вещь, Спасибо!!
Очень полезная программа.
А как выгрузить справочник, у которого только Код и Наименование? 😎
(34) Спасибо за вопрос. Похоже до сего дня никто не работал со справочниками, в которых только код и наименование. Исправил ошибки, связанные с даннами типами справочников. Теперь можно выгружать такие справочники.
Спасибо 🙂
Честно говоря, устал я уже находить ошибки!
Ну сколько можно? 😀
(37) Есть аксиома: «В каждой программе есть хотябы одна ошибка». И ничего страшного, что и в этой обработке есть ошибки. Один из плюсов — выложить обработку на данном сайте — это тестирование данной разработки всеми пользователями (своеобразная оплата за бесплатное пользование). И никто никого не заставляет искать ошибки, все делается бесплатно и на добровольной основе. Ну, а раз Вы устали, идите отдохните, и не тратьте свои силы на пустяки. А за найденные ошибки, всем — спасибо! Обязательно исправлю после отпуска
То, что обработка пользуется популярностью, несмотря на имеющиеся ошибки, видно из отзывов и скачиваний. Поэтому закрывать поддержку не намерен. Все ошибки и пожелания будут исправлены и учтены. Теститруйте, но не перенапрягайтесь, берегите себя!
(38)
см. (21), (26), ну и (37) 🙂
Это только те ошибки, которые нашел я. Самое обидное в этих так называемых «обработка предназначена для работы со справочниками в любой конфигурации 1С:Предприятие 7.7» это то, что на них надеешься.
А когда они действительно вдруг нужны, то оказывается что они не работают.
P.S. У меня сложилось такое впечатление, что те, кто плюсовал эту разработку, использовали только те возможности, которые нормальный программист может написать за 5-30 минут. Но это мое очень личное, немного раздраженное «имхо».
P.P.S. Похоже, что сбилась нумерация комментов. У меня показываются именно такие — 21,26,37.
(39) «Самое обидное в этих так называемых «обработка предназначена для работы со справочниками в любой конфигурации 1С:Предприятие 7.7″ это то, что на них надеешься. А когда они действительно вдруг нужны, то оказывается что они не работают.» — сразу было понятно откуда раздражение.
«У меня сложилось такое впечатление, что те, кто плюсовал эту разработку, использовали только те возможности, которые нормальный программист может написать за 5-30 минут» — если Вы себя причисляете к нормальным программистам, то могли бы исправить эту ошибку за 5-30 сек (код открыт, да и ошибка элементарная) и выложить исправление ошибки. У 1С в каждом релизе немеренное кол-во ошибок и ничего работаем, не устаем.
Огромнейшее спасибо!!! 😀 😀 😀
А то я уже замучилась с кодами в номенклатуре (на каждую группу — свой код, а по сути он никому не нужен (на моей фирме)).
(37) Была ошибка: при задании в условии выбора родителя и других реквизитов — неправильно формировался запрос.
Ошибка исправлена . Добавлен новый флаг «выбирать без использования запроса». Если при выборе элементов возникает ошибка запроса, то можно установить флаг «выбирать без использования запроса» и повторить выбор. Об ошибке не забудьте сообщить разработчику!
Пренумеровывал справочник с числовым кодом. Сразу свалилось с жалобой на неуникальность кода.
(43) Попробовал у себя, проблем нет, все перенумеровывается без ошибок. Пришлите пож метаданные и выгрузку вашего справочника. Все это можно получить в обработке «Работа со спр».
Действительно при попытке перенумеровать справочник с неуникальными кодами выдаёт ошибку что код не уникален.
>РАБОТАСОСПРАВОЧНИКАМИ.ERT(3609)}: Код не уникальный!
(45) Что значит «справочник с неуникальными кодами»?
Пришлите пож метаданные и выгрузку вашего справочника. Все это можно получить в обработке «Работа со спр».
2 46
Справочник с не уникальными кодами это справочник в котором есть два и более элемента с одинаковым кодом. Достигнуто это было за счет УРБД.
А мои метаданные и мой справочник Вам вряд ли что-то дадут. Дело именно в том что есть элементы с одинаковым кодом. Поэтому нумеровать их с 1 по N не получится.
Я сначала в одном цикле присваивал им новый код чтобы устранить дубли, А потом в другом уже присваивал номера как мне надо.
(47) Спасибо за разъяснение.
(40)
Мне проще написать свою обработку для выполнения маленькой конкретной задачи, чем исправлять чужой код.
А насчет хороших программистов… Вы уже исправили ошибки, которые обещали пофиксить в (38)?
(49) См. (42), можете тестировать.
(50) ясно, сбилась нумерация комментов
часто выручает обработка и фильтр, автору «+»
Спасибо. Часто пользуюсь. Особенно выгрузкой-загрузкой и перенумерацией, да и в этой обработке много других полезных возможностей. Огромный плюс!
Спасибо. Очень помогла перненумерация и добавление префикса к коду справочнику.
Многофункциональная полезная обработка
Спасибо, разработчику полезная обработка, многофункциональная!
Спасибо, хорошая обработка.