Акт выполненных работ (оказанных услуг)




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

    Скачал, попробовал для УСН на договоры аренды подключить Вашу печ.форму, но не получилось. Сообщение об ошибке:

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

    Ошибка при вызове метода контекста (Выполнить): {(75, 2)}: Таблица не найдена «Документ.РеализацияТоваровУслуг.АгентскиеУслуги»

    <<?>>Документ.РеализацияТоваровУслуг.АгентскиеУслуги КАК РеализацияТоваровУслуг

    Reply
  2. heavymetal

    Это печатная форма для Бухгалтерии предприятия редакции 2.0, а не для 1.6

    Reply
  3. heavymetal

    Выложил и для 1.6

    Reply
  4. DamTumaka

    Спасибо, теперь порядок!

    Если нетрудно — добавьте для исполнителя указание должности.

    Reply
  5. bearcat

    скачала

    не смогла прицепить в 1С бух 8.1.15.14 ред 1.6.25.6

    пишет, что это не обработка или не подходит к данной конфигурации

    вот так

    Reply
  6. heavymetal

    Теперь добавил должности для формы 1.6, при этом меняется немного подвал, если не будет устраивать, пишите свои предложения. Я делал для того, чтобы длинные должности более менее помещались. А если эта функция не включена, то у формы прежний вид

    + форму 1.6 добавил для платформы 8.1

    Для формы 2.0 добавлю позже

    Reply
  7. bearcat

    скачала сегодня еще раз

    Что не так делаю?

    1. сервис >дополнительные внешние обработки>добавить>выбираю скачанную обработку>открыть

    и снова

    выбранный файл не является внешней обработкой. Либо данная обработка не предназначена для запуска в этой конфигурации.

    еще служебное сообщение

    {Справочник.ВнешниеОбработки.Форма.ФормаЭлемента(189)}: Ошибка при вызове метода контекста (Создать): Ошибка загрузки документа.

    Внешняя обработка не может быть прочитана текущей версией программы.

    пробую выбрать допонительные внешние печатные формы

    тот же резултьтат

    не работает ваш акт

    Reply
  8. heavymetal

    Какой файл качаете? Там их три, два из них для 8.2, а один для 8.1. Там все подписано

    Reply
  9. bearcat

    (8) виновата… недосмотрела… скачивала по основной картинке, т.е. платформу 2

    спасибо за совет..

    в благодарность , мож быть кому-то будет полезно:

    1. скачать файл 8.1,

    2. загрузить обработку в дополнитеоьные внешние печатные формы,

    3. добавить ПРЕДСТАВЛЕНИЕ (выбрать реализацию товаров работ услуг),

    4. дать наименование кнопке, например, АКТ УСЛУГ ИНФОСТАРТ,

    5. открыть любой акт в журнале Реализация, нажимаете на печать , видите наименование АКТ УСЛУГ ИНФОСТАРТ, распечатываете

    Reply
  10. bearcat

    (8) можете еще добавить ИНН и КПП контрагентам по аналогии как в ТОРГ-12 ?

    потому что, например, в СПб есть пять фирм с наименованем ОПТИМА

    Reply
  11. heavymetal

    (10) Добавил ИНН и КПП к контрагентам. (6) В форме 2.0 сделал вывод подписей с должностями

    Reply
  12. bearcat

    (11) здорово!!!

    молодец!!!

    Reply
  13. bearcat

    (12)

    поставила плюс, но почему-то не вижу, чтобы он был учтен, мож быть он учитывается не сразу?

    сделала, чтобы в акте были указаны должности, все получилось!

    Параметры обработки<Задать параметры>

    ИМЯ «ДОЛЖНОСТИ»

    значение ИСТИНА

    чтоб еще попросить? 😉

    Reply
  14. heavymetal

    (13) Есть такое здесь глюк, я обновил Кэш, теперь плюс есть. Если что придумаете, пишите, я намерен сделать суперский акт выполненых работ, чтоб всех устраивал и ни у кого вопросов не возникало

    Reply
  15. salve-salve

    Я ещё в акте, под строкой <В том числе НДС> вывожу отдельное поля, для «непонятливых» — Всего к оплате

    Ибо были случаи, когда оплачивали только строку итого =)

    Reply
  16. heavymetal

    (15) Интересно. Сделаю такое же, спасибо. У меня просто без НДС и обычно счет на оплату выписываю, я и не задумывался даже

    Reply
  17. heavymetal

    Добавил акт для Комплексной автоматизации 1.1 + для нее сделал еще и возможность подключения к Поступлению товаров и услуг для печати акта за поставщика

    Reply
  18. bearcat

    (17) если можно, добавьте возможность пользоваться данной обработкой

    1. для УТ для распечатки акта из «Реализации»

    так как менеджеры создают акты именно в 1С УТ и мне приходится за них все переделывать в 1С БП, т.к. они ж делают типовой в 1С. А для «Реализации».

    В 1С БП Ваша обработка ПРОСТО ОЧЕНЬ ЗАМЕЧАТЕЛЬНАЯ , НЕ СРАВНИТЬ с типовой в 1С.

    2. для БП 1.6 возможность подключения к «поступлению товаров и услуг» для печати акта за поставщика.

    пока что выдает сообщение:

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

    Преобразование значения к типу Булево не может быть выполнено»

    Reply
  19. RayCon

    (14)

    >Если что придумаете, пишите,

    Вообще-то, всё уже давно придумано. 🙂

    >я намерен сделать суперский акт выполненых работ,

    >чтоб всех устраивал и ни у кого вопросов не возникало

    Для этого нужна ещё преамбула, в которой указывается не только ФИО и должности подписантов, но и основания их полномочий. Если с самим текстом проблем у тебя не будет, то реквизита «Основание полномочий» в конфигурациях 1С нет.

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

    И вот ещё что… Ты бы разместил нормальные скриншоты, а то с замазываниями — как-то не комильфо. Уж больно неряшливый вид получается, который никак не соответствует «суперскому» реноме. 🙁

    (15) +1

    Это существенное замечание. Вот только по уму надо бы писать не «Всего к оплате», а «Всего к оплате, вкл. НДС». Кстати, в тексте суммы прописью НДС тоже надо обязательно указать.

    Reply
  20. СержТ

    > если не указан — «Без договора»

    А можно не «Без договора» а наименование договора из поля «Наименование» договора

    Reply
  21. Petrel
    bearcat пишет:

    2. для БП 1.6 возможность подключения к «поступлению товаров и услуг» для печати акта за поставщика.

    пока что выдает сообщение:

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

    Преобразование значения к типу Булево не может быть выполнено»

    Аналогично, но для 2.0 — выдает такую же ошибку!

    Reply
  22. KomarovaV

    Очень нужно подключение к «поступлению товаров и услуг» для БП 2,0, чтобы можно было распечатать акт выполненных работ за поставщика.

    Reply
  23. lazy sea

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

    Reply
  24. scraper79

    Как изменить шапку документа, т.е. название. Что бы было: «Акт оказанных услуг» вместо «Акт выполненных работ (оказанных услуг)» г. «

    Reply
  25. pantera190

    спасибо!!

    Reply
  26. and-dex

    При подключении к 1С 8.2 КА выдает ошибку «»Не удалось сформировать внешнюю печатную форму! Преобразование значения к типу Булево не может быть выполнено», подключал к документы «Поступление товаров и услуг». Подскажите, куда копать?!?!?

    Reply
  27. nshrek2

    Цитата

    bearcat пишет:

    2. для БП 1.6 возможность подключения к «поступлению товаров и услуг» для печати акта за поставщика.

    пока что выдает сообщение:

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

    Преобразование значения к типу Булево не может быть выполнено»

    Аналогично, но для 2.0 — выдает такую же ошибку!

    форма нужная, но видимо придется допилить

    Reply
  28. itt

    очень нужная форма

    Reply
  29. lady_lace@mail.ru

    Спасибо за акт, было бы замечательно если бы поттягивались реквизиты заказчика и исполнителя ИНН КПП и адрес

    Reply
  30. Xeops

    Благодарю за проделанную работу. Помогло.

    Reply
  31. Evrosm

    минус пока не ставлю, но не работает, пишет:

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

    Метод объекта не обнаружен (ПолучитьЧастьЗапросаДляВыбораСодержания)


    /БП редакция 2.0 (2.0.29.10)/

    Скачал с значка не ту форму.

    Теперь всё работает. Отлично!

    Большой жирный плюс и человеческое спасибо!

    Reply
  32. koba-74

    Редакция БП 2.0 работает замечательно, только фамилия контрагента не выводится почему-то. Можно поправить? И выравнивание вправо в ячейках с фамилиями сделать.

    Reply
  33. heavymetal

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

    А на счет фамилии контрагента я не понял. Где не выводится? Если имеется в виду в подписях, то в описании публикации http://infostart.ru/public/73176/ все это описано:

    Подвал «Подписи» добавлена расшифровка подписей, у поставщика руководитель организации (из ответственных лиц), у контрагента из контактов (основное контактное лицо);

    Добавлена возможность вывода должностей в подписях, для включения этой возможности в поле дополнительных параметрах (при подключении печ.формы) добавить параметр с именем «Должности» и булевым значением Истина/Да. При этом меняется подвал формы, сделал это для того, чтобы «длинные» должности более менее помещались, если есть другие предложения, пишите в комментарий.
    Reply
  34. нинас

    Попробую прицепить в КА.

    Reply
  35. heavymetal

    (34) нинас, только самое главное скачайте правильный файл

    Reply
  36. brrart

    +1

    спасибо!!! но всёж немного переделал под себя

    Reply
  37. mikhailovaew

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

    Reply
  38. Котяня

    Спасибо, пригодилась.

    Reply
  39. kivit

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

    Reply
  40. heavymetal

    (39) kivit, логотип, на сколько я помню, предусмотрен только в форме для БП 2.0 и сработает только на файловой базе, а настраивается очень просто:

    1. В каталог информационной базы копируете файл изображения логотипа (рекомендую PNG или JPG).

    2. В дополнительных параметрах печатной формы указываете новый параметр «Логотип» с типом строка, а значении имя файла изображения (или путь к нему относительно каталога информационной базы).

    Если серверный вариант, то нужно немного переправить саму печатную форму. Если нужно, можете выслать изображение логотипа, я Вам сделаю. Делать универсальное решение, уже не вижу смысла, БП 2.0 доживает свои дни.

    Reply
  41. kivit

    Спасибо, изменил печатную форму.

    Reply

Leave a Comment

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