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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *