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




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

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 не будет опубликован. Обязательные поля помечены *