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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *