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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *