Книга учета доходов и расходов ИП с общим налогообложением




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

51 Comments

  1. Свой

    есть ли ограничения, т.е. ситуации когда обработка может работать некорректно ?

    Reply
  2. ааю

    Выполнял под конкретного заказчика. На других данных не испытывал. Но заказчик ведет учет в типовых конфигурациях типовыми документами. Книга сформирована в нескольких различных ИБ заказчика.

    Reply
  3. Лев

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

    Reply
  4. ааю

    Лев, для отладки нужны строки ошибок. А я специально погоняю отчет на других данных и версиях. Не думаю, что новые релизы сильно исказят картину. Партионный учет строится на оборотах 41-го, подокументный взаиморасчет с поставщиками и покупателями — 60 и 62 соответственно.

    Reply
  5. Лев

    Время начало: 11:46:01

    Расчеты с поставщиками: 32.071 сек.

    табРасход.КредДокумент = ПолучитьПустоеЗначение(«Документ»);

    {C:BOOK.ERT(1471)}: Поле агрегатного объекта не обнаружено (КредДокумент)

    Расчеты с поставщиками: 0.89 сек.

    ДБДок.Open(strSQL,cn,1,3);

    {C:BOOK.ERT(2492)}: Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][Драйвер ODBC dBase] Объект ‘book608.dbf’ не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути.

    Reply
  6. Лев

    просто сам пытался написать для тех же целей, когда понял весь объем работы плюнул, написал http://www.infostart.ru/projects/3033/ для перекидки данных в 1С Предприниматель и там уже делаю эти отчеты. геморно, согласен, но налоговая принимает отчеты и не ругается

    Reply
  7. ааю

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

    Reply
  8. Dolly_EV

    Плюс не глядя за Подвиг!)) Я в свое время написал такое же для ПУБ 7.7, и для своей конфиги (дальняя родственница Бухгалтерии, теперь уже с кучей регистров)

    Reply
  9. Adoms

    Какое нужное дело! Спасибо! Скачаю и буду тестировать

    Reply
  10. jul_79

    А если у ИП еще и вмененка, работать будет? Там ведь тоже задействованы 41,60и 62 счета?

    Reply
  11. Svetos

    Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][Драйвер ODBC dBase] Ошибка синтаксиса в предложении FROM. Что за ошибка такая?

    Reply
  12. Svetos

    И еще вопросик про наценку. Посмотреть не могу, т.к. тоже пишет ошибку

    Reply
  13. Svetos

    Если табДокумент.НайтиЗначение(текТовар,поз,»Товар»)=1 Тогда

    {C:DOCUMENTS AND SETTINGSBUH_3РАБОЧИЙ СТОЛ8.1BOOK.ERT(1972)}: Неверный идентификатор колонки! Еще ошибка

    Reply
  14. napala@

    А я вот не взялась однажды… Вам — плюс!

    Reply
  15. Adoms

    (11) и что интересно, вначале обработка запускалась, писало, что часть товара не распределилось по партиям, а потом перестала работать вообще, выдает ошибку, что и в 11 посте

    ДБ17.Open(strSQL,cn,3,1);

    {C:BOOK.ERT(3792)}: Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][Драйвер ODBC dBase] Ошибка синтаксиса в предложении FROM.

    Reply
  16. ааю

    (15) To Adoms

    Это отчет доходов и расходов по форме 6-1. Она должна взять данные из таблицы 1-7 и других таблиц. Если по кнопке «Отчет 1-7» при взведенных флажках «Подготовить данные» и «Сохранить отчет» все прошло без ругани, то таблица 1-7 должна быть готова. В каталоге ИБExtformsBOOK2008(если книга за 2008-й год) должен быть файл book.dbf внушительных размеров. Именно по нему строятся месячные отчеты 1-7. Так что нужно проверить наличие файла book.dbf, если он есть, закрыть-открыть форму (на случай если я где-то вовремя не закрыл его).

    Reply
  17. Svetos

    (16) Нажала кнопку «Отчет 1-7» при взведенных флажках «Подготовить данные» и «Сохранить отчет» интервал отчета с 01.01.09-31.01.09 и пишет сначала Товар BOSCH Бур SDS+ 6х50 1618596166 не удалось распредилить по партиям 2, на сумму 118-20 Отгрузка товаров, продукции БОЧ00006 (10.01.09)

    Товар BOSCH Бур SDS+ 6х50 1618596166 не удалось распредилить по партиям 1, на сумму 59-10 Отгрузка товаров, продукции БОЧУ2273 (16.01.09), а потом выдает: Если табДокумент.НайтиЗначение(текТовар,поз,»Товар»)=1 Тогда

    {C:DOCUMENTS AND SETTINGSBUH_3РАБОЧИЙ СТОЛ8.1BOOK.ERT(1972)}: Неверный идентификатор колонки!

    Reply
  18. yrancev

    Однозначьно плюс.

    (17) ошибка возникает в момент обработки документа «Инвентаризация». Дело в том что данный документ не имеет реквизита с именем «Товар» вместо него «МПЗ» но и дальше будут возникать ошибки видимо заказчик данной обработки не использует в учете документ «Инвентаризация». Если автору будет несложно доделать оброботку с учетом всех типов документов которые затрагивают 41 счет.

    Уважаемый автор прошу вас сообщить будете ли вы доделывать или нет. Если нет то сам =))

    Reply
  19. ааю

    (18) for yrancev

    Я вернусь к этому отчету в начале следующего года. Сейчас не могу 🙁

    Что бы отчет стал универсальным, нужно много доработок. Буду рад, если идея и основа отчета кому-то пригодится.

    Reply
  20. Adoms

    присоединяюсь к посту 18 и еще если товар приходуется через авансовый отчет, проводкой ДТ41 КТ71 то эта ситуация тоже не учитывается в обработке, и товар не распределяется по партиям

    Reply
  21. S-8

    (20) Я ЕЁ НАШЕЛ!!!

    Reply
  22. ut2k5

    плюс однозначно, мало, кто на такое отважится, например у меня так и не хватило в свое время доделать эту книженцию до конца…

    Reply
  23. Ira123

    Прикреплен Файл с расширением epf 🙁

    Reply
  24. ankr

    Выдает ошибки:

    ДБОшибка.sum = СуммаОплаты;

    {D:ANDREY1C_BASES_7_7BOOK.ERT(2527)}: Не соответствие типов!

    ДБОшибка.sum = СуммаОплаты;

    {D:ANDREY1C_BASES_7_7BOOK.ERT(2527)}: Не соответствие типов!

    ДБОшибка.sum = СуммаОплаты;

    {D:ANDREY1C_BASES_7_7BOOK.ERT(2527)}: Не соответствие типов!

    ДБПост.MoveFirst();

    {D:ANDREY1C_BASES_7_7BOOK.ERT(2655)}: ADODB.Recordset: Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

    На последней ошибке вылетает! 😥

    Reply
  25. alex_gus

    сорри за фотоп, а нет ли у когонить книги для Комплексной, взялся я переделывать книгу из Предпринимателя, и попал сразу в тупик.

    Reply
  26. ZNR73

    Спасибо за работу. Очень помагло. Только отчет ведется по товарам, а по услугам нет.

    Reply
  27. swimdog

    (24) исправленный вариант http://infostart.ru/public/69508/

    Reply
  28. so-quest

    Если табДокумент.НайтиЗначение(текТовар,поз,»Товар»)=1 Тогда

    {Y:DOWNLOADSBOOK.ERT(1972)}: Неверный идентификатор колонки!

    Reply
  29. ivmat

    Как запустить книгу доходов и расходов

    Reply
  30. denni_777

    Андрей, добрый день.

    А можно исправленный вариант КУДиР для ИП на ОСНО на e-mail

    denni_777@mail.ru.

    Очень буду благодарен.

    Reply
  31. med2

    добрый день.

    А можно мне тоже исправленный вариант КУДиР для ИП на ОСНО на e-mail

    Evgen_med2@mail.ru ?

    Буду очень благодарен.

    Reply
  32. vakham

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

    Пытаюсь запустить вашу обработку book.ert

    В демке бухгалтерии создал каталог ExtFormsBOOK2002

    В настройках указал 2002 год, «подготовить данные», «сохранить данные». После запуска любого отчета выводится ошибка

    ДБПост.Open(strSQL,cn,3,1)

    (2566): Microsoft OLE DB Provider for ODBC Driver: [Microsoft] [Дравер ODBC dBase] Ошибка синтаксиса в предложении FROM

    В чем ошибка? Надо установить SQL? Какой и какой версии?

    Reply
  33. smtan-2011@mail.ru

    Очень бы нужная обработка..но тоже выдает Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][Драйвер ODBC dBase] Ошибка синтаксиса в предложении FROM.

    Reply
  34. smaxim

    добрый день.

    А можно мне выслать КУДиР для ИП на ОСНО на e-mail

    263741@mail.ru ?

    Буду очень благодарен.

    Reply
  35. kali0stro

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

    Можно ли и мне выслать КУДиР для ИП на ОСНО на e-mail

    foracs@gmail.com ?

    Заранее благодарю.

    Reply
  36. VitHammer

    Очень жаль! Такой нужный и объемный отчет, а не работает.

    И, главное дело, установка BDE не помагает!

    ДБДок.Fields(«POSTNAME»).Value = текКонтрагент.Наименование;

    {C:4КУДИР.ERT(2152)}: Microsoft OLE DB Provider for ODBC Drivers: Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена.

    Reply
  37. VitHammer

    Есть еще там такая строка:

    Если текДок.Вид()=»ПостулениеМатериалов» Тогда

    Кто скачал, исправьте ошибку: «ПоступлениеМатериалов»

    Reply
  38. VitHammer

    Сорри, удалось заставить его работать! Ну кто же мог подумать, что ошибка

    «Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB.»

    обозначает: «Длина наименования справочника больше, чем положено»!

    Конфигурация доработана, поля наименований Контрагнетов и Номенклатуры увеличены!

    Я поправил отчет, увеличил длину полей — и все заработало!

    Автору — респект!

    Reply
  39. ded1366

    (39) zonnar, можете поделиться своим отчетом на ded1366@yandex.ru?

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

    Reply
  40. ded1366

    (39) zonnar, даже лучше, конечно, вам выставить свой вариант обработки отдельно, либо передать автору, чтобы он выставил, коли у него сейчас возможности для доработки.

    Это соберет не мало благодарностей.

    Reply
  41. VitHammer

    ded1366, понимаешь, я не сделал в обработке никаких усовершенствований. Просто нашел там, где задается длина поля наименования и увеличил его. Я задал там такую длину, какая была У МЕНЯ В БАЗЕ. Я уже и не помню, в каком месте искать. Дело давно было. Ну если тебе как-то поможет, я выслал тебе мой вариант обработки.

    Reply
  42. ded1366

    Большое спасибо в любом случае! Ну и автору конечно тоже!

    Reply
  43. serq82

    пару отчетов формирует а остальное нет…

    Reply
  44. serq82

    (27) swimdog,можно исправленный вариант пожалуйста?а то «Публикация удалена»((((

    Reply
  45. serq82

    (30) denni_777, прислал исправленный вариант?

    Reply
  46. serq82

    (31) med2, прислал исправленный вариант?

    Reply
  47. serq82

    у кого рабочая обработка?

    Reply
  48. art8848

    у кого ип на ОСНО и ведется КУДиР

    Reply
  49. kvm3000

    у кого ип на ОСНО и ведется КУДиР в 1с бухгалтерия77, практикующий напишите, плииииз

    Reply
  50. micrnd

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

    Можно ли и мне выслать КУДиР для ИП на ОСНО на e-mail

    micrnd@mail.ru ?

    Заранее благодарю.

    Reply
  51. Ольга_tmp

    Не надо качать. как и у всех ошибка Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][Драйвер ODBC dBase] Ошибка синтаксиса в предложении FROM. Зря потраченные деньги

    Reply

Leave a Comment

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