"Учет серийных номеров" для типовой конфигурации УТ — доработанная версия




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

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

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

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

27 Comments

  1. dim0n_la

    Упрощённый ввод новых серийных номеров. Типовая форма ввода доработана поиском по серийным номерам.

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

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

    Изменения типовой конфигурации минимальны.

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

    Reply
  2. Поручик

    (0) Если не секрет, это где нибудь применяется?

    Reply
  3. dim0n_la

    Интернет магазинам, торгующим электроникой вполне подходит.

    Reply
  4. dynamite

    подходит ли для 1с УТ 10.3?

    Reply
  5. dynamite
    Reply
  6. dim0n_la

    Да, при обновлении не нужно обновлять типовые документы. Они присутствуют в конфигурации «Учет серийных номеров» только для сохранения типизации реквизитов.

    А ошибка появилась из-за того, что обновился модуль объекта документа.

    Верните все назад, и повторите только уже типовые объекты не обновляйте.

    Reply
  7. dynamite

    Пожалуйста укажите что именно не надо обновлять а то я не профи в этих понятиях, Спасибо

    Reply
  8. dynamite

    Я ОБНОВИЛ ТАК КАК ВЫ СКАЗАЛИ НО ВЫДАЕТ ОШИБКУ ПРИ ПРОВЕДЕНИЕ ПОСТУПЛЕНИЕ ТОВАРОВ И УСЛУГ

    Ошибка при выполнении обработчика — ‘ОбработкаПроведения’

    по причине:

    {ОбщийМодуль.dmn_УчетСерийныхНомеров.Модуль(186)}: Поле объекта не обнаружено (dmn_УчетСерийныхНомеров)

    Reply
  9. dim0n_la

    Добавил краткое описание обновления в статью.

    (7) dynamite, прошу прощения за введение в заблуждение относительно процедуры обновления. Думаю скриншоты должны помочь.

    Reply
  10. dynamite

    Спасибо Димон, все настроил.

    Есть еще вопрос, а в отчетах нельзя найти кому продана… там показывают только остатки.

    Reply
  11. dynamite

    + (9) Если можно было сделать отчет типа ведомость по товарам на складах было бы супер, можно было бы найти всю историю товар… или подскажите как можно добавит в «отчет ведомость по товарам на складах» в отборах по серийному номеру

    Reply
  12. dim0n_la

    Да так и есть.

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

    Поэтому а отчете и не планировалась такая информация. Он показывает только наличие для сверки.

    Reply
  13. dynamite

    Спасибо за ответ (11)

    Еще один вопрос, когда оприходована несколько товаров по разным с серийниками при продаже получается можно смешать серийники и реализация проводится без проблем

    Пример; Делаю Поступления товаров: Ручка 3 шт под серийниками 1,2,3

    Карандаш 3шт под серийниками 5,6,7

    И проводим закрываем

    Делаю Реализацию товаров: Ручка 2шт под серийниками 6,7 (то что является серийником для Карандаша)

    И потом проводим закрываем ( И без проблем проводится)

    Получается что когда реализация проводится он не проверяет что серийник является ли серийником именно этой номенклатуры

    Reply
  14. dim0n_la

    (12) Для ввода серийных номеров используете поставленную с конфигурацией «Учет серийных номеров» обработку «Ввод серийных номеров.epf»? Если да, то эта обработка не должна была позволить вам «перепутать» товары и серийники между собой.

    Reply
  15. qwerty45

    Идея интересная. Скачал, но не могу самостоятельно переписать под УТ 10.3 на 8.2. Обновление не планируете?

    Reply
  16. fratriaArzgir

    А что представляет собой упрощенный ввод серийных номеров в данной обработке?

    Reply
  17. MAXXL

    Так эта обработка работает в УТ10.3 в 8.2 или нет? Еще вопрос — в списке для скачивания три файла, нужно качать их все или обработка и отчет есть внутри прилагаемой конфигурации?

    Reply
  18. Marina__

    А в УПП будет работать?

    Reply
  19. dim0n_la

    (18) umnica2, почему нет. Может. только смотря какая версия. Там в УПП и свои серийки есть. Так что эту обработку брать не обязательно. Просто в УТП все было сложно с ними

    Reply
  20. KillHunter

    проще самому накатать свою обработку!

    Reply
  21. dim0n_la

    Конечно проще! Накатывайте !

    Reply
  22. m.minchuk

    а будет ли работать с 1С Управление Торговым Предприятием для Украины? какой алгоритм работы? Сможет ли работать по схеме менеджер выписал реализацию, передал на склад, там выписали расходный ордер и заполнили серийные номера?

    Reply
  23. GrafB

    напрасно потратил старбакс, хорошо что только cf скачал. не указано для какой версии УТ, для новых это совсем не подходит. конечно виноват сам не посмотрел когда файл опубликован, но всё же комменты свежие более менее.

    Reply
  24. dim0n_la

    (23) GrafB, ну как же, все указано

    Платформа

    1C: Предприятие 8.1

    Конфигурация

    1С:Управление торговлей 8

    да разработка старая, и уже мало кому нужна

    Reply
  25. andpal
    Конфигурация

    1С:Управление торговлей 8

    По моему такой конфигурации не бывало.

    Есть: Управление торговлей, редакция 11.х или 1Управление торговлей, редакция 10.х

    Reply
  26. andpal
    Конфигурация

    1С:Управление торговлей 8

    По моему такой конфигурации не бывало.

    Есть: Управление торговлей, редакция 11.х или Управление торговлей, редакция 10.х

    Возможно в «Управлении торговлей для Украины» есть редакция 8?

    Reply
  27. micha26

    Интересно конечно — у меня к примеру такая вот ошибка выскакивает:

    РегистрНакопления.НДСАвансыПоДоговорамКомиссии: Ни один из документов не является регистратором для регистра…При чем тут регистр накопления? Регистратор я к нему конечно прикручу — но почему такая ошибка выскакивать стала…

    Reply

Leave a Comment

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