Журнал печати документов (для тип.кон. БухУч, УСН) Печать документов




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2018-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='\

28 Comments

  1. RailMen

    Я получил очень много писем с просьбами так или иначе доработать обработку «Управление печатью документов». В основном просили реализовать печать той или иной формы. В процессе доработки «УПД» мне пришла в голову идея а почему бы из таблицы отобранных документов не сделать журнал?! – Так родилась обработка «Универсальный журнал печати документов». Честно скажу: работать с 7.7 уже больше не хочется (какой-то каменный век). Поэтому почитаю что вы тут понапишите, чо нидь доработаю и приступлю к проектам 8.1!

    Reply
  2. Kruzo

    Хорошая идея. Вот и попробуй сделать в 8.1 Общий журнал документов с возможностью отбора как в 7.7

    Reply
  3. gutentag

    Обработка выдает ошибку в Поступлении товаров (бух.релиз 504):

    Если Док.РасчетныйСчет.Выбран() = 1 Тогда

    {…ЖУРНАЛПЕЧАТИДОКУМЕНТОВ.ERT(1983)}: Поле агрегатного объекта не обнаружено (РасчетныйСчет)

    Reply
  4. itcp

    Иван доброго дня. Спасибо за добавленные формы.

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

    С уважением.

    Reply
  5. akat65

    отбор по контрагенту — если этот элемент Док.Контрагент — ГРУППА

    не работает (а хочется).

    Reply
  6. RailMen

    Ув. gutentag !

    Действительно был грешок! 3)

    Все исправлено и работает!

    Прошу повторить испытание!

    Reply
  7. RailMen

    Ув. itcp!

    В новой версии добавился реквизит формы <Число копий> — см. картинку!

    Не забудь скачать новую версию!

    Товарищи! Все кто по делу сделает замечание или другую критику — справедливо получает плюс!

    Reply
  8. Арчибальд

    Весьма недурственно. Однако для опознания конфигурации, имхо, все же следовало бы пользоваться не краткой информацией, а функцией глИдентификаторКонфигурации().

    И Гранд-Сервис таки убрать 🙂

    Reply
  9. RailMen

    Ув. akat65 !

    В версии GyrnalPechatiDoc 160_504.3 (выложена 23.04.2009 в 12:00)

    реализован отбор по контрагенту «если этот элемент ГРУППА», за что ты получаешь заслуженный плюс (идея то твоя!).

    P.S. Арчибальд ты меня раскусил 🙂 !!! Буду дорабатывать…

    Reply
  10. Арчибальд

    (9) У меня челюсти из керамогранита 😉

    Reply
  11. brus84@rambler.ru

    Подскажите пожалуйста, как подключить печатные формы документов для УСН 7.7????? Заранее благодарна

    Reply
  12. ЛюблюТебя

    как в старой так и в новой вашей разработке не сделано следующее (в связи с этим документы печатаются с ошибками особенно счет-фактуры, результат = пользоваться обработкой нельзя или нужно каждый документ сидеть и редактировать)

    Отгрузка товаров, продукции

    1. Отпуск груза разрешил – хотелось бы чтобы автоматически вставала должность ген. Директор и соответственно ФИО директора

    2. даты отгрузки нету

    3. Если торг-12 печатается больше чем на одной странице, то на каждой странице желательно указывать номер и дату документа (например: накладная № 1 от 01.01.2009г.)

    Счет-фактура выданная

    1. Вместа данных грузоотправителя почему то указываются данные грузополучателя

    2. Если сч.ф. больше чем на одной странице, то на каждой странице должна быть шапка таблицы, номер страницы и номер и дата документа

    Поступление товаров

    1. Коды ОКПО почему то одинаковые (т.е. четыре одинаковых кода, когда должно быть два покупателя и два продавца)

    2. Грузополучатель и плательщик не подтягиваются банковские реквизиты.

    Reply
  13. gutentag

    Пожелание: включите пожалуйста печатную форму, типа «Акт на списание» для документов «Перемещение ТМЦ»(УСН-7.7) и «Перемещение материалов»(БУХ-7.7)

    Reply
  14. RailMen

    Ув.Виктория (11)! Печатные формы «подключить» к обработке никак подключить нельзя т.к. они «внутри нее вшиты» (видно в режиме конфигуратора). Просто напиши как gutentag (13) какие формы тебе нужны и для какой конфигурации!

    Тов. ЛюблюТебя! Есть, конечно, огрехи в обработке! Как только появиться свободная минутка посмотрю что та за косяк с «Отгрузка товаров, продукции» и и др. исправлю! Кстати какая у тебя конфигурация?!?!?!

    Reply
  15. ЛюблюТебя

    у меня Бухгалтерский учет,редакция 4.5, релиз 7.70.506

    Reply
  16. WhiteMan

    Обработка полезная. Если есть возможность добавить для УСН документ Перемещение МПЗ — цены бы ей не было.И замечена ошибка: при групповой печати документа Поступление МПЗ в УСН — начиная со второй страницы вверху появляется кусок табличной части с нумерацией столбцов в таблице, где отражается список поступивших МПЗ.

    Reply
  17. brus84@rambler.ru

    Нужен акт на списание материалов в конфигурацию УСН 7.7.

    Reply
  18. ЛюблюТебя

    Пожелание: для Бухгалтерии добавить форму МХ-1 и МХ-3 чтобы данные для этих форм брались из Поступления товара.

    Reply
  19. riz-riz

    Спасибо за обработку! Пожелание: для Бухгалтерии в печатной форме платежного поручения в поле «сумма прописью» исправить цифры на сумму прописью

    Reply
  20. yul_ok

    Спасибо огромное за обработку! Понадобилось срочно распечатать док-ты за 2 года, а времени на написание совсем не оставили, просто поставили перед фактом…

    Спасибо Вам!

    Reply
  21. wumka

    Спасибо за обработку.

    Несомненное достоинство, что работает и в УСНО, и в ОСНО. Очень жаль, что в разработке для ОСНО нет возможности распечатывать Акты выполненых работ. При восстановлении бухучёта организаций, оказывающих услуги, пакетная печать Актов актуальна.

    Reply
  22. unis33

    Конечно, программа классная, но вот счет-фактуры, явно недоделанные (ОСНО). в гафе грузоотправитель ставиться почему-то покупатель. а должен ставиться Поставщик. и форма сч-ф с июня месяца 2009 года поменялась.

    Reply
  23. xelfr

    Хорошо бы еще, кроме РКО, и ПКО печатать (для УСН)

    Reply
  24. juliet

    а какой формат у файла? не подвязывается 🙁

    Reply
  25. mihenius

    Хотя обработка давно не обновляется, но достаточно просто дорабатывается под текущие печ. формы.

    Нашел ошибку при печати реестра документов.

    Пропущена следующая строка после:

    //Проверка вида документа
    Если ВыбранныеДокументы.НайтиЗначение(Док.Вид()) = 0 Тогда
    Продолжить;
    КонецЕсли;

    следующего содержания:

    Док.ИспользоватьЖурнал(«Общий»,0);

    Иначе не работает конструкция Док.Графа(«Реквизит»);

    Reply
  26. amarena

    Спасибо очень, очень помогло

    Reply
  27. erthia

    Спасибо за обработку. А можно сохранять получившиеся печатные формы документов напрямую в файл Excel,не выводя на экран, то есть каждый документ на отдельный лист?

    Reply
  28. RailMen

    (27) erthia, я уже несколько лет в глаза не видел семерку. Мой Вам совет: найдите где-нибудь программиста 1С или франчайзи и перейдите на 8 версию.

    *******

    Работы по этой обработке я как ее создатель полностью официально прекращаю. Так же как и любые другие работы с платформой 7.7.

    Reply

Leave a Comment

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