КОП 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='\

23 Comments

  1. logarifm

    Можно было и прикрепить 1CPP.dll какую использовал!

    лоСервис = СоздатьОбъект(«Сервис»);

    {Глобальный модуль(14)}: Неудачная попытка создания объекта (Сервис)

    Reply
  2. bsa1968

    Добавил в архив используемый в конфигурации 1Cpp.

    Reply
  3. JohnyDeath

    О, я с помощью этого же АктивИкса делал раскраску таблиц-мокселей в отчетах. А то доставали конкретно, то сделай таким цветом, то таким, а то верни всё как было…

    Reply
  4. logarifm

    Что за…. хотел поюзать, но как видишь!!!!

    лоСервис = СоздатьОбъект(«Сервис»);

    {Глобальный модуль(14)}: Неудачная попытка создания объекта (Сервис)

    Reply
  5. bsa1968

    Не тот билд 1С++ приложил. Исправлено, теперь пристегнут 1С++ v 2.0.3.1

    Reply
  6. bsa1968

    Добавил регистрацию ActiveX, используемого КОП, по запросу при старте 1С:Предприятия.

    Reply
  7. logarifm

    Неплохо! Респект за то, что хотелось возится над конфой!)

    Reply
  8. eazy123

    красиво, реально красиво!

    одно замечание: не у всех системный диск именно С: и не у всех Виндовс находится в папке C:Windows

    чтобы было более-менее универсально, предлагаю попробовать ФС.WindowsКаталог()

    например,

    Код
    Если ФС.СуществуетФайл(ФС.WindowsКаталог()+"\system32\VColorPicker.ocx")=1 Тогда
    

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

    Reply
  9. bsa1968

    По подсказке eazy123 добавил анализ местонахождения каталога Windows.

    Reply
  10. Всем добрый день. Прошу прощения за флуд. Но не как не могу найди документацию как установить компонент и примеры…

    Прошу Вас, киньте мне пример как установить данный компонент, и как использовать его в справочнике..

    Еще раз, прошу процения что пишу не по теме…

    PS. Мне срочно надо сделать чтобы выделять строки разными цветами в справочнике.

    Буду ждать ваших ответов на e-mail admin@te.spb.su

    (могут лешить меня работы — помогите плз!!!)

    Reply
  11. coch

    +1 по любому

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

    Reply
  12. bsa1968

    Класс открытый, любой может его использовать без всяких ограничений.

    Reply
  13. bsa1968

    Добавил поддержку 1С++ версии 2.5 (версия, в которой отсутствует FormEx). Для работы самого класса наличие FormEx не обязательно, но для работоспособности демо-конфигурации — необходимо! К конфигурации прилагается версия 1С++ 2.0.3.3 (вместе с FormEx).

    Reply
  14. Занес данный класс с примером использования в специальную конфигурацию с различными мощными и полезными классами 1С++

    http://www.1cpp.ru/forum/YaBB.pl?num=1169222935/80#80

    Reply
  15. Причем занес очень давно, с момента создания упомянутой конфигурации.

    Reply
  16. CheBurator

    опупеть!

    +1

    Reply
  17. glavbukh

    1.В 1:Бух 7.7 (ОСН и УСН) работает все, кроме Журнала Операций

    2.В ТиС 7.7. выделение работает только в нескольких журналах: Общем, СФ (выданных и полученных),Чеков ККМ, Ввода нач.остатков и Доверенностей. Моя ошибка или баг?

    Автору +1

    Reply
  18. bsa1968

    Для созданных ВРУЧНУЮ бухгалтерский операций включить раскраску не получиться (ИМХО), т.к. нет возможности ввести реквизит шапки для хранения в нем настройки цветового выделения. Для остальных документов цветовое выделение будет работать, если в документы введен реквизит хранения настройки цветового выделения и в журнал операций вставлена графа отображения этого реквизита.

    Reply
  19. glavbukh

    по п.1 — это понятно

    по п.2 — Непонятно:

    Модули Журнала Платежные Документы и Доверенностей в форме списка имееют одинаковый код:

    Перем СписокДействий;

    //добавляем функционал Цветности

    СписокДействий = СоздатьОбъект(«СписокЗначений»);

    СписокДействий.ДобавитьЗначение(«Структура подчиненности»);

    СписокДействий.ДобавитьЗначение(«Ввести на основании»)

    В Журнале Доверенностей все ОК, в Платежных Документах — не работает. Делал все аккуратно и не один раз.

    Reply
  20. bsa1968

    Не совсем понял что значит приведенный код:

    Код
    Перем СписокДействий;
    //добавляем функционал Цветности
    СписокДействий = СоздатьОбъект("СписокЗначений");
    СписокДействий.ДобавитьЗначение("Структура подчиненности");
    СписокДействий.ДобавитьЗначение("Ввести на основании")

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

    Если текст в модулях журналов один и тот же, тогда вопрос: в форме журнала Платежных документов была ли добавлена графа, содержащая цветовую настройку, если да, то какой по порядку?

    Обсуждение (ИМХО) уже выходит за рамки комментариев, поэтому предлагаю решать этот вопрос общением напрямую через ICQ или по почте. Результат при желании затем можно будет отразить в коментариях (если он будет полезен другим).

    Reply
  21. glavbukh

    Написал в личку.:-)

    Reply
  22. bsa1968

    Исправил «баг»: в случае если Идентификатор какого-либо журнала документов содержал слово «Документ», раскраска в таком журнале не работала.

    Reply
  23. glavbukh

    Вот теперь в ТиС все заработало )))

    Спасибо за оперативное исправление бага!

    Reply

Leave a Comment

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