<?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='\
Я слабо себе представляю, как обработка ищет дубли ДОКУМЕНТОВ, и не дай бог, чтобы мне это хоть раз понадобилось, но плюсую за идею.
как Вы себе представляете дублъ документа, расчета и тд и тп.? Код уникальный должен быть — не так ли?
(1) rus128, Спасибо за плюс, может быть всякое например когда в базу назагружали всякого разного (согласен что это экзотические и единичные случаи, но иногда случаются). (2) DJDUH Всякого насмотрелся , при переходе и загрузке из зик в зуп там вы увидете много чего, о чем даже и не догадывались, этой обработкой много чего подправил (например когда было штучек 6-7 практически одинаковых видов расчета)
(3) Так если у меня в базе после переноса несколько, например, северных надбавок, то этой обработкой можно все заменить на одну? Вы сами пробовали это проверить ?
(4) Just, У вас несколько видов расчета, северная надбавка? да заменяет, может только возникнуть проблема когда эти виды расчета участвует в базе других и при замене они двоятся чего быть не может, тогда ругнется и не удалит, я поступал следующим образом менял метил на удаление и в 3-4 видах убирал дубли и замечательно все пашет.
Эта обработка будет работать под УТ 11 редакции ?
(6) staspdb, данная обработка для обычного приложения для управляемых форм не было необходимости, если вам дубли справочников то на это есть стандартная обработка, если что-то еще то можно попробовать запустившись в обычном режиме, если жалко маней на пробу скажите мыло вышлю так
Спасибо за обработку. Но как удалить найденные объекты, когда поиск проводился по похожим реквизитам? В частности не обрабатывать найденную группу или из группы удалить ненежную строку. Явно, мне не надо заменять «Александра Захарова» на «Александра Петрова», но надо оставить замену «Александра Захарова» на «Алесандра З». В штатной обработке 1с «Поиск и замена дублей» в такой ситуации убирал из табличной части ненужные строки, а дальше Автовыбор и удаление.
Помогло при сведении дублей в планах видов расчета, которые появились при загрузке в рабочую ЗУП из двух других разных ЗУП, спасибо.
Добрый день! Задвоился план счетов, конфигурация Бухгалтерия 3.0, под обычном режимом поможет, если пройтись по дублям счетов?
(10) psixo666, на бухгалтерии не проверял, на зуп 3,0 отработало нормально, попробуйте если не получится мани верну
Без перепроведения не заменяет данные в регистрах. Например задвоен счет 69.02.7. Меняет только в документах, а в регистре бухгалтерии оставляет старый.
(12) Serg_KSV, уточните пожалуйста конфу, релиз, вид док
(13) baa50
УПП 1.3.62.1 + Бит-Финанс 3.0, платформа 8.2.19.76
Документ — отражение ЗП в регламентированном учете.
Думаю, что релиз и конфа тут ни при чем.
И еще сразу ошибку выдает если реквизит поиска код:
{Форма.Форма.Форма(2115)}: Поле объекта не обнаружено (ТипКода)
Если Метаданные[ТипДанныхДляПоиска][мВидОбрабатываемогоСправочника].ТипКода = Метаданные.СвойстваОбъектов.ТипКодаСправочника.Число Тогда
но потом отрабатывает, но как я и писал — не полноценно.
Я справился сам — допилил старую еще обработку Поиск и Замена значений — чтобы менял данные в режиме ОбменДанными.Загрузка()=Истина.
Спасибо огромное!!! 🙂 обработка просто спасла меня :)))
Подскажите работает эта обработка в 1С 8.3
(17) alla1978, в (7) ответ на ваш вопрос
И еще когда пишу комент с этой страницы проходитhttp://infostart.ru/public/286167/#comm
http://forum.infostart.ru/forum24/topic111487/message1554168/#postform то появляется надпись У Вас недостаточно прав для добавления сообщения в этой теме.
А если осюда
Задам еще раз вопрос по ходу удалили коменты до этого.
Кто то пробовал эту обработку в 3.0? 8.3. в режиме управляемого приложения?
Не могу написать в личку появляется надпись EMPTY_UID что это не понятно.
Короче купил. Не работает в 3.0
(23) Iggo, Добрый день данный вопрос поднимался ранее (7) И вопрос что вы имели ввиду когда говорили что Купил? Вы не скачивали данную обработку
(17) Да работает.
Склеивание дублей в плане счетов — будет работать и в УФ, но из под толстого клиента. Причесывал ею БП 3.0.58 (это подправленная старая обработка склеивания план счетов и ПВХ)
— на сегодняшний день единственная обработка по склеиванию предопределенных дублей в плане счетов
(если кто найдет другой механизм — размещайте ссылки)
По сути просто поправил — пару мест (возле исправлений стоит комментарий: //KKY)
— Отработает и удалит только те дубли где нет ссылок «на одном из».
— в тандеме использовал обработку «поиск и замена значений (с перепроведением док.)
Автору спасибо за удобный механизм и до сих пор актуальный.
(7) Для управляемых форм не подойдет? Оч нужна. Может посоветуете подобный механизм?
(22) Та же потребность?
(27) Спасибо! Пригодилось.
Поиск по одному реквизиту не актуально