Выбор программы 1С




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

21 Comments

  1. Rus_Tiger

    Слишком упрощенная схема (если мне нужно автоматизировать бухучет и производство, то мне нужно «1С:бухня» и «1С:ERP»???) и кстати не точноя. Там где «Пользователи» (1 или более) на схеме — это не пользователи, а организации (юридические лица).

    А количество пользователей для той же 1С:Бухни для базовой версии может быть и 3 и 5 и более и вполне комфортно будет чувствовать себя файловая база, если это одно юр.лицо.

    Так что скорее данная статья искажает действительность, а не проливает свет.

    Reply
  2. maXon777

    Комплексную часто выбирают для единого учета в одной базе без обменов (сейчас меньше кстати, но раньше это было очень популярно)

    Reply
  3. Octopus

    (2) На моей памяти ее часто выбирали неумелые внедренцы, потому как не могли спрогнозировать, что понадобится клиенту. И ставили ее, обосновывая, что там есть все, что только может вам понадобиться. Ну как следствие, 95% функционала не использовалась

    Reply
  4. SPID

    Не учтены разделение некоторых программных продуктов на Проф и Корп. Отсутствуют направления Бюджетирование, Контроллинг, МСФО, отраслевые стандарты…

    Reply
  5. TMV

    (0) Т.е. Розница в принципе не нужный продукт?

    Reply
  6. lefthander

    (1)С базовой есть тонкость — один юзер одновременно, так что даже если есть 50 юзеров то работать они будут по очереди. Базовая вообще не для коллективной работы, это если один бух ведет некоторое количество баз, то базовая самое то.

    Reply
  7. lefthander

    (5)Для бухгалтерской, расчетной и закупочной деятельности, да не нужный. Из названия ясно — автоматизация розничной торговли, Из функционала — самого широкого профиля, торговать можно всем чем не запрещено законом.

    Reply
  8. lefthander

    (4)Статья позволяет сделать первый шаг в направлении поиска программы 1С для начинающего бизнеса. Это еще один взгляд на то многообразие 1С.

    Reply
  9. TMV

    (7)Я к тому, что на представленной схеме ей места не нашлось. Для чего она нужна действительно понятно из названия, но почему она не упомянута?

    Reply
  10. lefthander

    (9)Потому что наверно автор не предусмотрел такую деятельность как розничная торговля.

    Reply
  11. maXon777

    (3) В моем опыте такого не было. Обычно заказчик сам настаивал на комплексной, потому что намучались с обменами. Ну либо бухгалтера ведут первичку и учет более-менее «белый» и им не хочется заморачиваться с двумя базами

    Reply
  12. starjevschik

    Банальный подход продавца. Кто потом будет клиенту объяснять, где в УТ 11 себестоимость и почему там полная фигня и что делать? Лишь бы впарить что подороже.

    Reply
  13. capitan

    мёртвая царевна семь богатырей

    то ли саша пушкин то ли саша грей.


    Надо голых теток на заставку, тогда выбирать программу 1С будет веселее.

    Reply
  14. FesenkoA

    Не знаю многие конфигурации РФ, но для автоматизации торговли, зарплаты и Б.У. можно использовать УТП

    Reply
  15. emilliya

    Я бы Зарплату, Кадры вела бы в отдельной конфигурации при любом раскладе.

    Там много прибамбасов. тем более что видела в одном месте двойное решение (белоечерное) в одной БД одной зарплатной конфиграции.

    Reply
  16. emilliya

    Сегодня в Зарплате одно учреждение, завтра оно распадается на несколько или наоборот.

    По-моему лучше это все вести отдельно от всего остального

    Reply
  17. pm74

    что автоматизируем -> Производство -> КА, УНФ, ЕРП -> пользователи -> 1 шт ( ? wtf), много шт.

    Reply
  18. mkostya

    АВАТАМАТИЗИРУЕМ ?

    Слайд на видео 7:20

    http://prntscr.com/m8ry8g

    Reply
  19. lemma

    Базовые ERP и КА — это что-то новое)

    Reply
  20. Online-Ufa

    БГУ и ЗГУ тоже есть базовые версии, но ни на схеме ни в тексте этого почему-то нет

    Reply
  21. Azimut99

    (10) Автор как раз предусмотрел в тексте, но в схеме не указал.

    «Если Вы занимаетесь только розничной торговлей, то отличным вариантом будет «1С:Розница». Решение «заточено» под особенности розничной торговли: от рабочего места кассира до управляющего магазином.»

    Кроме того, нелишним бы было упомянуть про совместимые решения Розницы (Аптека, Магазин одежды и обуви, Магазин обуви и прочее). Иногда это удобнее, чем типовая Розница из-за наличия расширенной аналитики по номенклатуре.

    Reply

Leave a Comment

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