Отчет по прибыли и рентабельности для БП 3.0




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

58 Comments

  1. kit

    Поправил в отчете рентабельность, теперь выражается в %. Спасибо за замечание!

    Reply ↓
  2. Порт

    мне нравится!

    Reply ↓
  3. kit

    Для тех, кто уже скачал, можно поправить формулу в конфигураторе, в СКД на закладке «Вычисляемые поля».

    Reply ↓
  4. almas

    Спасибо.

    Reply ↓
  5. natarezn

    отлично сказано — не для россии!

    Reply ↓
  6. kit

    Отчет обновил, изменил группировку в запросе, т.к. иногда задваивались либо себестоимость, либо выручка (например при разных ГТД одной номенклатуры), ну и ещё какие-то мелочи.

    Reply ↓
  7. host_kms

    http://saveimg.ru/show-image.php?id=4405e7136455e3dca4bc662c13b4b320

    {(18, 58)}: Не задано значение параметра «СубконтоКт1» И ХозрасчетныйДвиженияССубконто.СубконтоКт1 В ИЕРАРХИИ(<<?>>СубконтоКт1)

    Рарус.Общепит 3.0 на базе БП

    Reply ↓
  8. kit

    (7) host_kms, Поле товар в шапке не заполнено. Укажите группу «Товары». Но можно и удалить этот отбор, просто для моих клиентов так удобнее, если что пишите удалим.

    Reply ↓
  9. woot

    А как сделать отбор по всем товарам?

    Reply ↓
  10. kit

    (9) woot, см. комментарий №8.

    Reply ↓
  11. woot

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

    Reply ↓
  12. woot

    Скрины могу выложить

    Reply ↓
  13. kit

    (12) woot, Давай скрины.

    Reply ↓
  14. alternativa

    аналогичная ситуация. Бухгалтерия предприятия 3.0 (релиз 3.0.36.18). При попытке сформировать выдает {(18, 58)}: Не задано значение параметра «СубконтоКт1» И ХозрасчетныйДвиженияССубконто.СубконтоКт1 В ИЕРАРХИИ(<<?>>СубконтоКт1) . не совсем понимаю как удалить этот отбор (комменатрий 8), «галка» на номенклатуре не стоит. Я не программист, но если пошагово разъяснить — то попробую подправить. Отчет судя по всему хороший. Хотелось бы добавить НДС с группировкой по ставкам.

    Reply ↓
  15. kit

    (14) alternativa, Если удалить не получается, тогда заполните этот отбор значением группы справочника «Номенклатура» самого верхнего уровня.

    Reply ↓
  16. alternativa

    (15) Очень жаль, но отчет не работает и в случае, если выбираю группу «Товары» в номенклатуре. В этом случае ошибка не выдается, но в таблице выведена только шапка. Работаю с интерфейсом «Такси» , м.б. тут есть проблемы? Я не программист , а бухгалтер. Видимо данный отчет в первую очередь ориентирован на уровень программиста.

    Reply ↓
  17. kit

    (16) alternativa, Видимо, из группы ТОВАРЫ у вас не было реализаций. Укажите любую другую, в которой находятся ваши товары. Если товары не сгруппированы, тогда можно это сделать групповой обработкой. А чем, вообще, фирма занимается?

    Reply ↓
  18. kit

    (16) alternativa, В ТАКСИ проблем нет, проверено.

    Reply ↓
  19. alternativa

    (17)В номенклатуре есть группа Товары, эта группа включает в себя номенклатурные позиции, по которым была реализация. Еще раз повторяю — я не программист. Для меня термин «групповая обработка» не увязывается в те поля, которые предусмотрены Вашим отчетом. Такая же проблема была и с другим участником. Но ведь он как-то ее решил!!!

    Залезла в модуль — понимаю, что вся загвоздка сидит в «И ХозрасчетныйДвиженияССубконто.СубконтоКт1 В ИЕРАРХИИ(&СубконтоКт1)»

    Если язык 7.7 для меня не представляет проблем, то по 8.3 любое решение через конфигуратор подвергает в ступор. Ковыряться приходится долго — вот и решила воспользоваться уже готовым решением. Но видимо неудачно. Еще раз повторю — я не программист, а бухгалтер. Поэтому не всегда с первого раза могу понять ту или иную терминологию.

    Организация занимается как производством, так и торговлей покупных товаров (не розница). Интерес также в вашем отчете вызывает возможное дополнение по сумме исчисленного НДС с указанием ставки (это м.б. 0%,10%,18% так и «Без НДС»).

    на 7.7 есть такой отчетик, если есть необходимость могу скинуть. Очень удобный

    Reply ↓
  20. kit

    (19) alternativa, Ответил в личку.

    Reply ↓
  21. kit

    Добавил второй вариант обработки без отбора по номенклатуре. У некоторых пользователей возникали проблемы с его использованием.

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

    Reply ↓
  22. lesja_bryansk@mail.ru

    Отчет не работает.

    Нет колонки выручка и тянет НДС. хотя мы на упрощенке.

    Reply ↓
  23. kit

    (22)Да, судя по вашей картинке, выручки на 90-ом счете нет. А можете скинуть ещё и картинку проводок БУ этого документа ( Реализация ТУ № 165 от 11.03.2014)?

    Reply ↓
  24. lesja_bryansk@mail.ru

    (23)

    Reply ↓
  25. kit

    (24) lesja_bryansk@mail.ru, Специально для вас изменил под УСН, кину на почту. Просто у вас выручка по БУ определяется, а под ОСН по НУ, которого у вас нет.

    Reply ↓
  26. lesja_bryansk@mail.ru

    (25) СПАСИБО большое! Теперь все работает:))

    Reply ↓
  27. Душечка

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

    Reply ↓
  28. Душечка

    Пояснение к 27. Отчет, который скачала,ОтчетПоПрибылиНоменклатурыНовый. Я так поняла на Скрине показан другой отчет ? Или можно этот отчет настроить ?

    Reply ↓
  29. kit

    (28) Душечка, На снимке с колонкой количество вариант «без отбора».

    Reply ↓
  30. Душечка

    Очень Вам благодарна. У меня клиенты ведут в БП 3.0 реализацию по сетевым магазинам, т.е в базе несколько контрагентов с одинаковыми названиями , но разными КПП. Им нужен был отчет по реализации по каждому магазину и в целом по сети. Я себя называю более или менее продвинутым пользователем, но ни как не программистом. Инфостарт всегда спасал. В вашей обработке поменяла приоритеты и всё получилось, т.е для первого отчета ( для каждого магазина )вначале идет Покупатель, потом Номенклатура и за тем Документ . Для второго отчета ( в целом по сети ) Номенклатура-Покупатель-Документ.

    Моя розовая мечта, когда-нибудь самой написать дополнительный отчет для программ 1С.

    Я понимаю, что программистом не рождаются, а им становятся. Посоветуйте, пожалуйста,какие книги почитать , чтобы простые запросы выполнять. Ну , не совсем же я дурилка-картонная.

    Reply ↓
  31. kit

    (30) Душечка, Я читал «РАЗРАБОТКА СЛОЖНЫХ ОТЧЕТОВ В 1С:ПРЕДПРИЯТИИ» Е.Ю. Хрусталевой, ну и можно ещё посоветовать видео-уроки от Чистова Д.В. Рад, что отчет вам пригодился. Ну и, кстати, сделайте копию себе этого отчета и поиздевайтесь над ним, думаю, тоже в плане понимания разработки подобных отчетов пойдет на пользу.

    Reply ↓
  32. Душечка

    (31) Спасиб-а-а-а-а-а-а. Окунусь в мир программирования. Надеюсь , что моё плавание на воде наконец-то закончится, и я погружусь , ну, хотя бы на метр в мир программирования 1С.

    Reply ↓
  33. ant_lom

    Возможно ли сделать, чтобы данный отчет показывал данные и по услугам?

    Reply ↓
  34. kit

    (33) ant_lom, В описании я указал, что отчет строится по запросу 41 и 90 счетов. Услуги на 41 счете вряд ли отражаются )).

    Недавно я выложил ещё один отчет по доходам и расходам номенклатурных групп, там запрос по 20 и 90 счету строится, может он Вам лучше подойдет.

    Вот ссылка: http://infostart.ru/public/344253/

    Reply ↓
  35. array38

    Здравствуйте. Отчет вообще ничего не формуирует если делаю отбор по датам. Если период убираю, то формирует по всем продажам. 🙁 почему?

    Reply ↓
  36. kit

    (35) array38, Какой файл скачали?

    Reply ↓
  37. array38

    Я скачал первый и третий. Для ОСНО я так понимаю… Выяснил, что отчет не формируется, если стоит конец периода. Если его нет, то отчет строится.

    Также, вопрос: а можно ли добавить документ движения в структуру? В скд не вижу такого пункта.

    Благодарю!

    Reply ↓
  38. kit

    Даты сейчас перепроверил, но вроде как работает корректно. ((

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

    Reply ↓
  39. array38

    (38) Почему у меня все не так? Помогите пожалуйста! Сможете подключиться и глянуть? Небесплатно конечно!

    Документа движения у меня нет.

    Reply ↓
  40. a_kuznetsov

    Добрый! Релиз БП 3.0.40.31

    Движений в отчете нет — без отбора, все убрал и отборы периода, организацию и покупателей.

    Структуру отчета смотрел, менял — результат ни документов ни номенклатуры. Странно

    Reply ↓
  41. kit

    (40) a_kuznetsov, Чем занимается фирма? Какие проводки в документах реализации?

    Reply ↓
  42. a_kuznetsov

    Производство

    Движения по 43 счету

    Reply ↓
  43. kit

    (42) a_kuznetsov, В описании указал, что отчет строится на проводках 41-го 90-го счетов. Думаю, если немного запрос изменить (41 на 43 счет), отчет будет работать и для производственных организаций.

    Reply ↓
  44. a_kuznetsov

    (43) В запросе поправил, а воз и нынче там

    Reply ↓
  45. kit

    (44) a_kuznetsov, В СКД на закладке параметры не указали значение параметра (&Счет кт43). см. приложение

    Reply ↓
  46. a_kuznetsov

    Действительно, сам бы не додумался. Прикладываю обработку с изменениями

    Reply ↓
  47. kit

    (46) a_kuznetsov, Я не понял, работает или нет? В демо базе у меня отработала на ура.

    Reply ↓
  48. a_kuznetsov

    Да, спасибо

    Reply ↓
  49. zak555

    Отчёт у автора не работает.

    Переделал с нуля.

    И за что 2 смартнами с меня списали ?

    Reply ↓
  50. kit

    (49) zak555, Не понял, а какое отношение этот отчет имеет ко мне. Это не мой отчет.

    Reply ↓
  51. zak555

    (50) я скачал кажись два — из публикации и поста (44)

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

    Reply ↓
  52. kit

    (51) zak555, Запрос в отчете, Вами присланном совсем не мой. А в посте (44) человек желал запрос по 43 счету, который я ему исправил и отправил в (46) посте. Далее из переписки понятно, что отчет и по 43 счету заработал, но это другая версия отчета. Возможно Вам нужен был отчет с вариантом без отбора, если Вы скачивали у меня.

    Reply ↓
  53. matcord

    (20) и мне ответьте в личку, потому что та же проблема, а отчет не работает, но очень нужен

    Reply ↓
  54. Гость

    Отчет не работает если является организация установлена как ИП, значения суммы выручки пустое, а ндс равно стоимости продажи. В итоге бред.

    Reply ↓
  55. kit

    (54) Гость, Уважаемый Гость, для ИП имеется свой отчет «Отчет по прибыли номенклатуры УСН». Посмотрите внимательнее, Вы скачали для ОСН.

    Reply ↓
  56. Гость

    (55) Так ИП на общей, я так понял что отчет считает НДС на 90.01, сумма НУ, а если организация установлена как ИП, то поле НУ,ВР и ПР. нет. И в отчете в поле НДС тянется просто выручка. По идее для ИП на общей НДС должен тянуться с 90.03

    Reply ↓
  57. buy_sale

    В параметрах началопериода исправьте НачалоПериода(&НачалоПериода, «День»).

    В условиях желательно использовать в иерархии (&Счет)

    Reply ↓
  58. kit

    (57) buy_sale, Спасибо за комментарий, хотя по счету там указан конкретный счёт, а не группа, иерархия неуместна, но если только кто-нибудь подчиненные счета не заведет, но это уже другая история.

    Reply ↓

Leave a Comment

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