Обзор блока адресного хранения в программах 1С: УТ, ERP и КА




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

23 Comments

  1. osyko

    Спасибо за обзор! Хотелось бы дополнить что после Ввода остатков предоставляется возможность изменять структуру склада в процессе работы — разделить существующий склад на помещения и/или внедрить на складе/помещении систему адресного хранения остатков. Для разделения остатков товаров на складе по помещениям используется типовой документ «Переход на использование складских помещений». Используя данный документ можно сначала заполнить информацию о товарах в одном помещении, а затем заполнить остатками товаров в другом помещении.

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

    Reply
  2. CheBurator

    В «общих чертах» — да. Но не более.

    Нигде не отмечено, что для торговых компаний складская перевалка товара является одной из самых ресурсоемких/трудозатратных операций (это менеджер может одним плевком заявку на 10 тонн передвинуть на 3 часа пораньше отгрузить, наплевав что склад просто (__о__) порвет — он то эти 10 тонн не двигает…) Поэтому утверждение что блок адресного хранения «…довольно объемный и покрывает 90% потребностей торговых и производственных предприятий, имеющих свой склад». Если под адресным хранением рассматривать только возможности задания топологии склада — то, возможно, да. Во всем остальном, существенном, — процентов 20% (особенно в принципах управления работой на таком складе — все только вручную, генерация заданий и отметки о их выполнении). Конечно, надо отметить, что эти 20% действительно, могут покрывать 80-90% первоначальных потребностей склада.

    Автор постоянно путает «области хранения» и «зоны хранения» — вообще-то в складской логистике это немножко разные сущности (да и устоявшейся терминологии до сих пор — нет). Обычно под «зоной хранения» понимают ЛОГИЧЕСКУЮ совокупность ячеек. А «область хранения» — совокупность физически связных ячеек. Поэтому обычно ячейка входит в какую-то одну область (ряд, проход), но запросто может входить в несколько логических зон (или наоборот если поменять терминологию когда Область — это логически связанные, а Зоны — физические — тут кто как.. 😉

    Как-то, давным-давно, когда появились джинсы на одной комсомольской конференции кто-то из старшеклассников у нас в школе с трибуны постоянно упоминал «барона Вранглера». Так и здесь — одну ошибку я принял бы за опечатку, но автор почему-то работает с «приходными орденами».. 😉

    Reply
  3. AlexCherdakov

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

    Reply
  4. rusmm93

    Подскажите, где в ERP распечатывается штрихкод серии товара?

    Reply
  5. genayo

    (3) Только вот если склад отличается от того, что теоретически представляют себе методологи ERP, не видевшие реальных складов — дорабатывать придётся серьёзно.

    Reply
  6. ids79

    (1)

    Для разделения остатков товаров на складе по помещениям используется типовой документ «Переход на использование складских помещений»

    Вы уверены? Я что-то не слышал о таком документе. И в дереве документов тоже его не вижу УТ 11.4.5.129. Может быть он как-то по другому называется, или это обработка?

    Reply
  7. AlexCherdakov

    (5) дорабатывать придется в любом случае, «из коробки» не работает, однако мы обошлись небольшими доработками при нескольких оговорках: при отборе сделать обход склада по нашим правилам не представляется возможным (слишком убогий функционал) и отказ от автоматического размещения в ячейках с заменой его на свободное размещение с тсд (взял задание на размещение пропикал товары переложил в ячейку пикнул ячейку подтвердил)

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

    Reply
  8. AlexCherdakov

    (4)в erp незнаю в ут приходный ордер на товары-показать серии-печать

    Reply
  9. CheBurator

    (3) Если может автоматически и то и то — почему не включить эту возможность сразу?

    Reply
  10. AlexCherdakov

    (9)никто вам не запретит включайте, но я выбрал ручную генерацию заданий и автоматическое их закрытие. Там все на регламентных заданиях и если что-то где-то не так то … в общем автоматизация склада в пределах 200т.р. за ПО и его настройку накладывает некоторые ограничения )) все остальное на рынке от нескольких миллионов вот там уже можно развернуться по полной и предъявлять претензии из серии «почему мои дроны при инвентаризации склада по rfid меткам пропускают третий ярус второго ряда и не учитывают работу погрузчиков»

    Reply
  11. Rustig

    когда внедрите адресное хранение в одной конфигурации (на 7-ке, в самописной, в отраслевой) — тогда поймете принципы внедрения такой подсистемы, принципы учета складских операций, взгляните на склад в разрезе протекающих в нем процессов, и тогда вас уже не остановить в вашей фантазии реализовать ту или иную функциональность с помощью ШК, ТСД, голосовых команд и других будущих фишек (ботов телеграмм, http-сервисов), gps-навигацией.

    прошу любить и жаловать мою публикацию на эту тему:

    https://infostart.ru/public/940623/

    Reply
  12. rovenko.n

    (5) а чем реальный склад отличается от того, что себе представляют методологи ERP? Имею успешный опыт внедрения складского учета без доработок на неторговом предприятии.

    Reply
  13. rovenko.n

    (7)

    то все реш

    Мы тоже отказывалист от автоматического размещения. Я вообще не уверен, что в средних/крупных предприятиях можно достаточно точно описать условия отборов и прочего для склада.

    Reply
  14. rovenko.n

    (9) Главный принцип ЕРП — «мы всё можем сделать автоматически, но если вам не нравится, вы всегда можете изменить значение по умолчанию». Так что заполнение — это, скорее, помощь и подсказка, а не руководство к действию.

    Reply
  15. acanta

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

    Reply
  16. rovenko.n

    (4) В меню выбора серии во всех документах. Прямо под реквизитами находится кнопка «Печать этикетки» — это этикетка серии

    Reply
  17. rovenko.n

    (15) У меня 2 случая опыта работы со складом. Оба раза сперва делали авттоматическое заполнение, потом отказались, переложили это на работника склада.

    Reply
  18. genayo

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

    Reply
  19. rovenko.n

    (18) м-м-м, а что мешает не писать 50 строк? Напишите 1, да и всё.

    Reply
  20. genayo

    (19) В типовой УТ11? Это возможно?

    Reply
  21. rovenko.n

    (20)Конечно!!! Это из строчки нельзя сделать таблицу. А из таблицы строку очень просто.

    Reply
  22. WellMaster

    Приходный ордер

    Спасибо за статью, познавательно

    Reply
  23. kolikovmv

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

    Reply

Leave a Comment

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