Доработка универсальной ОСВ 2.53




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

44 Comments

  1. Parazyte

    Однозначный плюс — во много раз превосходит стандартную по функционалу.

    Reply
  2. v_id

    Понравилась доработка.

    Жалко только что перепроводить можно только один документ, но я так понимаю тут дело в системных ограничениях, двойной клик на нескольких ячейках не возможен. Однако и так хорошо.

    Хотелось бы и дальше видеть развитие функционала этой нетленки. Спасибо вам и автору оригинала.

    Reply
  3. Свой

    (2) а какие возможности еще можно добавить и будут востребованы ?

    Reply
  4. v_id

    (3) Из первого что в голову приходит это фильтрация по отрицательным значениям.

    Reply
  5. Свой

    (4) близкое к данной хотелке (имеющееся в ОСВ) — настройка — развороты — нужный вид разворотов — сортировка

    таким образом можно будет вывести отрицательные остатки вначале/в конце выборки

    Reply
  6. Sasha81

    Автор молодец! Самая нужная обработка для бухгалтера по сути!

    Reply
  7. Olyunchik

    ++++!!! Только общий журнал не выводится :=(((

    Reply
  8. Olyunchik

    7. Все… извиняюсь… разобралась…

    Reply
  9. Olyunchik

    3. Было бы не плохо 10 счет раскрыть по местам хранения в денежном выражении… А обработка классная…

    Reply
  10. Сал

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

    Большое спасибо автору или авторам за столь профессионально выполненную работу, как с точки зрения идеи, так и ее воплощения.

    Reply
  11. v_id

    (3) в довесок к «Перепровести документ» можно добавить и «Отменить проведение»

    Reply
  12. v_id

    написал (11), а потом вспомнил доработку которая мне очень жизнь облегчала

    http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=3240

    думаю этот (или похожий) функционал можно реализовать и здесь при работе с документом

    Reply
  13. Свой

    (12) «отменить проведение» и «сделать непроведенным» — на мой взгляд достаточно опасно добавлять в оборотку, т.к. бухгалтер может по-невнимательности ошибочно выбрать этот пункт и потом долго не догадываться что же она удалила, даже если писать событие удаления в журнал регистрации, мало кто в журнал смотрит.

    Про Структура подчиненности (Дерево документов), изменение времени и ввод на основании подумаю

    Reply
  14. Свой

    (9) для исполнения озвученного желания нужно по субконто МестаХранения устанавливать признак ведения учета по сумме, это не к текущей обработке

    Reply
  15. v_id

    (13) из своей практики: этим гениальным отчетом пользуются тоже весьма не глупые люди 🙂

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

    Reply
  16. dance_dance

    Без исходной обработки ни я, ни мои коллеги уже не мыслим себе работы. Сделана суперпрофессионально и очень стильно во всех самых лучших смыслах! А за доработку — отдельное большое спасибо, полезно.

    Reply
  17. charm

    Супер обработка) скачивала как-то предыдущую редакцию, пользовалась — оч. нравилась, а потом то ли флешка умерла, то ли где-то потеряла эту обработку.. очень расстраивалась, и вот снова она со мной. очень полезная и удобная в работе. Автору большое спасибо!! несомненный плюс

    Reply
  18. Maestro.net

    Оссобая благоданость… РЕСПЕКТ… cool обработка!

    Reply
  19. Maestro.net

    И всётаки у меня не получилось открыть Общий журнал… «Свой» помоги… У меня 1С Бухгалтерий 7.7 (Украина)

    Reply
  20. Свой

    (19) переадресую твой вопрос коллегам-1С программистам-украинцам, т.к. не знаю вашей конфигурации.

    Reply
  21. Altair777

    (20) Тогда уберите в описании что это универсальная ОСВ.

    Она была раньше такой, до Вашего вмешательства.

    Я ее пробовал на типовых украинских конфах.

    Reply
  22. foris

    Автору-спасибо огромное! Два плюса.

    Reply
  23. antik69

    Удивительно красивая полезная и удобная обработка. Бухгалтерия в восторге. Большое спасибо.

    Reply
  24. Доня

    Да, журнал добавился, но к сожалению исчез многоуровень

    Reply
  25. Свой

    Доня, чтобы был многоуровень, нужно скачать остальные файлы исходного комплекта ОСВ2.5 (http://infostart.ru/projects/608/)

    и запускать мой файл ВМЕСТЕ с остальными файлами автора clappa

    Reply
  26. Svetla

    СУПЕР!!! ОГРОМНОЕ СПАСИБО. Всем бухгалтерам буду рекламировать.

    Reply
  27. 1Cworking

    Согласен с большинством отзывов, вещь хорошая и главная полезная.

    Reply
  28. KEVE

    Извините за разрыв во времени, но только по ссылке увидела. Интересная. Попозже постараюсь погонять. А пока спасибо и с празниками. Удачи

    Reply
  29. Dolly_EV

    давняя хотелка — как-нибудь «на лету» прикрутить фильтр по субконто.

    «На лету» — имею ввиду чтобы он, например, устанавливался в выпадающем меню при развороте (именно по тем субконто, по которым в данный момент возможен разворот)

    или на худой конец — возможность жестко задавать фильтр на форме

    Reply
  30. RayCon

    (3) У автора Clappa есть грешок — он наследует из стандартной поставки некорректное отображение развёрнутого сальдо, что приводит к невозможности выверки баланса по ОСВ. Судя по описанию, ты в этом направлении тоже ничего не делал. Было бы здорово, если бы тебе удалось побороть эту ошибку (точнее, целый ряд ошибок) развёрнутого сальдо. Если нужна дополнительная информация, могу рассказать, как именно можно это исправить.

    Reply
  31. erthia

    Отличная обработка!!! Часто пользуюсь этой ОСВ в 7-ке. И в ходе работы возник вопрос?

    Как можно настроить разворот, например по субконто Основные средства, чтобы выводилось не стандартное представление, а одновременно наименование с кодом а так же периодический реквизит. Конкретно — СчетЗатрат, это счет учета начисленной амортизации. По отдельности настраивается вывод или наименования с кодом, или счет затрат.

    Reply
  32. Cthulhu

    (30): собственно, развороты счетов настраиваются пользователем — так что вроде как бы мимо упрек.

    или ты о чем?

    Reply
  33. RayCon

    (32) Я вот о чём: Ошибки оборотно-сальдовой ведомости стандартной поставки 1С.

    Иными словами, настройки пользователя спасают только от части имеющихся некорректностей, но, к сожалению, не от всех. Это касается как версий 1С 7.7, так и версий 1С 8.

    Reply
  34. Cthulhu
    Reply
  35. RayCon

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

    Сделаю только единственное замечание, касающее вот этих слов:

    >не недостатки довольно стандартного отчета, но ограничения, налагаемые организацией плана счетов

    Именно план счетов и определяет структуру ОСВ, поэтому недоработки ОСВ — следствие недоработок плана счетов.

    P.S. Здесь продолжать общение в таком нелицеприятном тоне не намерен, но если есть желание пообщаться вежливо и предметно, то могу доказать свою правоту в приватном общении.

    Reply
  36. Cthulhu

    (35): Ваши (именно Ваши) «тезисы» разобраны по сути; понимаю, что не нравится — не трагедия.

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

    Ваши обвинения в «нелицеприятности» кроме как на испорченное кем-то до меня Ваше настроение или на воспаленное, простите, самолюбие списать не получается — в обоих случаях моей вины в том не видится и, соответственно, подразумеваемый упрек в невежливости и беспредметности — не принимается.

    Неясностей в Вашей позиции по упомянутым вопросам у меня на текущий момент нет, поэтому вряд ли воспользуюсь Вашим «приватным» приглашением.

    Удачи Вам.

    Reply
  37. iva-74

    Спасибо огромное !!!!!

    +++++++++++++++ однозначно

    и еще раз СПАСИБО !!!!!

    Reply
  38. Montecrizto

    Собственно возникла необходимость ОСВ по месяцам(отчет «вправо»), тут это прекрасно реализовано, однако у меня на некоторых счетах я добавлял еще уровни, и отображение групп, только элементов в настройке не работает :(. Еще не за лазил в обработку, решил написать тут. Попробую описать по лаконичней, Если количество уровней в справочниках отлично от стандартного (2 уровня..(Элемент,Группа)) отчет отображает не верно, а жаль инструмент действительно достойный.. молодцы ребята

    Reply
  39. Cthulhu

    (38): и все-таки непонятно — что, в каких обстоятельствах и КАК отображает, что такое «неверно» и как бы хотелось чтобы оно было..

    Reply
  40. leo072

    отлично

    Reply
  41. TrinitronOTV

    Очень хороший отчет, главное очень удобен при детализациях

    Reply
  42. pirat123457

    А как сделать в этом отчете сортировку по детализации субконто, необходимо вывести отчет атким образом чтобы сортировка была как в справочнике по папкам?!

    Reply
  43. Dimon_911s

    Спасибо автору! Очень нужная обработка

    Reply
  44. andru_dv

    Спасибо большое, очень пригодилась в работе.

    Reply

Leave a Comment

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