Внешняя печатная форма для документа "Требование-накладная", М-11




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

54 Comments

  1. IamAlexy

    эм.. измененная типовая межотраслевая форма не перестает быть типовой и межотраслевой после изменения состава и содержимого таблицы?

    это всмысле вы проверяли — не несет ли каких последствий с точки зрения непринятия к учету данное изменение?

    а то возьмет бух, напечатает ящик этих накладных МХ а во время проверки ему заявят — «ой.. а форма то не та.. »

    ?

    Reply
  2. ChugaevArtem

    Полностью соответствует Типовой форме, за исключением подсчета суммы по колонке! =) Не переживайте!

    Reply
  3. ChugaevArtem

    в 7.7 большое количество людей пользуются подобной формой! Данная прихоть не моя, а заказчика (бухгалтера). При переходе с БП 7.7 на БП 8.1 они попросили сделать им все как было в 7.7, в т.ч. и данную форму!

    P.S.: Это еще что! Вот то, что им нужно в док. «Продажа товаров и услуг» при подборе выводить сумму, и то что они будут вводить сумму и количество, а цену считать как Сумма/количество! Вот это кажется перебор! =)

    Reply
  4. ChugaevArtem

    Прошу прощения, обнаружил несколько косячков! Так что выкладываю исправленную!

    Reply
  5. bearcat

    (1) Поскольку с 01.01.2009 организация учетной политикой должна утверждать всю свою первичку (п. 4 ПБУ 1/2008), при этом хоть по-прежнему все первичные учетные документы организации должны создаваться по унифицированным формам, приведенным в соответствующих альбомах, но

    законодательно разрешено для удобства размещения и обработки информации расширить (сузить) либо добавить строки и столбцы, включить дополнительные реквизиты и т.п. Эта возможность предусмотрена Порядком применения унифицированных форм первичной учетной документации, утвержденным постановлением Госкомстата России от 24.03.99 N 20.

    При этом все реквизиты утвержденных Госкомстатом России унифицированных форм первичных учетных документов остаются без изменения (включая код, номер формы, наименование документа). Удаление отдельных реквизитов из унифицированных форм не допускается.

    ВЫВОД: нужено утвердить в учетной политике именно такую форму М-11 с итоговой строкой, тогда не будет никаких претензий со стороны проверяющих. а если кто вдруг и предъявит претензию, то ему нужно напомнить про Постановление 20 , которое еще никто пока не отменил и про то, что строка ДОБАВЛЕНА и больше ничего не изменилось.

    Я ставлю плюс, т.к. действительно итог нужен.

    Reply
  6. ChugaevArtem

    (5) Полностью согласен с bearcat. Плюс за комент!

    Reply
  7. блондинка-программистка

    Все классно. Вот только вопрос. Чем моя не устроила?

    http://infostart.ru/projects/2052/

    Reply
  8. ChugaevArtem

    (7) Извини! Когда искал, то вводил «Требование-накладная М-11», и на твою разработку мне не указал! Молодца блондинка!

    Reply
  9. bearcat

    (7) просто раньше не нашла вашу обработку. Скачала сейчас, но открыть не смогла. По ссылке прошла, там такая же была проблема

    копирую

    vitaliy-79 22.04.2009 10:25:13

    не работает в 1.6.15.5

    19. блондинка-программистка 22.04.2009 10:36:41

    Нужно? Могу выложить уже исправленный.

    Общий модуль менялся кажеться при обновлении на 12-й релиз.

    _____________________

    Просьба написать при каких условиях работает ваша обработка.

    Я как обычно делала через Файл > открыть — никакой реакции.

    тогда через Сервис > дополнительные внешние обработки — нулевой результат

    Сервис > дополнительные внешние печатные формы — нулевой результат

    Сервис > дополнительные внешние обработки табличных частей — нулевой результат

    Мож быть у вас третий вариант? какой?

    Reply
  10. bearcat

    Артем, Ваша обработка также не запускается. Что не так? Остальные файлы epf, которые я скачала прекрасно запускаются способом Файл > открыть

    Reply
  11. ChugaevArtem

    (10) Приношу свои извенения, делал на 1.6.15.6… Скорее всего поэтому на 1.6.15.5 не запускается! =) Если нужна под 1.6.15.5, то могу сделать незамедлительно!

    Reply
  12. Glance

    А я из Подрядчик строительства запустила. Все работает. Спасибо.

    Reply
  13. lenaonly

    У нас УПП. Пишет:

    Не удалось сформировать внешнюю печатную форму!

    Поле объекта не обнаружено (СчетЗатрат)

    Reply
  14. ChugaevArtem

    (13) Версия УПП вашей?! Если нужна срочно, то пиши! =)

    Reply
  15. lenaonly

    1.2.22.3

    Не то чтобы срочно, но хотелось бы… 😳

    Reply
  16. ChugaevArtem

    (15) Скоро выложу… К УПП выходили обновления релизы: 1.2.22.4, 1.2.23.2, 1.2.24.1, 1.2.24.2. Советую обновить вашу базу, если не было никаких серьезных изменений! 😉

    Reply
  17. ChugaevArtem

    (15) Вот выложил данную форму для УПП!!! Ссылка Пользуйтесь!

    Reply
  18. lenaonly

    Спасибо! 🙂

    Reply
  19. ChugaevArtem

    (18) Незачто… Пользуйтесь! =)

    Reply
  20. volex

    Бухгалтерия предприятия, редакция 1.6 (1.6.9.4)

    Метод объекта не обнаружен (СформироватьЗапросПоТабличнойЧасти)

    Спасибо за форму, очень пригодилась =)

    Reply
  21. ChugaevArtem

    (20) Я делал на версии 1.6.15.6… с более поздними катит, но боюсь что в дальнейшем придется править…. =)

    Reply
  22. lenaonly

    А можно сделать, чтоб и кол-во подсчитывал (для УПП)? 😳

    Reply
  23. ChugaevArtem

    (22) а оно нада?! Там же единицы измерений могут быть разными, поэтому когда мы сложим штуки и кубометры, получится невесть что…. 😐

    Reply
  24. lenaonly

    У меня кладовщики проверяют по кол-ву единиц приход.

    Reply
  25. ChugaevArtem

    (22) Можно конечно обсчитать по каждой ЕИ и вывести ниже

    например: м3 — 23.5

    м2 — 12

    шт.- 25

    Это не проблема, но вот нужна ли вам такая форма?! Она конечно не противоречит законодательству, но ее нужно будет регистрировать на предприятии, если не ошибаюсь, то в учетной политике!

    Reply
  26. ChugaevArtem

    (24) 1кг + 1шт = ❓

    Reply
  27. lenaonly

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

    Reply
  28. ChugaevArtem

    (27) т.е. вам без разницы что с чем складывать?!

    Reply
  29. lenaonly

    ну да!

    Reply
  30. ChugaevArtem

    (29) Могу предложить вариант вывести сообщением количество, но могу и специально для вас сделать как по ЕИ суммы по количеству, так и общую сумму по количеству… 😉

    Reply
  31. lenaonly

    лучше общую

    Reply
  32. ChugaevArtem

    (31) Хорошо, сейчас к клиентам схожу и займусь вашей проблемкой! =) 8)

    Reply
  33. lenaonly

    Должна буду! 😉

    Reply
  34. ChugaevArtem

    (33) Выложил… вторым файлом. Сделал подсчет по обоим колонкам (Затребовано, отпущено). Пользуйтесь. Если что сами форму подредактируйте…. 😉

    Reply
  35. lenaonly

    «А можно сделать, чтоб и кол-во подсчитывал (для УПП)?»

    В УПП ругается на счет затрат! 🙁

    Reply
  36. ChugaevArtem

    (35) а поподробнее?! 😳

    Reply
  37. lenaonly

    Не удалось сформировать внешнюю печатную форму!

    Поле объекта не обнаружено (СчетЗатрат)

    см.комм.13 тоже самое!

    Reply
  38. ChugaevArtem

    (37) http://infostart.ru/public/58715/ выкладывал для УПП только без количества…

    Reply
  39. ChugaevArtem

    (38) http://infostart.ru/public/58715/ вот выкладывал для УПП

    Reply
  40. lenaonly

    Я ее скачивала! А с количеством?

    Reply
  41. ChugaevArtem

    (40) http://infostart.ru/public/58715/, вторым файлом выложил!

    Reply
  42. ChugaevArtem

    (40) Вы скачали?! Мне интересно просто работает ли она?! =) У меня вроде работала…. =)

    Reply
  43. lenaonly

    Под УПП не работает: Не удалось сформировать внешнюю печатную форму!

    Поле объекта не обнаружено (СчетЗатрат)

    Reply
  44. ChugaevArtem

    (43) Какая версия платформы?! Какую обработку скачали?! =( Эту http://infostart.ru/public/download.php?file=59978??????????

    Reply
  45. lenaonly

    Эту, но там итоги по сумме, а по кол-ву нет.

    Reply
  46. ChugaevArtem

    (45) у меня итоги по количеству выходят… Название файла то же самое, но содержимое нет….

    Reply
  47. lenaonly

    Скачала еще раз. УПП 1.2.22.3. Выдает ошибку. 😥

    Reply
  48. ChugaevArtem

    (47) Даж уже и незнаю… у меня та же самая УПП, все в порядке! =(

    Reply
  49. Доня

    (3) <в 7.7 большое количество людей пользуются подобной формой>

    Подскажите пжл., в какой кофиге 7.7 есть форма Требования с итоговой строй

    В Бух. 7.7 ее точно нет

    Reply
  50. den-prokof

    Большое спасибо, обработка при тестировании сработала нормально. Автору респект!

    Reply
  51. Sean1s

    >в 7.7 большое количество людей пользуются подобной формой! Данная прихоть не моя, а заказчика (бухгалтера). При переходе с БП 7.7 на БП 8.1 они попросили сделать им все как было в 7.7, в т.ч. и данную форму!

    У нас как раз такая же ситуация: переходим с 7.7 на 8.2. По крайней мере в у нас, в «допиленной» комплексной, эта форма используется. Т.ч думал придётся самому делать эту формочку и в комплексной 8.2, а она оказалась тут, и, причём, рабочая. Спасибо огромное!

    Reply
  52. SoulPower

    Спасибо большое, очень нужная вещь.

    Reply
  53. kingpin

    помогла, спасибо

    Reply
  54. Bolik13

    Спасибо

    Reply

Leave a Comment

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