<?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='\
А чем не устраивает Универсальный подбор и обработка? небольшой произвольный алгоритм написать и все.
Да, конечно можно и Универсальный подбором то же самое сделать, только надо иметь ввиду, что Единицы Хранения — это отдельный справочник, подчиненный Номенклатуре, а не реквизит!
Я быстренько написал эти две обработки для передачи в магазин, где Юзер бы нажал кнопочку и ему все сделалось и показалось… + есть новички в программировании, которым эта обработка может быть полезной.
А так, конечно можно написать запрос, а потом шагать по выборке, создавать элемент этого справочника, получать объект номенклатуры и записывать в него…короче кто умеет, тот сделает любым способом, а это для тех кому надо 😀
Удобная весчь. Сам при написании правил переноса с упп в комплексную косякнул и номенклатура частично без остатков перенеслась. 👿
Клиент чухнул тока через неделю !!!! Вот с универсальным подбором ничего и не получилось !!! Пришлось через редактор реквизитов менять единицу остатков и потом только универсальным подбором и обработкой допинывать.
Юзер убил 2 дня.
Буквально вчера 3 часа убила по этой теме. Загрузили номенклатуру из Excel, а она только с базовыми единицами. Пока вашу обработку не проверяла, но если это работает — огромное спасибо. (УТ только осваиваю)
как говорил ghostishe,
действительно можно использовать спец.обработку с диска ИТС, но это для тех, у кого есть под рукой ИТС-диск 🙂 — УниверсальныеПодборИОбработкаОбъектов.epf
как ее применить для текущей темы — очень подробно написано еще в 2007г. !!!
http://www.1c-pro.ru/lofiversion/index.php/t9540.html
Спасибо огромное . А то замучился.До сих пор удивляюсь . Пишут программы а, а простой переход с версии на версию не преусматривают.
Спасибо, очень помогла
Хорошая обработка и гланое полезная, недавно такуюже писал для перегрузки.
Спасибо, очень полезная обработка.
Удобно ккогда нужно сразу у многий позиций изменить единицы измерения и хранения.
Спасибочки!!! Очень пригодилась обработка! Нужная штучка!
Спасибо, хорошая полезная обработка — помогла справится с последствиями стандартного удаления дубликтов 🙂
Спасибо за обработку!
Очень помогла при загрузке Номенклатуры из Exel.
Спасибо!
Эта штука очень помогает, особонно начинающим программерам. Спасибо Вам ребята за то, что делитесь опытом!!!)))
Пригодилась, когда не было под рукой стандартных обработок !Совских,а после загрузки данных в филиал из центральной базы в другом городе, обслуживаемой другим программистом вылезли новые позиции без единиц… Спасибо, взаимопомогающие обработки приветствуются!
Огромное спасибо за обработку, раньше мучились руками…
Научил приятеля импортировать номенклатуру из Excel файла. Теперь ему без этой обработки точно не обойтись )))
Спасибо за обработку, пригодилась
Было — бы весьма актуально, если-бы еще и ЕДЕНИЦЫ ХРАНЕНИЯ МЕСТ обработало. А иначе как? Можно проконтролировать загрузку или коррекцию с помощьюhttp://infostart.ru/public/97415/
Показать
действительно реально полезная обработка при переносе справочника номенклатура, зачастую единицы хранения слетают.
Отлична обработка
Уже два года пользуюсь! Классная штука!
Особенно при переходе от одной конфы к другой!
При конвертирования из 8.0 в 8.1 сохраненных в 8.0 только справочников
(Справочник номенклатуры, справ. ед. из, классиф. ед изм, валюты и т.п )
получилась ситуация
Элемент номенклатуры
— базовая единица заполнена.
— Табличная часть (единиц измерения) заполнена.
НО ЕдиницаДляОтчетов -не выбрана
ЕдиницаХраненияОстатков — не выбрана
т.е. поъхоже ссылки на ед. из. утерены при конфертировании.
Задача проставить каждом элементе номенклатуры в соответствие
ЕдиницаДляОтчетов и ЕдиницаХраненияОстатков Базовую еденицу Измерения
Делаю так
Ссылка = Справочники.Номенклатура.НайтиПоКоду(» Код элемента»);
Элемент = Ссылка.ПолучитьОбъект();
Запрос2 = Новый Запрос;
Запрос2.Текст = «ВЫБРАТЬ
| ЕдиницыИзмерения.Ссылка,
| ЕдиницыИзмерения.Владелец,
| ЕдиницыИзмерения.Код,
| ЕдиницыИзмерения.Наименование,
| КлассификаторЕдиницИзмерения.Ссылка КАК Ссылка1,
| КлассификаторЕдиницИзмерения.Код КАК Код1
|ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторЕдиницИзмерения КАК КлассификаторЕдиницИзмерения
| ПО ЕдиницыИзмерения.ЕдиницаПоКлассификатору = КлассификаторЕдиницИзмерения.Ссылка
|ГДЕ
| ЕдиницыИзмерения.Владелец = &Владелец
| И ЕдиницыИзмерения.ЕдиницаПоКлассификатору.Код = &ЕдиницаИзмПоКл»;
Запрос2.УстановитьПараметр(«Владелец»,Справочники.Номенклатура.НайтиПоКоду(Ссылка.Код).Ссылка);
Запрос2.УстановитьПараметр(«ЕдиницаИзмПоКл»,Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(Элемент.БазоваяЕдиницаИзмерения.Код).Ссылка );
Результат2 = Запрос2.Выполнить();
ВыборкаЭЛ = Результат2.Выбрать();
Если ВыборкаЭЛ.Количество()=1 Тогда
Сообщить («Правим этот элемент»,СтатусСообщения.БезСтатуса);
Элемент.ЕдиницаДляОтчетов = ВыборкаЭЛ.ЕдиницыИзмерения.Ссылка;
Элемент.ЕдиницаХраненияОстатков = ВыборкаЭЛ.ЕдиницыИзмерения.Ссылка;
КонецЕсли;
Элемент.Записать();
Где я не прав?
Подскажите пожалуйста!! Горю на работе….
Спасибо. Очень сэкономило время. Дедлайн, а тут этот косяк выполз.
🙂
рад что моя давнишняя обработка кому-то до сих пор приносит пользу
Спасибо! Для УТ 10.3 без ошибок отработало.
Все бы ничего, но вложенные папки не обрабатывает. Пришлось поменять «выбрать» на «выбратьиерархически».