Перенумерация Справочников v7.7




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

38 Comments

  1. ukhin

    С помощью обработки можно перенумеровывать справочники не отключая в конфигураторе «Контроль уникальности».

    Перейти к публикации

    Reply
  2. Noy

    Та сколько можно?!?!?!?!?!?!?!?!?

    Reply
  3. iov

    А что сказал поиск по поводу перенумераторов?

    Reply
  4. Altair777

    (0) в чем отличие от множества аналогичных обработок?

    Reply
  5. ukhin

    (1) !?

    (2)Поиск сказал, что перенумератора справочников для v7 нету

    (3)как то не увидел антологичных…

    Я написал, мне понравилось, я выложил.

    Почему минусы, разве не работает?

    Reply
  6. iov

    ПЕРЕНУМЕРАТОР

    нету????? минусы потому что перенумераторов уже просто превеликое множество. И многих просто уже выворачивает от них… Ибо перенумератор это как hello word

    Reply
  7. ACE$
    Ибо перенумератор это как hello word

    а что, можно в качестве тестовых заданий при приеме на работу задавать! «Набросайте свой перенумератор»

    (0) а чем отличается от штатной обработки с ИТС?

    Reply
  8. Altair777
    ukhin пишет:

    как то не увидел антологичных…

    😀

    вот первые попавшиеся

    http://infostart.ru/public/22044/

    http://infostart.ru/public/14058/

    http://infostart.ru/public/14519/

    Reply
  9. vladimir_makarov

    (4) Надо? Пиши. Жалоб по работе нет.

    Reply
  10. vladimir_makarov

    (6)… да так, что бы он сам угадывал, что нам надо, а что не надо? Действительно, у всех, здесь собравшихся, есть своя модель (и у меня в т.ч.), а самое главное, чтобы после одобрения мог вернуть назад!

    Reply
  11. DimaP

    Хехе, ребят, у если вы профи и для вас это слишком пустая обработка, то не стоит так горячиться!

    А вот за отсутствие поиска… тут да )

    Reply
  12. Tristania

    Спасибо!

    Reply
  13. nickkey

    Автор прав у каждого свой подход и я считаю нет предела совершенству поэтому интересно посмотреть как получилось вдруг какая нибудь свежая идея так что как бы то ни было автору спасибо за свой вариант 🙂

    Reply
  14. dante

    Отличная обработка,очень помогла

    Reply
  15. tyv69

    Добрый день. Спасибо автору. Обработка помогла

    Reply
  16. lexa_12184

    обработка работает корректно…

    Да таких обработок много, однако не все они работают достойно, если их не перетачивать или править.

    Эта вроде даже без правок нормально отрабатывает.

    Автору +

    Reply
  17. ukhin

    Так и нажали бы на +

    Reply
  18. Artemuch2

    Да попробуем щас

    Reply
  19. vat-74

    За столько времени не научили отпирать по владельцу. На подчиненных справочниках не работает. «-«

    Reply
  20. ukhin

    (18) vat-74,

    в строку 62

    Спр.ВыбратьЭлементы()

    добавь ноль в скобки

    Спр.ВыбратьЭлементы(O)

    и будут тебе подчиненные.

    Reply
  21. vat-74

    (19) А владельца-то где выбирать?

    Reply
  22. firuzji

    Длину кода можно указать?

    К примеру у нас в зависимости от региона ставится префикс, к примеру «MSK00000001».

    Если префикс указать код региона, а нумерацию к примеру поставить «00000001», как в этом случаее отработает обработка?

    PS.А так полезняшка.

    Молодец.

    Reply
  23. ukhin

    (21) firuzji,

    Вообще-то длина кода задается в конфигураторе, как и тип (цифровой или текстовый), в обработке показывается во второй секции информационно.

    В конкретном примере если Вы введете в поле префикс буквы MSK и оставите 1 в поле номера то все получите как надо.

    Reply
  24. ukhin

    (20) vat-74,

    Практически все подчиненные справочники имеют серии кодов и контроль уникальности в пределах справочника, а не в пределах подчинения, поэтому не вижу никакого смысла в перенумерации справочника в пределах подчинения. Если кто-то внятно объяснит, зачем это ему нужно, я добавлю возможность перенумерации подчиненного справочника в пределах подчинения (при условии, что в конфигурации серии кодов этого справочника установлены в пределах подчинения).

    Reply
  25. vat-74

    (23) Да не хотите не делайте. Но подчиненные справочники не нумерует. Ноль, дак поствьте.

    Reply
  26. ukhin

    (24) vat-74,

    Добавил, перезалил.

    Reply
  27. Abadonna

    (1)

    Та сколько можно?!?!?!?!?!?!?!?!?

    Давно пора статью в УК ввести

    Статья ХХХ. Использование 1С 7.7

    Часть1. Использование 7.7 без отягчающих обстоятельств.

    Часть2. Использование 7.7 с отягчающими обстоятельствами.

    К отягчающим относятся: перенумераторы, списки дней рождения сотрудников, поздравлялки.

    Reply
  28. BorisBelov

    Бурная реакция на публикацию: Сколько можно? Чем отличается?

    «Юпитер, ты сердишься? Значит ты не прав!»

    Хотелось бы видеть, за что конкретно поставлен МИНУС!

    Немного подробнее.

    1. Сколько можно? А сколько появляется публикаций, столько и можно! Как говорили в известном сериале:

    «Скока нунно, стока и монно!»

    2. Сложнее, чем отличается. Ответ может появиться после скачивания автором опубликованных нумераторов и их анализа. В науке это называется «литературный обзор», из которого делается вывод о нерешенных задачах и необходимости данной работы. Все ли авторы в состоянии сделать это? Сколько потребуется времени?

    Недостаток публикации — низкая информативность о методе предлагаемого нумератора.

    Полагаю, что те кто скачал публикацию и поставил ПЛЮС не всегда искали нумераторы на Инфостарте, просто выбрали последный в надежде, что он учитывает опыт предыдущих нумераторов!

    Reply
  29. Abadonna

    (27)

    Все ли авторы в состоянии сделать это? Сколько потребуется времени?

    Все ли авторы постыдятся такой «проходняк» выкладывать?

    Любой дебил может написать перенумератор, если только он дебил не законченный

    Reply
  30. BorisBelov

    (28) Инфостартом пользуются не только авторы, но и пользователи! Им проще скачать перенумератор, чем включить поиск и анализировать, чем они отличаются!

    Reply
  31. Abadonna

    (29)

    но и пользователи!

    Вот это как раз и печально. А еще печально, что такой юзверь наперенумерует, что не следовало

    Reply
  32. ukhin

    Если хотя-бы одному человеку помогло, значит уже не зря.

    Забавная закономерность, благодарят в основном пользователи, а критикуют/хают «программеры» ….

    Reply
  33. firuzji

    что не нравится программерам, я сам программирую. К тому же пользователь перед тем как запустить ту или иную обработу, программу, или еще что то, понимает чем ему это гроизит. В публикации все четко ясно написано. Кому не нужна обработка, может не пользоватся.

    Если пользователь не пониммет что делает, как можно вообще ему доверять работу.

    Reply
  34. Abadonna

    (32) firuzji,

    Дело не в том, понимает он или нет. Он просто не знает, (да и не может знать), что, например, какой-то кусок кода завязан на код элемента.

    (31)

    Забавная закономерность, благодарят в основном пользователи, а критикуют/хают «программеры» …

    Хочешь эксперимент провести? Месяца через 3-4 опубликуй эту же разработку, слегка изменив название. Или под другим логином. И можешь не сомневаться, что опять попрут плюсы и благодарности. Просто потому, что она окажется в рубрике «новые» и будет на виду.

    Я вот с этой http://infostart.ru/public/14639/ такой эксперимент проводил. Даже после того, как в ней написал, что это была шутка, указал ссылку на оригинал, народ с маньячным упорством продолжал плюсовать копию. Пока не удалил. Около 40 плюсов накидали на копию!!!

    P.S. Я тебе даже больше скажу: опубликуй обработку с диска ИТС, модеры просохатят (100%!!!), а юзвери тебе плюсов накидают

    Reply
  35. internetname

    Были, были такие задачи в 7.7, помню

    Reply
  36. MyPuK_OLD

    Доброго времени суток!

    Поможет ли данная обработка перенумеровать справочник номенклатура в иерархии???

    Номера будут тупо заменяться, или заменяться будут только дубли?

    Заранее спасибо!

    Reply
  37. ukhin

    Будут заменены все номера в пределах справочника как на папки так и на позиции.

    Обязательно сначала сделайте копию базы и пробуйте на ней.

    Первый проход с каким нибудь уникальным префиксом, чтобы точно не совпал с имеющимся номером, а во второй уже как угодно.

    Reply
  38. Душечка

    Есть стандартная обработка на диске ИТС и всегда ей пользовалась.

    Но в одной базе эта обработка выдает ошибку.

    Огромное-огромное спасибо.

    Выручили !!!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *