Поиск расхождений в движениях товаров и партий (8.1 и 8.2)




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

53 Comments

  1. 1c-intelligence

    Расхождения между оперативными товарными регистрами и партиями товаров (УУ, БУ, НУ) в удобном, понятном и гибком отчете.

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

    Reply
  2. IDija

    (0) Добавь скрин для УТ в разрезе серий и характеристик.

    Reply
  3. DragonAgo

    Для УТ 10.3 не идет! Выскакивают ошибку! Недоделанная обработка!

    Reply
  4. 1c-intelligence

    (1) IDija, как только найду УТ — обязательно добавлю. Версии для УТ выложил.

    Reply
  5. 1c-intelligence

    (2) DragonAgo, выложил версии для УТ 10.3.

    Reply
  6. IDija

    (3) То есть на УТ не тестировали? Так не пойдет…

    Reply
  7. 1c-intelligence

    (5) IDija, что вы имеете в виду, когда говорите «Так не пойдет»? Может еще в угол меня поставите?

    Reply
  8. IDija

    (6) рассмешил…

    Reply
  9. 1c-intelligence

    (7) IDija, а почему на «ты»?

    Reply
  10. _LEV_

    Кто-нибудь тестил на УТ 10.3?

    Reply
  11. 1c-intelligence

    (9) _LEV_, я тестил, скриншот прилагаю.

    Reply
  12. 1c-intelligence

    (9) _LEV_, вот проверка на 8.2 и УТ посвежее (во вложении).

    Reply
  13. OlegrVasil

    Итог теста плачевен Ошибка в схеме компоновки данных

    по причине:

    Ошибка получения информации набора данных

    по причине:

    Ошибка в запросе набора данных

    по причине:

    {(114, 2)}: Таблица не найдена «РегистрНакопления.ПартииТоваровНаСкладахНалоговыйУчет.Обороты»

    <<?>>РегистрНакопления.ПартииТоваровНаСкладахНалоговыйУчет.Обороты(, , Регистратор, ) КАК ПартииТоваровНаСкладахНалоговыйУчетОбороты

    Reply
  14. 1c-intelligence

    (12) OlegrVasil, расскажите поподробнее — какая программа, какой релиз, какая платформа. Обратите внимание, что у отчета 2 версии — для УПП и для УТ. В УТ только один регистр партий.

    Reply
  15. lost1971

    Ошибка при выполнении файловой операции ‘O:Отчеты и обработки для 8.1-8.2
    askhozhdeniepartiyitovarovut.103.82.erf’

    по причине:

    Неверный формат хранилища данных ‘file://O:/Отчеты и обработки для 8.1-8.2/raskhozhdeniepartiyitovarovut.103.82.erf’

    Reply
  16. 1c-intelligence

    (14) lost1971, сообщите какая у вас версия платформы и в какой программе открываете. Выглядит так, что вы открываете версию для 8.2 на платформе 8.1.

    Reply
  17. OlegrVasil
    zaebunga пишет:

    (12) OlegrVasil, расскажите поподробнее — какая программа, какой релиз, какая платформа. Обратите внимание, что у отчета 2 версии — для УПП и для УТ. В УТ только один регистр партий.

    платформа УПП и УТП обе последние релизы

    Reply
  18. 1c-intelligence

    (16) OlegrVasil, УПП — это не платформа. УТП — это что? Сообщите номер версии УПП и номер версии платформы.

    Reply
  19. belzharko

    Проверила,на УПП работает все нормально.

    Reply
  20. OlegrVasil

    (17) 1С:Предприятие 8.2 (8.2.14.540),»Управление производственным предприятием для Украины», редакция (1.3.14.3)

    Reply
  21. 1c-intelligence

    (19) OlegrVasil, попробуйте приложенный файл. К сожалению, у меня нет УПП для Украины, поэтому действовать буду наугад. Пишите, постараюсь помочь. На данный момент удалил из схемы компоновки налоговый регистр партий.

    Будет хорошо, если приложите скриншоты структуры регистров ПартииТоваровБухгалтерскийУчет и ПартииТоваровНаСкладах.

    Reply
  22. dtitov

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

    Reply
  23. 1c-intelligence

    (21) dtitov, спасибо, рад что помогло.

    Reply
  24. nll.jojo

    помогло так помогло!!!!

    Reply
  25. 1c-intelligence

    (23) nll.jojo, круто, я рад.

    Reply
  26. max61

    А для Бухгалтерии 8.1 подойдет? )

    Reply
  27. 1c-intelligence

    (26) max61, если расскажете, что там с чем хотите сравнивать — сделаю версию для Бухгалтерии. Там же регистра ТоварыНаСкладах нет, и партии только по НУ.

    Reply
  28. infotrade

    Проверил УПП 1.3 работает спасибо!!!

    Reply
  29. Гость

    интересная публикация. буду пробовать и сравнивать с подобными. Благодарю!)))

    Reply
  30. 1c-intelligence

    (30) Гость, спасибо, наслаждайтесь.

    Reply
  31. acherey

    Спасибо, прекрасная вещь. Очень доволен. Отчасти решил просблему «Остатки товара — Свободные остатки», много чего выявил.

    Reply
  32. 1c-intelligence

    (32) acherey, спасибо, наслаждайтесь.

    Reply
  33. Kostalmed

    Извините но чтото я не вижу чуть ли не самого главного показателя в данном отчете!! Где остаток????!!!!

    Reply
  34. 1c-intelligence

    (34) Kostalmed, если объясните, зачем он там нужен — я его выведу.

    Назначение отчета:

    1. Поиск и устранение расхождений по документам (т.е. простой рабочий инструмент);

    2. Общая оценка расхождений, перед или после работ по закрытию месяца, например.

    Что вам даст понятие «остаток расхождений»? Что оно в себя включает? Чем отличается от суммы расхождений?

    Reply
  35. sevipa

    На КА кто-нибудь тестил?

    Reply
  36. pss1985

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

    Reply
  37. pss1985

    а так ставлю плюс, для пользователей в самый раз!

    Reply
  38. climepost

    Коротко и информативно! Ставлю плюс!

    Reply
  39. itwonline

    У меня тоже не работает:

    Ошибка в схеме компоновки данных

    по причине:

    Ошибка получения информации набора данных

    по причине:

    Ошибка в запросе набора данных

    по причине:

    {(93, 2)}: Таблица не найдена «РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.Обороты»

    <<?>>РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.Обороты(, , Регистратор, ) КАК ПартииТоваровНаСкладахБухгалтерскийУчетОбороты

    Версия 1с:

    Reply
  40. katunya88

    от души благодарю!

    Reply
  41. AKV77

    Спасибо, то что искал.

    Reply
  42. Motor24

    Спасибо, попробую в работе. Надеюсь пойдёт

    Reply
  43. Motor24

    Рано обрадовался. Та же проблема, что и у (40).

    Ошибка в схеме компоновки данных

    по причине:

    Ошибка получения информации набора данных

    по причине:

    Ошибка в запросе набора данных

    по причине:

    {(93, 2)}: Таблица не найдена «РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.Обороты»

    <<?>>РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.Обороты(, , Регистратор, ) КАК ПартииТоваровНаСкладахБухгалтерскийУчетОбороты

    Reply
  44. 1c-intelligence

    (44) Motor24, Вы какой файл скачали? Для какой конфигурации? И какая у вас конфигурация?

    Reply
  45. Motor24

    (45) приношу автору и всем свои извинения. Нажимал для скачивания на основной ярлык, не переходя конкретно к файлам. В итоге скачал для УПП 8.2 *стыдливый смайлик*, а надо было для УТ 8.2

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

    Reply
  46. husky

    Результат обработки пустота — ничего….УПП 1.3.35.1 (8.2)

    В чем проблема?

    Reply
  47. 1c-intelligence

    (47) husky, Может у вас РАУЗ?

    Reply
  48. husky

    (48) НЕТ НЕ РАУЗ, ТОЧНО!

    Reply
  49. 1c-intelligence

    (49) husky, как вариант — у вас все хорошо, последовательность восстановлена.

    Reply
  50. husky

    Не знаю, косяки есть — точно уверен, но программа выдает пустой отчет.

    Reply
  51. kaa79

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

    Reply
  52. Castlevania

    Скачала для УТ. К сожалению отчет содержит много ошибок. Например заказ покупателя. Он делает движения + — по партиям, по товарам на складах не делает. Это нормальная ситуация. Также перемещение по ордерной схеме: расходный ордер делает — по товарам на складах, приходный ордер делает + по товарам на складах и +- по партиям. Это все и так знают, смысла нет выводить это в отчете.Также с возвратом от покупателей, как уже отметил каа79. Интересуют ситуации когда например в перемещении забыли ввести приходный ордер. Или когда реализация не списала партию-только такие, действительно ошибочные ситуации должны попадать в отчет. Считаю что отчет сырой

    Reply
  53. IsiKosta

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

    Reply

Leave a Comment

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