Внешняя печатная форма "Счет" для "Бухгалтерии Предприятия ред. 1.6




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

14 Comments

  1. gutentag

    >… сделал проще взял отвесвтенного из шапки документа

    А должность подписанта почему не попадает в печатную форму(в соотв. со ст.9 закона 129-ФЗ «О бухгалтерском учете») ?

    Reply
  2. IP43

    (1) оп па… не подумавши состряпал, в ближайшее время исправим 🙂

    Reply
  3. IP43

    (1) есть выход из положения даже исправлять не надо 🙂 надо в полном имени пользователя дописать его должность.

    Reply
  4. bearcat

    Подскажите, плиз, как найти «на просторах Инфостарта» обработку для вывода печатной формы счета , в котром цены и суммы в каждой строке будут с НДС, хотя в настройках 1С снята галочка «цены с НДС». Так нужно , потому что у нас холдинг и нужно , чтобы было единообразие у всех фирм. А покупатели часто хотят счет с ценами с НДС.

    Например, договорился менеджер с покупателем, что продаст ему товар по 590 рублей за штуку х на 10 штук всего на сумму 5900, в т.ч. НДС 900 руб. Но в 1С внесена цена без НДС 500 руб х й0 шт = 5000 плюс НДС 900 итого 5900. И именно так в счете и отображается в 1С = 500 х 10 = 500

    НДс 900

    ИТГО 5900.

    А покупатель хочет

    590 х 10 = 5900

    в т.ч. НДС 900.

    Reply
  5. Helper

    В УТ 10.3 выпадает ошибка —

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

    Ошибка при вызове метода контекста (Выполнить): {(18, 2)}: Неоднозначное поле «ЗаказПокупателя.Ссылка»

    <<?>>ЗаказПокупателя.Ссылка = &ТекущийДокумент

    Reply
  6. Helper

    (5) Вопрос снят — не обратил внимания, что печатная форма для Бухгалтерии 1.6

    Reply
  7. fennics

    конф. (1.6.23.2) все отлично работает! огромное спасибо! 😀

    Reply
  8. yurez

    Помогите с поиском внешней формы счета для УТ

    Reply
  9. IP43

    Обновлено

    1. Добавлена расшифровка подписи Отвественного

    2. Добавлено строка «Всего к оплате» для тех кто не умеет читать сумму прописью и прибавлять сумму НДС. Актуально в случае когда НДС сверху. Клиент прям слезно умолял 🙂

    проверено на Бухгалтерия предприятия, редакция 1.6 (1.6.24.7)

    Reply
  10. pata

    А можно задолженность или переплату по текущему договору в счете указать?

    Reply
  11. vas5780

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

    Reply
  12. galaxymaster

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

    Reply
  13. galaxymaster

    Спасибо,

    Reply
  14. bekas1977

    Други!)) помогите сделать внешнюю печатную форму счета на оплату покупателю для 1С:Предприятие 8.1 (8.1.13.41) Конфигурация «Управление торговлей», редакция 10.3 (10.3.8.9). Желательно создать ее и объяснить, как подключить. Я в этом чайник — скачал несколько примеров ничего не работает, не могу разобраться. Работа будет оплачена ОДНОЗАЧНО (после предварительного обсуждения стоимости), но, только после проверки работоспособности. Оплата ЯДеньгами, или пополнение счета мобильного тлф, или (если Питер) наличными. Задачу необходимо решить СРОЧНО! Желательно до Понедельника 16 янв. 2012г. Ваши предложения или готовые ВПФ жду по эл. почте 2683434@mail.ru — ОЛЕГ.

    При выполнении работы — здесь сообщу о том, кем работа выполнена, его логин или (по желанию) реальное имя.

    P.S.Для питерцев дополнительно предлагаю периодическую, оплачиваемую, разовую работу по насторойке 1С. Для связи адрес эл. почты тот же.

    Reply

Leave a Comment

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