Отчет для УПП, сравнивающий "Товары на складах" и "Партии товаров на складах"




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

61 Comments

  1. vkt

    Внешний отчет для УПП (8.2), позволяющий видеть движения по регистрам «Товары на складах» и «Партии товаров на складах» в разрезе регистратора и позволяющий определить момент расхождения в учете по складам и партиям.

    Перейти к публикации

    Reply
  2. Elenkina

    А регистр ТоварыВРознице не анализируется?

    Получается, если поступление на розничный возникает разница.

    Reply
  3. vkt

    (1) Elenkina, Сорри, занимаемся производством. Торговли нет. Попробовать подключить регистр «Товары в рознице» (для вас)?

    Reply
  4. Newkimm

    Мне очень понравилось. Корректировки регистров сделали, выровняли и вперед!!! Спасибо.

    Reply
  5. echo77

    на сколько я знаю разница в движениях по товарам на складах и по партиям товаров на складах возникает только при виде движения расход.

    Reply
  6. vkt

    (4) echo77, В твоих словах есть логика, но в реальности — и при приходе тоже может возникнуть разница.

    Смотри Отчет02 — почему-то не сформировались движения по партиям при поступлении товаров.

    Также посмотри Отчет03 — разница сформировалась при возврате переданных товаров. Причем, передача товаров была произведена без расхождения по партиям.

    Reply
  7. vkt

    (3)Именно для этого отчет и создан — для удобства обнаружения косяков.

    Reply
  8. mig090874

    Вопрос а в Управлении торговли этот отчет будет работать? Там было бы это очень актуально. У нас товародвижение очень активное (и поступления, и возвраты, и закрытия приходных ордеров, и реализация и работа задним числом)

    Reply
  9. vkt

    (7) mig090874, В УТ 10.3 возможно и будет работать. Надо пробовать. У меня конфигурации УТ нет — проверить не могу.

    Отчет создан средствами СКД, поэтому, думаю, нет большой проблему заточить его под УТ.

    Reply
  10. mig090874

    Как скачаю, проверю. Пока не хватает 0,3.

    Reply
  11. SpartakM

    В УТ 10.3 нормально работает.

    Можно было бы вынести настройки в быстрый доступ, а также склад, чтобы каждый раз не заходить в настройки. Для рядовых пользователей это было бы проще. А вообще хороший отчет, сразу можно видеть какие партии не «ушли» со склада

    Reply
  12. vkt

    (10) SpartakM, Спасибо за проверку работоспособности в УТ.

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

    Reply
  13. DimitrT

    Скачать не могу, но очень интересует. Вопрос: как отработает партия сформированная Приходным ордером и закрыта приходной накладной. И еще — Корректировка записей регистра отображается?

    Reply
  14. Kostalmed

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

    Reply
  15. Kostalmed

    Все сижу и жду когда же мы наконец будем все делать по всем трем учетам одинаково дабы не было вообще расхождений!!!))))

    Reply
  16. vkt
    DimitrT пишет:

    Вопрос: как отработает партия сформированная Приходным ордером и закрыта приходной накладной.

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

    Если «Ведомость по партиям» сформировать по документам оприходования, то будут видны и ордер и накладная (приход-расход: оборот = 0)

    (см.скрины)

    Возможно, если будет косяк, покажет что-то другое.

    Reply
  17. vkt
    DimitrT пишет:

    Вопрос: Корректировка записей регистра отображается?

    Смотри пример отображения «Корректировки записей регистра»

    Корректировка сформирована как сторнирование документа «Перемещение…», поэтому есть и приход и расход.

    Reply
  18. Vond

    Сейчас проверим на УПП для Украины. По описаниям и назначению отчет очень вкусненький 🙂

    Reply
  19. vkt

    (18) miha.e82, Хорошо.

    Скачивается без проблем? А то вчера файл скачивался без расширения.

    Reply
  20. gull22

    Работаю в Комплексной автоматизации в РАУЗ. Ведется сложный учет НДС, задействован РН «НДС по партиям запасов». Не до конца разбираюсь в механизме списания по этому регистру. Может Вам приходилось.

    Вопросы: можно ли сделать такой отчет и для сравнения регистров «Товары на складах» и «НДС по партиям запасов»?

    Reply
  21. PastorNak

    Попробовал на Упраление торговлей 10.3. Работает. Спасибо большое отличный отчет.

    Reply
  22. higs

    Большое спасибо! У самого был подобный отчет, но только для консоли запросов. Для меня хватало, а тут потребовалось и для бухгалтеров. Самому дорисовывать не хватает времени, так что еще раз спасибо за наглядный отчет!

    Reply
  23. vkt
    gull22 пишет:

    Вопросы: можно ли сделать такой отчет и для сравнения регистров «Товары на складах» и «НДС по партиям запасов»?

    Сравнить эти регистры можно. Только как их сравнивать? «Товары на складах» учитывают только количество, а «НДС партий товаров» — Количество, Сумму и сумму НДС. Уточни задачу — как ты обычно ищешь косяки в расхождении показателей?

    Reply
  24. mig090874

    Может что-то я не понимаю. Попробовал отчет в Управление торговлей 10.3. Отчет показывает, что все хорошо нет никаких расхождений. Закручиваю стандартный отчет Стоимость по партиям показывает, что у меня по многим партиям перерасход. Сплошная краснота.

    Reply
  25. vkt

    (24) mig090874, Отчет сравнивает Склад и Партии по количеству.

    С УТ не работаю. В УПП отчет «Стоимость по партиям» отсутствует, поэтому проверить не могу.

    Твой отчет показывает что — перерасход по количеству? Т.е. какие-то партии списываются (расходуются) несколько раз? Обычно наоборот — по складу списывается, а партии — нет (когда документы перепроводятся задним числом).

    Reply
  26. t1313

    Спасибо большое, то что нужно!

    Reply
  27. rintik

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

    Reply
  28. vkt

    (27) rintik, Отчет показывает информацию по регистрам «Товары на складах» и «Партии товаров на складах». Если документы на давальческие товары делают движения по этим регистрам, то будут показаны.

    Для сравнения регистров «Товары переданные» и «Партии товаров переданные» необходимо делать другой отчет.

    А по каким регистрам поступает давальческое сырье на переработку?

    Reply
  29. rintik

    ммм, «Партии товаров переданные» — если не ошибаюсь это реализация по договору комиссии. Я не корректно написал — «давальческие товары» — имеется ввиду продукция произведенная из давальческого сырья. Документ «Реализация услуг по переработке» делает движения по регистру «Партии товаров на складах», регистр «Товары на складах» двигается документом «Передача товаров». Я скачивал и доработал под УПП для себя обработку http://infostart.ru/public/77000/ (добавил сравнения по трем регистрам партий (упр, бух и НУ) часто используется теперь бухами, но с док «Передача товаров» ничего не исправлял, просто однозначного соединения этих двух документов кроме заказа и количества я не нашел. Думал мож здесь есть решение.

    Reply
  30. vkt

    (29) rintik, «Партии товаров переданные» — это материалы переданные переработчику.

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

    Reply
  31. alekseineputin

    Так же как и (22) скачаю, плюс поставлю в любом случае.

    Reply
  32. sevipa

    У нас тоже есть подобный отчет, но лн настолько навороченый что пользователи так и не научились его разгадывать, а этот отчет пойдет на УРА! Спасибо, плюс поставил

    Reply
  33. yuriyscr

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

    Reply
  34. Bassgood

    Автору рекомендую, если отчет предназначен для выявления и отображения каких-либо расхождений — выделите в отчете эти расхождения для большей наглядности при помощи условного оформления строк или ячеек отчета. Ну и также, как и было сказано ранее — неплохо бы вынести панель отборов СКД на форму отчета, чтобы пользователи не лазили в его настройки, а то отчет кажется не полностью доделанным.

    Reply
  35. master_devel

    Проверил на УПП. Все Ок. Отчет очень понравился. Сам бы морочился дня два. А так автору респект. Полезно давать этим отчетом по морде бухам, которые не читают сообщения системы при списании товара в РН. Спс за отчет.

    Reply
  36. tmaker

    Спасибо, тоже пригодился!

    Reply
  37. Kamikadze

    как мне кажется — ничего особенного. обычный отчет сверки данных

    Reply
  38. artur_antipin

    Спасибо, пригодилось!

    Reply
  39. iov

    (37) Именно так , но очень полезный отчет. Это как нож или зубочистка — все просто кусок заточенного и щепка. Самому делать в лом а в хозяйстве пригодится. А учитывая уровень большинства бух — то для них это вообще откровение…

    Reply
  40. Kamikadze

    для них вообще откровение — какие еще регистры????!!! 😉

    Reply
  41. svcoopers

    Нужная вещь! Спасибо огромное. У нас время от времени такая ситуация возникает. Пришлось полуавтоматически сравнивать. А здесь- готовое решение

    Reply
  42. diarki

    Спасибо! в партионном учете необходимая вещь. быстро и удобно выловить «косяки»

    Reply
  43. Maks_Payn

    Спасибо! Нужный отчет! У нас тоже иногда возникает такое, что регистры расходятся.

    Reply
  44. vkt

    (34) Zigfridish, Последняя колонка отчета называется Разность, в которой содержится сумма расхождений.

    Становишься в эту колонку. Жмешь Shift-Up. Попадаешь в первую ячейку с расхождением и анализируешь.

    Цветом выделяются отрицательные числа в ячейках.

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

    Reply
  45. vkt

    (37) Kamikadze, Ты прав — ничего особенного. Но того что нужно было — нигде не нашел. Есть аналоги, но они требуют доработки под свои нужды, а нарушения авторских прав не приветствуются и сурово наказываются. Велосипеды тоже до сих пор изобретаются, причем все совершеннее, чему, как известно, нет предела.

    Reply
  46. Artemuch2

    Отчет отличный! Вот только вопрос а как учитывается комплектация, и возвраты от покупателей?

    Reply
  47. Artemuch2

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

    Reply
  48. infosoft-v

    Проверил на УТ 10.3. Всё работает отлично. Удобно, просто и наглядно. Поставлю главному бухгалтеру.

    Есть маленькое пожелание/предложение, зафиксировать заголовок. Когда его нет в поле видимости, приходится считать колонки, что бы понять где приход а где расход.

    Reply
  49. eryomenko

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

    Reply
  50. serge_focus

    Спасибо! Класный отчет! Пользовался подобным через консоль запросов. Все хотел сделать в виде отчета.

    А тут — все уже сделано.

    Reply
  51. kosten

    А будет ли работать данный отчет под Управление торговым предприятием?

    Reply
  52. vkt

    (53) kosten, Что-то я не знаю такой конфигурации

    Reply
  53. kosten

    (54) спасибо уже не требуется, сделал аналогичный отчет для УТП и УТ (украинские конфигурации) используя встроенный универсальный отчет. http://infostart.ru/public/118128/

    Reply
  54. Komkovi

    А с помощью данного отчета возможно выявить расхождение данных по регистрам (Партии товаров на складах УУ БУ НУ, Плану счетов БУ НУ, Ндс по партиям запасов, Товарам организаций, Товаров на складах, Свободных остатков?

    Reply
  55. vkt

    (57) Komkovi, С помощью этого отчета требуемые расхождения выявить нельзя.

    Reply
  56. vamleshka

    Я так понимаю он не всегда корректно работает? для обычной УПП 1.2 подойдет?

    Reply
  57. vamleshka

    мне кстати более важно сравнение БУ и УУ по партиям. может кто видел такой отчет?

    Reply
  58. sumixam

    Спасибо отчет пригодился

    Reply
  59. svbel85

    Отбор работает как-то странно, если нужны например только строки с расхождениями

    Reply
  60. vkt

    (62) svbel85, Подобным отбором не рекомендую пользоваться. Этот режим не отрабатывался — быстрое решение не нашлось.

    Reply
  61. LeonidH

    Отчет отличный! Спасибо!

    Reply

Leave a Comment

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