Доходы и расходы по статьям




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

30 Comments

  1. sps02

    Здравствуйте. Очень долго искала, надеюсь то что нужно)

    Reply
  2. sps02

    Расходы не заполняются!!

    Reply
  3. sps02

    Объясните пож, почему?

    Reply
  4. makas

    в БП 2.0 будет работать отчет?

    Reply
  5. sps02

    в БП 2.0 работает!!, только расходы не заполняются(((

    Reply
  6. t278

    Знакомый проверял работоспособность.

    БП 2.0, УПП у него не работает. Возможно только в БП 2.0 КОРП

    Reply
  7. cucuruza

    Идея хорошая, но у меня есть вопрос.

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

    А расходная часть отчета собирается тоже из затрат текущего месяца (счю25+26+20 и 91 счета). Вопрос: как учитывается в составе затрат себестоимость продукции реализованной в этом месяце, но выпущенной в предыдущем?

    Reply
  8. t278

    (7) cucuruza,

    данные берутся из регистра накопления

    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, Авто, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПрочиеРасходы)

    следовательно не будет учитываться

    Reply
  9. sps02

    ВСЕ работает СПАСИБО!!! теперь все заполняет!!! Супер!!!!!!!!!!!!!!

    Reply
  10. sps02

    Скажите пож, можно ли как-то убрать 26 счет, т.к. у меня все двоиться. В моем учете 26 списывается на 20, в итоге получается ЗП два раза. Заранее спасибо!

    Reply
  11. TrinitronOTV

    не понял из вышенаписанных сообщений, предложенный отчет будет работать в конфигурации БП релиза 2.0?

    Reply
  12. Finn11

    (10) sps02, думаю, у меня тоже будет такая проблема. Вообще-то 26 счет закрывается на 20. И там не только зарплата.

    Настроить нужные счета нет возможности?

    Reply
  13. Finn11

    Доходы почему-то вообще не формируются.

    Reply
  14. t278

    (12) Finn11, обновил отчет.Добавил возможность выбирать счета 20, 25, 26.

    Доходы у вас не формируются после обновления отчета?

    Reply
  15. Finn11

    (14) t278, доходов нет. У меня БП 2.0.

    Reply
  16. user99

    Ошибку выдает на УПП

    {Форма.ФормаОтчета.Форма(392)}: Ошибка при вызове метода контекста (Выполнить)

    ТЗу = ЗапросДоходы.Выполнить().Выгрузить();

    по причине:

    {(4, 30)}: Поле не найдено «ХозрасчетныйОстаткиИОбороты.СуммаНУОборотКт»

    ХозрасчетныйОстаткиИОбороты.<<?>>СуммаНУОборотКт КАК Выручка,

    Что делать?

    Reply
  17. user99

    Так и не получил я ответа на свой вопрос. Повторяю: на УПП данная обработка не срабатывает…

    {(4, 30)}: Поле не найдено «ХозрасчетныйОстаткиИОбороты.СуммаНУОборотКт»

    ХозрасчетныйОстаткиИОбороты.<<?>>СуммаНУОборотКт КАК Выручка,

    Что мне делать?

    Reply
  18. child1983

    Ошибка при формировании на релизе БП 2.0.61

    {Форма.ФормаОтчета.Форма(240)}: Преобразование значения к типу Дата не может быть выполнено

    НачПериодаВцикле = Дата(Лев(Формат(НачДата,»ДФ=yyyy-MM-dd»),4) + ?(Ц<10,»0″+Строка(Ц),Строка(Ц))+ «01»);

    Reply
  19. t278

    обновленно для Управляемых форм т.е. 8.3

    Reply
  20. AnneLe1981

    Скачала Доходность_УФ, у меня Бухгалтерия предприятия (базовая), редакция 3.0 (3.0.37.29), выдает сообщение

    Невозможно подключить дополнительный отчет из файла.

    Возможно, он не подходит для этой версии программы.

    Техническая информация:

    Метод объекта не обнаружен (СведенияОВнешнейОбработке)

    Reply
  21. AnneLe1981

    Почему то не формируются доходы

    Reply
  22. Hellgga

    1С 8.2 БП 2.0 62.4 доходы не формирует, увы.

    Почему не отзываетесь на вопли страждущих?

    Reply
  23. t278

    (22) Hellgga, «На вопли» я отзываюсь но в личной переписке (чтобы здесь не засорять сообщениями). Человеку я 1) предложил прислать базы для проверки, 2) выслал два варианта файла на электронку. К сожалению не один не подошел у неё, у меня в демо версиях работают отчеты, отсюда вывод лучше проверять на (Вашей) базе и скать ответ на вопрос «Почему не работает?».

    Reply
  24. Arbi

    Спасибо! Проверила на КОРП. 8.3. Работает отлично))

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

    Reply
  25. buhkaz

    Абсолютно стандартная конфигурация Бухгалтерия на 8.2. Так же не формируются доходы, а значит и фин рез не корректен… А значит обработка не доработана и не полноценна… Смысл писать в личку, если судя по предыдущей переписке, отчет работать все равно не будет? Хотелось бы понять, как ее в конфигураторе самой отредактировать можно, так чтобы доходы все же попадали

    Reply
  26. t278

    сейчас ищу последние релизы по 2.0, чтобы проверить отчет. Сам просто работаю только с БП.КОРП и то сейчас на 3.0 переходим.

    Reply
  27. G297

    Конфигурация БП 3,0

    Отчет не работает в разрезе подразделений..

    Reply
  28. Sedow

    Привет. отчет в КА 1.1 работает? кто пробывал?

    Reply
  29. user704697_iosafovam

    Добрый день!

    Фин.рез не корректен. Есть предприятие с производством и продажей в зависимости от подразделения. Учет затрат ведется и на 26 и на 44. Себестоимости в отчете нет вообще.

    Так же, хотелось бы видеть фин.рез по организации с разбивкой на ОП, а так получается либо по юр.лицу в целом, либо по 1 ОП. Потом собирать в Excel?

    Reply
  30. user704697_iosafovam

    Так же было бы удобнее, если бы статьи затрат в отчет выводились с группами, например, расходы по аренде и в группе: аренда торговых помещений, производственных и т.д. Отчет был бы более информативен.

    Reply

Leave a Comment

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