Валовая прибыль с учетом затрат. Для УТ и УПП




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

32 Comments

  1. Geza

    Если не ошибаюсь ошибка в запросе:

    В первой таблице вложенного запроса в поле характеристика указана номенклатура.

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

    Reply
  2. z-alexey

    Geza, спасибо, действительно вместо характеристики выводилась номенклатура. Исправленную версию закачал.

    Reply
  3. am_i_evil

    ну и как это посмотреть? код закрыт, по дате ограничение. одни сплошные всплывающие окна а результата ноль.

    Reply
  4. z-alexey

    am_i_evil Пожалуйста — тестируйте. Разработки обновлены. Период действия расширен.

    Также выложен новый отчет, который работает в новой редакции Управление торговлей 10.3 под 1С:Предприятие 8.1

    Для старых редакций, но на платформе 8.1 — использовать версию 2.2, предварительно сконвертировав ее под платформу 8.1.

    Reply
  5. zabaluev

    Обновите отчет. Не могу протестировать, демо период закончился.

    Reply
  6. v044771

    Почему-то в колонке «Чистая прибыль» указываются данные только, в том случае если была затрата, а если нет то пусто, хотя валовая прибуль присутствует.

    Reply
  7. z-alexey

    (6) Вроде все выводится. Проверяйте.

    Reply
  8. DUFI_man

    Не открывается в УТ 8,1

    Reply
  9. z-alexey

    (8) А какая ошибка? Какая редакция УТ 10.2 или 10.3 ?

    Reply
  10. so-quest

    Не открывается в УТ 8.1 Редакция 10.3 Ругается на версию программы…

    Reply
  11. z-alexey

    (10) Вы скачали версию для 8.0. Скачивайте для верси 8.1

    http://infostart.ru/public/14500/files/

    Reply
  12. romashovr

    Скиньте на мыло, кому не сложно! romashovr@mail.ru

    Reply
  13. romashovr

    Для 8.1 скиньте, плиз, на romashovr@mail.ru. Заранее спасибо

    Reply
  14. EMelihoff

    Что-то у меня совсем не открывается, расширение .epf?

    Reply
  15. РазДва

    Спасибо работает

    Reply
  16. EugeneR1c

    Спасибо, на УТ 11 пока переходить не собираемся. Так что будем использовать.

    Reply
  17. vitekryazan

    спасибо, очень помогло

    Reply
  18. wwizard

    Ну вот как всегда, зарабатываешь балы. мучаешься, ищешь то что тебе нужно. Находишь Тему где написано что отчет под УТ. качаешь, и вот на тебе:

    {ВнешняяОбработка.ВаловаяПрибыльСУчетомЗатрат.МодульОбъекта}: Переменная не определена (глТекущийПользователь)

    {ВнешняяОбработка.ВаловаяПрибыльСУчетомЗатрат.МодульОбъекта}: Процедура или функция с указанным именем не определена (ЗаполнитьПредставленияПолей)

    {ВнешняяОбработка.ВаловаяПрибыльСУчетомЗатрат.МодульОбъекта}: Процедура или функция с указанным именем не определена (ОчиститьДополнительныеПоляПостроителя)

    {ВнешняяОбработка.ВаловаяПрибыльСУчетомЗатрат.МодульОбъекта}: Процедура или функция с указанным именем не определена (ЗаполнитьОтбор)

    {ВнешняяОбработка.ВаловаяПрибыльСУчетомЗатрат.МодульОбъекта}: Процедура или функция с указанным именем не определена (ЗначениеНеЗаполнено)

    {ВнешняяОбработка.ВаловаяПрибыльСУчетомЗатрат.МодульОбъекта}: Процедура или функция с указанным именем не определена (ПолучитьЗначениеПоУмолчанию)

    Reply
  19. z-alexey

    (23) Какая версия конфигурации? Вверху указано, что для 10.3

    Reply
  20. unoDosTres

    почему автор сделал ограничил дату аж 2009 годом, ну хоть бы январем 12ого ограничился )

    Reply
  21. darshaka

    Комплексная 1.1.18.1

    {ВнешняяОбработка.ВаловаяПрибыльСУчетомЗатрат.МодульОбъекта}: Переменная не определена (глТекущийПользователь)

    {ВнешняяОбработка.ВаловаяПрибыльСУчетомЗатрат.МодульОбъекта}: Процедура или функция с указанным именем не определена (ЗаполнитьПредставленияПолей)

    {ВнешняяОбработка.ВаловаяПрибыльСУчетомЗатрат.МодульОбъекта}: Процедура или функция с указанным именем не определена (ОчиститьДополнительныеПоляПостроителя)

    {ВнешняяОбработка.ВаловаяПрибыльСУчетомЗатрат.МодульОбъекта}: Процедура или функция с указанным именем не определена (ЗаполнитьОтбор)

    {ВнешняяОбработка.ВаловаяПрибыльСУчетомЗатрат.МодульОбъекта}: Процедура или функция с указанным именем не определена (ЗначениеНеЗаполнено)

    {ВнешняяОбработка.ВаловаяПрибыльСУчетомЗатрат.МодульОбъекта}: Процедура или функция с указанным именем не определена (ПолучитьЗначениеПоУмолчанию)

    Reply
  22. z-alexey

    (26) Отчет только для для 1С:Управление торговлей 10.3 под платформу 8.0 и 8.1.

    Reply
  23. v.a.ryag

    на УТ 10.3 работающей на платформе 8.2 в режиме совместимости будет работать?

    Reply
  24. v.a.ryag

    дауж, мало того что ограничение по периоду стоит на 2009г., так ещё и код закрыт.. что за меркантильность необоснованная?

    Reply
  25. z-alexey

    (28) (29) совсем забыл про эту обработку и не поэтому срок ограничен 2009 г. постараюсь в ближайшее время выложить ее с обновленным сроком ограничения.

    Reply
  26. Boudybuilder

    Мда…

    Reply
  27. LegO

    Можете пояснить, откуда вы собираете затраты по Реализациям?

    Reply
  28. z-alexey

    (32) LegO, из регистра «Затраты», которые привязаны к заказу покупателя. При этом реализация должна быть привязана к этому же заказу.

    Reply
  29. wwizard

    Скачал, УТ 10.3 — Не работает. Может потому что все затраты я делаю — прочими затратами, или потому что на дворе 2014 год?

    Reply
  30. Umka05

    Добрый день , скажите а по документу поступления тоже номенклатура выходит ? Или только по реализациям и списаниям ?

    Reply
  31. ottys@mail.ru

    Друзья, у меня «Управление торговлей», редакция 10.3 (10.3.18.4). Очень нужна эта доработка, но у меня нет возможности купить пакет за 18 000. Возможно ли ее как то приобрести отдельно? ottys@mail.ru

    Reply
  32. z-alexey

    (36) ответил Вам на почту.

    Reply

Leave a Comment

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