Анализ взаиморасчётов (акт сверки) для 1С 8.х (БП, УПП)




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

28 Comments

  1. kariatida

    Большое спасибо от пользователей из Узбекистана! Вы просто сохранили мне кучу нервных клеток! Все замечательно работает даже в нашей адаптированой конфигурации.

    Reply
  2. Proza

    Хороший отчет

    Reply
  3. azernot

    Поправлена неприятная бага: конечное сальдо бралось на начало дня!

    (бага была только в демо-версии, поэтому и не обнаруживалась так долго!)

    Reply
  4. azernot

    Версия 1.5

    — Разрешено формирование выходной формы со сторной «по данным контрагента».

    — Управление настройками макета оформления (для изменения цветовой палитры).

    — Реализована возможность указания даты и места подписания акта сверки, должностей и ФИО представителей с каждой сторны (доступно использование справочника «Физические лица» и «Контактные лица»).

    — Реализована возможность заполенния данных от имени контагента (при этом представление документа «переворачивается» на обратное Входящие — Исходящие, Реализация — Поступление, Выдан — Получен).

    — Реализован механизм ввода на оснвоании данных отчёта документа «Акт сверки взаиморасчётов» (при этом в графу представление переносятся полные представления документов «как в отчёте» включая подчинённые счета-фактуры и комментарии).

    — Реализован механизм выводя произвольного количества символов наименования счёта организации для платжных документов (удобно, в случае если платёжные документы по разным счетам хранятся в разных папках, и нужно знать в какой папке искать оригинал).

    Версия 1.4

    — Реализован механизм формирования отчёта по нескольким договорам контрагента (сводно).

    Демо-версия старше 1.3 не формирует акты позднее 31.12.2005 г.

    Reply
  5. cs25

    azernot-у спасибо ! Ещё бы мне без демо и пароля для своих печатную форму переделать … А вообще ПЛЮСУЕМ !!!

    Reply
  6. cs25

    Вы не можете голосовать. Необходим рейтинг больше 10…….. А жаль …

    Reply
  7. azernot

    Cs25, так в чём проблема? Покупай полную и твоя мечта осуществится 🙂

    Reply
  8. viRUS_NUr

    Замечательна!!! Спасиб, от рядовых бухгалтеров, за ваши работы!!!

    Reply
  9. dtybr

    В отчет проблемно добавить возможность формирования акта сверки по головному контрагенту?

    Reply
  10. kondrashka

    зачем? В 1С:Предприятие 8.1 (8.1.12.101) Управление производственным предприятием, редакция 1.2 (1.2.19.1) все есть

    Reply
  11. LenaTorpeda

    Жаль нет отзывов от жителей Таджикистана и Туркменистана , интересно бы почитать.

    Reply
  12. LenaTorpeda

    Класс:::» Вы пользуетесь демоверсией обработки «Анализ взаиморвсчетов».

    Формирование актов сверки за период позже 31.12.06 возможно только в

    демоверсии 1.3 ! (а я ее и скачала) и на выходе -0

    Примерно что-то подобное я и ожидала.

    А чем плох стандартный акт сверки ? Меня он очень устраивает.Может жителям

    ближнего зарубежья его не включают в конфигурацию?

    И в чем отличие вашего и стандартного?

    Reply
  13. azernot

    (15) В версии старше 1.3 можно формировать отчёт за более ранний период (за 2006, 2005 и т.п. год). Даже если ваша база началась позже всегда можно проверить отчёт на демо-базах от 1С или воссоздать для себя пример в тестовой базе. Ну и на крайняк, версия 1.3 доступна для скачивания на этом сайте.

    Стандартный акт сверки — неплох (и не хорош). Если вам нужно составить распечатать и подписать акт сверки — пользуйтесь стандартным. Но что делать, если сам акт сверки не нужен, а нужно всего лишь посмотреть состояние взаиморачётов? Особено, если у контрагента несколько договоров и обороты/сальдо разъезжается по нескольким бух.счетам? Как отследить на каком счёте, по какому договору сколько? Только не говорите, что вас устраивает анализ субконто. Кроме того, полезная вешь «Текущее сальдо» после каждой операции. Вы сомневаетесь в какой момент на какую сумму должен зачитываться аванс? Этот отчёт для вас. Ну и прдставление документов в стандартных акта сверки оставляет желать лучшего. Вобщем, самый лучший способ — проверить отчёт в действии.

    Reply
  14. D17018

    Скромно попрошу вас господа не будьте жадинами

    Скиньте мне на мыло danilenko@shmnu.com полную версию этого чуда

    “Анализ взаиморасчётов для 1С 8.1”

    ну или пароль на модуль очень нужно

    Reply
  15. azernot

    (17) От скромности не умрёте вы, уважаемый господин. Предела нет наглости вашей.

    Обработка эта нужна тебе? Плату за полную версию ты должен azernot`у отдать. И да пребудет с тобой сила.

    Reply
  16. Muhin555

    Не плохая разработка….. Правда, во-первых, нужно сохранять сформированный отчет хотя бы в Exсel для последующей пересылки контрагенту, чтоб он заполнил по «нашей форме», а не в формате TXT….

    Во-вторых, если она предназначена для «1С:Бухгалтерии», то в ней есть справочник «Ответственные лица организации» (а остальные для подписи мне не нужны, такие например как уборщицы)…..

    В-третьих, нужно при начальной загрузке, а потом при смене отбора «организации» сделать проверку и заполнение «подписывающих лиц» по организации, а то проверка и заполнение происходят только тогда, когда «Должностные лица организации» не заполнены……

    В-четвертых, сколько ни отбирай валюту, всё равно не увидишь выбор….

    Ну а уж после этого уже можно и цену назначать….

    Reply
  17. savtamb

    В УПП не работает

    {Форма.ФормаОсновная.Форма(128,27)}: Переменная не определена (глТекущийПользователь)

    Документ.Ответственный = <<?>>глТекущийПользователь;

    Reply
  18. gutentag

    адаптируйте пожалуйста версию 1,3 для бух-2.0

    Спасибо!

    Reply
  19. vitekryazan

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

    Reply
  20. Sergyhmao

    Здравствуйте.

    Вопрос почему обработку забросили, не развиваете дальше?

    Давно кстати в версии 1.5 при подборе отв.лиц организаций {ВнешняяОбработка.АнализВзаиморасчетов.МодульОбъекта(259)}: Ошибка при вызове метода контекста (Выполнить)

    по причине:

    {(22, 73)}: Поле не найдено «РаботникиОрганизацийСрезПоследних.Физлицо»

    ПО ФИОФизЛицСрезПоследних.ФизЛицо = РаботникиОрганизацийСрезПоследних.<<?>>Физлицо

    Надеемся на то, что реализуете еще много полезного в обработке, мы ей пользуемся с 2008 г. и 76.01 по умолчанию бы добавить

    Reply
  21. azernot

    (19) Обычно я бред не комментирую, но тут, за давностью лет, случай особый..

    1. Отчетная форма великолепно сохраняется штатными средствами хоть в Exсel, хоть в TXT, хоть в HTML

    2. А у меня может возникнуть ситуация, когда люди подписывающие акт отличаются от ответственных лиц.. Посему лучше дать возможность выбрать лишнее, чем не дать возможность выбрать нужное.

    3. Обяъснено в 2. Я намеренно не запрещаю даже уборщице ООО «Ромашка» подписывать акт сверки от имени фирмы ОАО «Василёк».

    4. Ибо ни к чему в этом поле выбирать валюту регламентированного учёта.

    Reply
  22. azernot

    (23) Поскольку обработка популярностью не пользуется, её развитие приостановлено.. Версию 1.5 я сейчас даже найти не смогу.. так что ошибку, увы, не исправлю.

    Что касается «много чего полезного», то могу предложить только вариант доработки конкретно под ваши нужды, конкретными нужными вам функциями, за отдельную плату.

    Что касается счёта 76.01.1:

    откройте обработку в конфигураторе, зайдите в форму «ФормаНастройкаСчетов», найдите текст (в строке 163):

    СписокГрупп.Добавить(ПланыСчетов.Хозрасчетный.ПрочиеРасчетыСРазнымиДебиторамиИКредиторами,,ПрочиеКонтрагенты);

    СписокГрупп.Добавить(ПланыСчетов.Хозрасчетный.ПрочиеРасчетыСРазнымиДебиторамиИКредиторамиВал,,ПрочиеКонтрагенты И УчетВВалюте);

    И измените на:

    СписокГрупп.Добавить(ПланыСчетов.Хозрасчетный.ПрочиеРасчетыСРазнымиДебиторамиИКредиторами,,ПрочиеКонтрагенты);

    СписокГрупп.Добавить(ПланыСчетов.Хозрасчетный.НайтипоКОду(«76.01.1»),,ПрочиеКонтрагенты);

    СписокГрупп.Добавить(ПланыСчетов.Хозрасчетный.ПрочиеРасчетыСРазнымиДебиторамиИКредиторамиВал,,ПрочиеКонтрагенты И УчетВВалюте);

    Reply
  23. Sergyhmao

    Как вариант.

    Можно и по другому… Отпишу пожелания,скину на обменник 1.5, вы дорабатываете, выкладываете здесь, мы покупаем новую версию.

    Reply
  24. Sergyhmao

    (24) azernot,

    вы не правы. когда надо быстро все делать, даже время на клацанье клавой жалко, так что подбор в справочнике оно быстрей и с гарантией от опечатки

    Reply
  25. azernot

    (27) Дык речь не о том, чтобы не было выбора из справочника. А о том, чтобы этот выбор ограничить исключительно ответственными лицами организации и далее контролировать соответствие ответственных лиц и организации. Вот я и объясняю, что не в моих правилах загонять пользователя в узкие рамки.

    (26) 1.5 — это бухгалтерия предприятия 1.5? Или вы имеете в виду версию Анализа взаиморасчётов 1.5?

    Reply
  26. Sergyhmao

    Имел в виду версию Анализа взаиморасчётов 1.5

    Reply
  27. Sergyhmao

    Все вышесказанное про УПП 1.3. А то, что тут озвучили, типа типового потенциала хватает, треп,

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

    Reply
  28. azernot

    Полная версия обработки за SM.

    Reply

Leave a Comment

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