Удаление движений регистра накопления Резервы товаров организаций УФ




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

25 Comments

  1. Katerpal

    Стандартный механизм покупки за стартмани не работает — пишет что снимет 1 еденицу, Пишет что отправил на емайл — но ничего не отправляет. Прошу выслать на электронку katerpal@inbox.ru

    Reply
  2. Katerpal

    Как удалить по конкретному документу резервы? Можно выбрать удаление резервов за 1 день, но при механизме интеркампани она резервирует передачу товаров между организациями и ставит на 31 число все передачи по всем документам. Есть ли возможность вычистить резервы по конкретному документу? Не трогая правильные резервы

    При открытии резерва организации через все функции — видно что поставила по документу завышенные резервы, удалить или изменить их не получается

    Reply
  3. PSMNN

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

    Reply
  4. kravchuk

    Коллеги, подскажете как определить какой резерв лишний?

    Reply
  5. nightn

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

    Спасибо разработчику за обработку! Работает =)

    Reply
  6. user1048024

    (1) Тоже самое, за стартмани ничего не отправлено, прошу выслать на zolin@dimaxsleep.ru

    Reply
  7. Katerpal

    Обработка работает спасибо, но при этом гасит резервы все за 1 день, но резервы весят на 31 число по механизму интеркампани и там много документов

    по ссылке привел как удалить резервы по конкретному документу если возникает такая ошибка. Без включения обработки. Метод тупой но рабочий.

    https://infostart.ru/public/900350/

    Reply
  8. klaus38

    Дай тебе Бог здоровья.. Добрый человек. Выручил!))

    Reply
  9. evn-zorin

    3 стартмани за 15 строк, однако)

    Reply
  10. Xershi

    (7) это фишка, когда перепроводят доки задним числом и система анализирует остатки.

    В любом случае помощник все умеет искать и исправлять https://infostart.ru/public/797618/, указав например весь год наперед!

    Кроме случаев когда движения уже закрылись, тогда с версии УТ 11.4.5 нужно запустить регламентное задание свертки движений, если не охота ждать пока оно само запустится.

    Reply
  11. fox_haus

    Что то не удаляет движение ваша обработка, удаляю по выбранному документы и движения в регистре остаются. УТ11 (11-4-6-230)

    Reply
  12. Margoutte

    Всем привет! А если регистр Резервы организации пустой, но ошибка есть. Что делать?

    Reply
  13. PSMNN

    (12) Добрый день Margoutte! Текст ошибки напишите.

    Reply
  14. PSMNN

    Добрый день Margoutte! Текст ошибки напишите.

    Reply
  15. Margoutte

    При записи Реализации…. в регистры ТоварыОрганизаий и РезервыТоваровОрганизаций обнаружен лишний резерв по измерениям: Наша Орг — Профиль…Склад-Собственный товар; Организация: Наша Орг — <без номера ГТД> лишний резерв 18

    Reply
  16. PSMNN

    (15) Если чистите регистр резервов по ссылке, то не поможет. Нужно чистить за период (как правило месяц — с первого числа месяца до последнего), но потом нужно будет перезакрывать месяц.

    Reply
  17. Margoutte

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

    Reply
  18. Margoutte

    В документе «Передача товаров» движения только по регистру ТоварыОрганизаций

    Reply
  19. Margoutte

    нашла косяк. Регистр заполнен был, надо было установить стандартные настройки

    Reply
  20. sergey512

    Обработка полная фигня, думал она как-то анализирует проблему и показывает откуда берется лишний резерв. А очистить можно и так элементарно.

     Запрос = Новый Запрос;
    Запрос.Текст = «ВЫБРАТЬ РАЗЛИЧНЫЕ
    | РезервыТоваровОрганизаций.Регистратор КАК Регистратор
    |ИЗ
    | РегистрНакопления.РезервыТоваровОрганизаций КАК РезервыТоваровОрганизаций
    |ГДЕ
    | РезервыТоваровОрганизаций.Регистратор.Проведен = ЛОЖЬ»;
    
    
    табРезультат = Запрос.Выполнить().Выгрузить();
    
    Для Каждого стр из табРезультат Цикл
    
    Попытка
    
    Набор = РегистрыНакопления.РезервыТоваровОрганизаций.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(стр.Регистратор);
    
    набор.Очистить();
    набор.ОбменДанными.Загрузка = Истина; //отключить контроль в регистре ПриЗаписи
    Набор.Записать();
    
    
    Исключение
    Сообщить(Строка(стр.Регистратор));
    КонецПопытки;
    
    КонецЦикла;
    

    Показать

    Reply
  21. user727369

    (3) Добрый день. Подскажите пожалуйста. Хочу запустить данная обработка на период, тем самым очистятся записи в регистрах РезервыТоваровОрганизации. После удаления необходимо ли распроведение всех документы? Если запустить стандартную перепроводку документов. Перезапишутся резервы в доках?

    Reply
  22. user727369

    (20)Добрый день. Может у Вас есть готовое решение по данной проблеме?

    Reply
  23. PSMNN

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

    Reply
  24. sergey512

    (22) Решения, которое анализирует проблему и показывает откуда взялся лишний резерв нет.

    Reply
  25. user727369

    (23) Список документов не маленький получается. К данной обработке добавить ссылки на документы которые необходимо провести и функцию перепроведения.

    Reply

Leave a Comment

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