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




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

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 не будет опубликован. Обязательные поля помечены *