Re: нумератор справочников




Принцип обмена данными из 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='\

46 Comments

  1. O-Planet

    Исчо один 🙂

    Reply ↓
  2. Abadonna

    (1)Исчо один 🙂

    -Ваш любимый полонез?

    -Огинского!

    -Ваше любимое произведение Огинского?

    -Полонез!

    Одного понять не могу — на фиг из перенумеровывать? Тем более, что все путние люди для нахождения конкретного обычно используют в обработках НайтиПоКоду… что, потом все обработки переписывать?

    Reply ↓
  3. hogik

    (2)(Abadonna)

    “нахождения конкретного обычно используют в обработках НайтиПоКоду…”

    Это ты с позиции программиста сказал. 😉

    А представь еще, как потом проверить 50000 ценников в торговых залах, и найти какие коды изменились? А места хранения на складе? А как работать с накладными?

    Reply ↓
  4. O-Planet

    Короче, автор выложил жутко опасную весЧь, предназначенную дизорганизовать работу любого предприятия по нажатию одной кнопки…

    Reply ↓
  5. Abadonna

    (3)>Это ты с позиции программиста сказал. 😉

    А ты с позиции розничника :))))

    У нас производство+опт, немае ценников, только прайсы 😉

    Но в любом случае не вижу никакого смысла в перекодировке

    Reply ↓
  6. dreamo4ka

    а для документов так же сделать можно? сделано красиво. блин и не то…

    Reply ↓
  7. vasilykushnir

    (10) Блин! Первый случай, когда полностью согласен с Фиксиным (даже ник с большой буквы написал — зацените товарищ Фиксин!). + Заслужил

    Reply ↓
  8. Altair777

    (11) эх… и я туда же )))

    Reply ↓
  9. Vitek

    Даешь бесплатные перенумераторы, много и разных! 🙂

    Reply ↓
  10. Altair777

    (13) Даешь бесплатные универсальные перенумераторы, что бы они перенумеровывали все подряд

    Шо найдут, то и перенумеруют ))

    Reply ↓
  11. Душелов

    Ох уж эти перенумераторы… У меня дядька на перенумераторской фабрике работает… У него этих перенумераторов!… Вот и шлет кому попало!..

    Reply ↓
  12. poppy

    Во, блин. Стая шакалов набежала… Ату, его, ату…

    На инфостарте давно обсуждать и осуждать наличие цены и ее размер считается моветоном.

    Если следовать псевдо-логике квази-гения, то минусы нужно ставить кассирочке, рокет-ланчеру, новейшему отчету. Или, например, уважаемому Che за его творение http://infostart.ru/projects/1212/

    Его разработку оценило на порядок меньше людей, но стоит она в 2,5 раза дороже. Где логика?

    Василий, ты вроде тертый калач, но поддался на дешевую провокацию тролля… 🙁

    И потянул за собой неопытную молодежь. Стареешь?

    Reply ↓
  13. alexk-is

    …а у меня тоже перенумератор есть. Правда старенький…

    Показать? 🙂

    Reply ↓
  14. Душелов

    (17) У меня тоже есть 😉 2004 годом датированная вроде… http://1c.proclub.ru/modules/mydownloads/personal.php?cid=120&lid=3801

    Reply ↓
  15. Altair777

    (16)

    > Во, блин. Стая шакалов набежала… Ату, его, ату…

    стая шакалов? Стая подразумевают сговор, не так ли? Мне кажется тяжело обвинить Кушнира и фиксина в сговоре.

    Или Вы отстали от жизни на ИнфоСтарте?

    > На инфостарте давно обсуждать и осуждать наличие цены и ее размер считается моветоном.

    Я об этом не знал. Честно. Вы виднее — Вы здесь уже старая, а я человек новый.

    Кстати, а почему моветоном? Есть какой-то блок, где это «узаконено»? Пришлите ссылочку, плиз.

    > Если следовать псевдо-логике квази-гения…..

    Кстати, а почему псевдо-логике? Обоснуйте, что в его посылке не соответствуют выводу?

    > Его разработку оценило на порядок меньше людей, но стоит она в 2,5 раза дороже. Где логика?

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

    http://infostart.ru/projects/455/ , http://infostart.ru/projects/181/ , http://infostart.ru/projects/445/, http://infostart.ru/projects/608/

    Где логика?

    Оставшуюся часть третьего абзаца лично я расцениваю как прогибание перед Сhe Burashka, O-Planet и support’ом

    Которых я, кстати, уважаю.

    > Василий, ты вроде тертый калач, но поддался на дешевую провокацию тролля…

    Расскажите плиз, нубу, кто такой тролль? (применительно к ИнфоСтарту 🙂 )

    > И потянул за собой неопытную молодежь. Стареешь?

    «Молодежь» — это про меня? Спасибо огромнейшее за комплимент!!! 🙂

    А насчет опыта… хм…

    > Стареешь?

    Все стареют — это законы природы. И вас они тоже касаются.

    Reply ↓
  16. CheBurator

    А у мну перенумератора — нет… за 10 лет ни разу не писал… вернее так: перед тем как писать — сел подумать… ну не может такого быть! чтобы никто не написал… и оказалось — так и есть!…

    Reply ↓
  17. poppy

    (19)

    > А вы случайно во время Ваших ночных бдений не натыкались на бесплатные

    > разработки, которые оценило гораздо больше людей,

    А кто тебя заставляет платить за эту разработку?

    > чем этот очередной перенумератор?

    Много ли восьмерочных перенумераторов на инфостарте? http://infostart.ru/projects/?rubric=73&p_platform=10

    Один из которых не работает… О какой очереди нумераторов идет речь?

    Перенумератор есть на диске ИТС, только мало кто об этом знает…

    > Расскажите плиз, нубу, кто такой тролль? (применительно к ИнфоСтарту

    http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%BE%D0%BB%D0%BB%D0%B8%D0%BD%D0%B3

    Reply ↓
  18. Altair777

    (20) А ты напиши и выложи. Лично я «плюсик» поставлю.

    А что? Другим можно, а товарищу Че нельзя? Где логика? 🙂

    Reply ↓
  19. Altair777

    (21) > А кто тебя заставляет платить за эту разработку?

    Тут акцент не на этом.

    Во-первых, никто никого в принципе не может завставить платить.

    А, во-вторых, мало того, что не заставляют, а не просят даже.

    > http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%BE%D0%BB%D0%BB%D0%B8%D0%BD%D0%B3

    Я имел в виду не понятие в целом (википедить я и сам умею), а конкретного человека.

    Вопрос был задан так — «кто такой тролль?», а не «кто такие тролли?»

    И, тем более, было уточнение «(применительно к ИнфоСтарту)»

    > Много ли восьмерочных перенумераторов на инфостарте?

    Если такая проблема, напишите свой. Я уверен, что он будет и лучше, и бесплатнее 🙂

    Сам я не смогу, я — «тупой» клюшечник.

    Reply ↓
  20. poppy

    (23)

    > А, во-вторых, мало того, что не заставляют, а не просят даже.

    Отвечу твоими же словами:

    А что? Товарищу Че можно, а другим нельзя? Где логика? 🙂

    > я — «тупой» клюшечник

    Слово «тупой» относится к тебе или к клюшке? Можешь не отвечть, это риторический вопрос… 😉

    Имхо тебе пора выкладывать свои творения. И не в раздел «Юмор» или «О жизни», но в серьезные разделы. Хотя бы и для клюшки…

    Reply ↓
  21. Altair777

    (24)

    > Отвечу твоими же словами:

    > А что? Товарищу Че можно, а другим нельзя? Где логика? 🙂

    Да товарищу Че многое можно! 🙂

    > Слово «тупой» относится к тебе или к клюшке? Можешь не отвечть, это риторический вопрос… 😉

    Это оскорбление? Тебя извиняет только то, что ты «женщина». Была бы ты, например, фиксиным, я бы мог не сдержаться

    А, вообше, для тупых… Это очередной камушек в огород того же фиксина 🙂

    > Имхо тебе пора выкладывать свои творения. И не в раздел «Юмор» или «О жизни», но в серьезные разделы. Хотя бы и для клюшки…

    мда…. http://infostart.ru/profile/38667/projects/2609/

    Reply ↓
  22. poppy

    (25)

    > Да товарищу Че многое можно! 🙂

    На этом логика заканчивается?

    > Это оскорбление?

    Нет. Извини, если обидила. Я не хотела 🙁

    > мда…. http://infostart.ru/profile/38667/projects/2609/

    Это все на что ты способен? Мне кажется твой потенциал выше…

    Reply ↓
  23. poppy

    (9)

    > То бишь если номер такой уже есть, он присвоит следующий номер.

    > Т.е. да, перенумерация произойдет, но порядок элементов по кодам

    > непредсказуем.

    Где ты это увидел в коде? Сможешь сгенерить набор исходных данных, при которых такое произойдет?

    Reply ↓
  24. Altair777

    (26) > На этом логика заканчивается?

    Ага 🙂

    Какая тут еще может быть логика? Лично я не просил бы 100 руб за подобное.

    Тем более, у кого? Не у конечных покупателей, а у таких же программеров. Бухшам перенумератор не нужен имхо.

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

    Хотя, может кризис слегка изменит мои взгляды 🙂

    > Нет. Извини, если обидила. Я не хотела 🙁

    Извинения приняты. Я, пожалуй, тоже погорячился.

    > Это все на что ты способен? Мне кажется твой потенциал выше…

    Пасиба! 🙂

    Нет, не всё. В моих конфах за 10 лет программирования в 1С накопилось несколько хорощих вещей, но они писались для себя.

    Т.е. не документированы, красиво не раскрашены, без рефакторинга 🙂

    Поэтому я не выложу их или вообще, или пока не доведу до ума.

    Не могу я каждый день по гениальному творению создавать 😉

    Reply ↓
  25. poppy

    (28)

    > Лично я не просил бы 100 руб за подобное.

    Не хочешь, не проси. Что теперь, тебе минус за это ставить?

    > Да и, вообще, сумма какая-то несолидная.

    От чего весь сыр-бор? Сумма несолидная? Ты считаешь, что автор выложил обработку чтобы озолотиться?

    Обрати внимание, что полнофункциональная обработка доступна для свободного скачивания. Может, наличие ценника делает ее менее функциональной?

    Reply ↓
  26. poppy

    (30) по (27)

    Ответ неверный, садись два!

    Смотри сюда:

    Код
    Пока Выборка.Следующий() Цикл
          
       ТекущийКод = ТекущийНомер;
       Если КодТекстовый Тогда
          // ...
          ТекущийКод = Префикс + Лев(Нули, ДлинаНомера - СтрДлина(Префикс + ТекущийКод)) + ТекущийКод;
       КонецЕсли;
          
       // ...
       Объект = Выборка.Ссылка.ПолучитьОбъект();
       Объект.Код = ТекущийКод;
       Объект.Записать();
             
       ТекущийНомер = ТекущийНомер + 1;
    КонецЦикла;
    

    Показать полностью

    Из кода убрано все лишнее, чтоб не мешало.

    Очередному элементу присваивается очередной код из переменной ТекущийКод. В приведенном тобой коде ни выборка, ни указанная переменная не меняются.

    О какой непредсказуемости идет речь?

    Reply ↓
  27. Altair777

    to poppy, ярой защитнице платных перенумераторов

    (16)-(30)

    Вообще, как то странно. Автор минусует блог в разделе «О жизни», в котором говорится что работа профессионала достойна и должна соответственно оплачиваться. А сам денег просит. Где логика? 🙂

    P.S. Почему я, например, не прошу за мою разработку? Потому что я выложил ее не для того, что бы обогатиться.

    А просто, как говорится «Людей посмотреть, себя показать» 😉

    Reply ↓
  28. Ёпрст

    Мы не настолько богаты, чтоб покупать дешевые вещи …

    :))

    Ценник на падобные обработки должен быть на 2 порядка выше, данные всё же изменяет..

    Reply ↓
  29. Altair777

    Что интересно, и фиксин тоже заминусовал «это»

    Раз уж две такие противоположности, как я и он, сошлись во мнениях, значит «оно» того стоит.

    В смысле, минусов 🙂

    Reply ↓
  30. Душелов

    (37) Мне тоже писал 🙂

    Reply ↓
  31. Altair777

    (38) он всем писал 🙂 Я, может, когда-нибудь издам трехтомник «Моя переписка с фиксиным» :-))

    (36) кстати, отвикипедяй слово «флуд» и ты поймешь, что ты нуп. У меня сообщений, конечно, много, но они не бессмысленные

    Reply ↓
  32. Altair777

    (37) А, вообще, это не совсем этично обнародовать личную переписку

    Помнишь фильм «Служебный роман»?

    Reply ↓
  33. Altair777

    (0) [b]Шедевр[/i] в области перенумерации справочников!

    Где-то это я уже видел :-)))

    http://infostart.ru/profile/8089

    Reply ↓
  34. Altair777

    (36) Минус за то, что автор комментария не может понять основные термины интернет-общения и за флейм.

    P.S. http://infostart.ru/projects/2609/#comm19

    Reply ↓
  35. poppy

    (40)

    Судя по (38) в (37) не личная переписка, но спам.

    Мне fixin в личной переписке предложил подраться в онлайне. Посоветуйте, принять бой или продинамить? 😉

    Reply ↓
  36. CheBurator

    я уже не могу.. я ща закричу!!!!

    КОГДА УЖЕ В СНЕГОВИКЕ НАЧНУТ ДЕЛАТ ЧТО_ТО ОТЛИЧАЮЩЕЕСЯ ОТ КЛЮШЕК???

    Reply ↓
  37. poppy

    (32)

    Во я дурочка-то. Я сразу и не сообразила отчего ты так на него взъелся.

    Беру свои слова (16)…(29) обратно. Приношу всем извинения за разрушение их мозга.

    А Лохнесс, действительно лох. Не тому минус влупил… 🙂

    Reply ↓
  38. O-Planet

    Нахожу комменты poppy в этом топике оч странными. Poppy перса продала? Или это с чем другим связано?

    Reply ↓
  39. Altair777

    (43) > Мне fixin в личной переписке предложил подраться в онлайне. Посоветуйте, принять бой или продинамить? 😉

    фиксин даже в этом не разбирается 🙂

    Это называется «выставить фонарь», а «крутить динамо» — несколько другое

    Reply ↓
  40. Vitek

    (43)>Посоветуйте, принять бой или продинамить? 😉

    Это прям как Рэнди против Картмена в какой то из серий 12го сезона Саус Парка :))

    Сценарий один в один.

    Reply ↓
  41. BabySG

    (44) СКД открой и покрути… За одно это уже можно на 8-ку срочно переходить…

    Reply ↓
  42. Vitek

    (49)Ваше утверждение очень сомнительно, ну ооочень 🙂

    Reply ↓
  43. lals

    (15) Не знаю может это и смешно но они нужны — перенумераторы. У меня юзер влупил 999999 номер случайно и пошли добавлять к последнему или даже минуса забивают и что их потом руками править, искать самый старший нормальный и т д .

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

    так что Автору всетаки минус а то действительно попадет кому не надо такой страшный инструмент

    Reply ↓
  44. wizard_nord

    Уважаемые, на ИТСе за апрель как раз есть замечательный и перенумератор и удалятель и позволяющий выбирать всё и вся (УниверсальныеПодборИОбработкаОбъектов.epf). карое умовый. предлагаемый тут не пригодился — мааалый функционал. но насквозь, надеюсь, адекватно нумерует.

    а вот у мну вопрос — как мне нумерацию справочника ФизЛиц в ЗУПе 8.1 подточить… если ли отчёт позволяющий подкрутить до нужного нумератор ? ??? если кто в курсе — письните в личку плиз.

    Reply ↓
  45. correct_coding

    не понимаю почему тут столько плюсов, у меня в справочнике около 70000 элементов, сбилась нумерация, запустил обработку, она дошла до 60391, наткнулась как раз на на тот момент, где косяк, т.е. для чего я ее собственно и скачал, и выдала «Закончилась номерная емкость!». Префикса не ставил, начальный номер — 1, длина номера — 5. Дальнейшие детали даже приводить не хочется, обработка — лажа.

    Reply ↓
  46. correct_coding

    + (53) и еще в пункте о программе тупо плюсует. понятно теперь откуда плюсы взялись.

    Reply ↓

Leave a Comment

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