Материальный отчет (МХ-20) Бухгалтерия 3.0 ОКУД 0335020 + вывод отчета в разрезе документов




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

41 Comments

  1. veqrin

    Спасибо!

    Reply
  2. starjevschik

    Обращаю пристальное внимание всех страждущих этого отчета, что у него неправильная форма. Возьмите бланк где-нибудь в Гаранте-Консультанте-Главбухе и убедитесь.

    Я вот не проверил, а поверил, теперь столько переделывать…

    Reply
  3. Sanya1984

    Я не писал, что это Унифицированная форма N МХ-20(http://www.consultant.ru/document/cons_doc_LAW_26072/?frame=23). Да отличается немного, да работает, скриншот есть. Делалась для клиента по его форме, скачивайте на своё усмотрение )

    Reply
  4. Petrm

    попробовал на БП 3.0.37.32 не подключается форма

    Reply
  5. Sanya1984

    Отчет подключается и работает в редакции 3.0.37.35 и выше. См. вложение. Возможно, при выборе раздела и нажатии на кнопку «Дополнительные отчеты» надо нажать внизу на кнопку «Настроить список» и добавить интересующие вас отчеты в правый список(«Выбранные команды»).

    Reply
  6. Petrm

    подключал на БП КОРП 3.0.37.32, скорей всего в этом ошибка…., есть возможность допилить отчет под данную конфигурацию?

    Reply
  7. Sanya1984

    (12) Petrm, скрин ошибки выложите

    Reply
  8. trular

    Спасибо,отчет сэкономил время.

    Reply
  9. paris

    А можно доработать эту форму , чтобы был выбор для заданного Контрагента ?

    Reply
  10. Sanya1984

    (15) paris, только у счета 10.07, есть субконто контрагент, вам для него?, потому что у остальных 10-ых счетов нет такого субконто и следовательно невозможно сформировать отчет по контрагенту. Уточните

    Reply
  11. egvv

    БП 3,0 релиз 3,0,44,200 — Переменная не определена: БухгалтерскиеотчетыВызовСервраПовтИсп.

    Reply
  12. Sanya1984

    (17) Исправил ошибку для БП 3.0.44.200 и выше, файл обновил

    Reply
  13. egvv

    (18) Александр, благодарю за оперативность, все заработало! Нам не хватает в этом отчете, дополнительно, простого реестра документов по движению, по приходу и по расходу, на основе которых был сделан отчет. Возможна модернизация отчета?

    Reply
  14. Sanya1984

    (19) Реестр сделан, смотрите скриншоты отчета

    Reply
  15. egvv

    Скачал, запустил (скрин отчета прикладываю), кнопка редактирование — реакции нет, в разрезе документов только список номенклатуры, скрин приложил. Непонятно может проблема в версии 44-46? завтра (сегодня) обновлюсь и еще раз проверю…

    Reply
  16. Sanya1984

    (21) Выслал исправленный отчет на почту.

    выложил исправление в Публикацию, спасибо за информацию по ошибкам.

    Reply
  17. egvv

    Александр, благодарю! Ваш отчет уже в работе! Допилить полностью под наши нужды пока не хватает знаний по скд, поэтому у нас пока «сборная солянка»: шапка для отчета из публикации Анастасии http://infostart.ru/public/264163/, тело отчета — Ваш отчет в «разрезе документов»(преимущества Вашей формы в том, что там только те позиции по которым было движение), и подвал — первичные документы (сверяем которые по отчету «Обороты счета»), Главное процесс рабочий…

    Александр, такой вопрос: в Вашем отчете в разрезе документов можно сделать группировку наоборот: сначала документы, потом номенклатура?

    Reply
  18. Sanya1984

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

    Reply
  19. egvv

    (24)Александр, нет слов чтобы выразить Вам слова благодарности. Скачал, запустил — заработало! Не удержался, полез в СКД, сравнил с 0,3, пощелкал мышкой чуток и получил тот самый вариант который хотели мои девчонки. Классная штука это СКД!

    Мой Вам, Александр, Респект и уважение за такое отношение к клиентам и коллегам!

    Reply
  20. Ludmilka

    Добрый день! Скачала «Материальный отчет MX-20 v0.3 для бухгалтерии 3.0.44 и выше» не открывает со счетом 10. только 41. Почему? у нас вся номенклатура на 10 счете. Как исправить? 1С:Предприятие 8.3 (8.3.8.2197) Бухгалтерия предприятия, редакция 3.0 (3.0.46.19)

    Reply
  21. Sanya1984

    (26) Добрый день, скиншот приложите, где выбор счета или ошибки, поможем если сможем

    Reply
  22. Sanya1984

    (26)У вас на 10 счетах есть субконто Склад?

    Reply
  23. Sanya1984

    (26) похоже что у вас нет субконто Склад на 10 счете, переделаю как будет возможность. В описании указано, что

    отчет работает со счетами 10, 41, 43, 003 и др., где есть субконто Номенлкатура и Склад;

    Reply
  24. Sanya1984

    (26) Переделал, можете повторно скачать версия 0.5

    Reply
  25. Ludmilka

    (30) Спасибо! По складам учет не ведется. Скачаю — попробую..

    Reply
  26. Ludmilka

    (30)Все равно не работает!

    Reply
  27. Sanya1984

    (32) так вы его не скачали, качайте версию 0.5 там должно работать. Редакция 0.4 работает только если на счете есть оба субконто «Склад» и «Номенклатура» читайте внимательно. В версии 0.5 достаточно только субконто «Номенклатура»

    Reply
  28. Ludmilka

    (33) Скачала очередной раз! Теперь v0,5, как вы сказали. Спасибо! Все работает! Вернёте sm за предыдущие не работающие у меня v0.3??

    Reply
  29. Sanya1984

    (34) К сожалению, не верну, так как там было в описании что отчет работает только со счетами где есть оба субконто «Номенклатура» и «Склад», я уже об этом писал выше.

    Reply
  30. Sanya1984

    (34) вы же мне не платите за время которое я трачу на доработку отчета, поймите меня правильно.

    Reply
  31. Ludmilka

    Да конечно. Просто я вам сразу писала, что скачала v0.3. И не нашла где там описание…

    Reply
  32. Lara77

    Добрый день!

    По МЦ 04 по работникам можно отбор сделать?

    А так хороший отчет.

    Reply
  33. MasterSoft_Prof

    Добрый день! Отбор по счету и организации обязателен?

    Reply
  34. Sanya1984

    Да, данные отборы обязательны

    Reply
  35. Jrets

    Добрый день! Отчет можно сформировать по нескольким счетам? Если можно, группировка есть по счету? Из скринов непонятно. Спасибо.

    Reply
  36. Sanya1984

    (41)Добрый день! Данный отчет можно только сформировать по группе счетов(например, если выбрать 41 счет, то тогда получим данные по 41.01, 41.02, 41.03 и др. счета, входящие в данную группу). Данные выводятся без учета группировок, т.е. сводно. Планирую доработать, чтобы формировалось по списку счетов. В др. публикации «Отчет о движении ТМЦ. Бухгалтерия 3.0» https://infostart.ru/public/582604/ можно формировать по списку счетов и с группировкой по счетам и др. группировкам.

    Reply
  37. user_andreevna

    Добрый день!

    На каком релизе была написана v0.5? И каким образом, откуда вычисляется учетная цена?

    Reply
  38. Sanya1984

    Написана на редакции 3.0.46, протестирована на редакции 3.0.67. сред. цена: если есть конеч. остаток, тогда: сумма конеч. остаток / кол-во конеч. остаток. , если кон. остатков нет, то берутся данные данные оборотов(сумма/количество), иначе — данные начальных остатков(сумма/количество)

    Reply
  39. user_andreevna

    (44) А сумма берется с НДС или без него?

    Reply
  40. Sanya1984

    (45)Сумма идет такая же, как в ОСВ, см. рисунок

    Reply
  41. user_andreevna

    (46)Спасибо!

    Reply

Leave a Comment

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