Анализ заказов покупателей для УТ 11 (на управляемых формах)




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

65 Comments

  1. ekaruk

    Что за дурацкая манера зарисовывать половину картинки.

    Если там какая-то коммерческая информация, запусти на демке и покажи результат.

    Нифига же непонятно, что отчет показывает.

    Reply
  2. altek

    (1) ekaruk, Злить никого не хотел, сори 🙁

    Думал, что по группировкам в шапке будет понятно что в белых квадратиках: на первом скрине Организация — Контрагент — Заказ клиента — Номенклатура по иерархии, на второи скрине — Номенклатура.

    Reply
  3. pbazeliuk

    А чем не угодил штатный механизм управления запасами?

    Reply
  4. altek

    (3) pbazeliuk, Там нет данных по оплатам, СКД-шных отборов и группировок.

    Reply
  5. Kolledei

    Ошибка исполнения отчета

    по причине:

    Ошибка при выполнении обработчика — ‘ПриКомпоновкеРезультата’

    по причине:

    {ВнешнийОтчет.АнализЗаказовКлиентов.МодульОбъекта(94)}: Поле объекта не обнаружено (ЗаказКлиента)

    Если ЗначениеЗаполнено(стр.ЗаказКлиента) И ЗначениеЗаполнено(стр.Номенклатура) И ЗначениеЗаполнено(стр.ПользовательскиеПоляПоле1) И стр.ПользовательскиеПоляПоле1 > 0 Тогда

    Reply
  6. altek

    (5) Kolledei, На какой версии УТ запускаете отчет?

    Reply
  7. ExpertAdmin

    Управление торговлей, редакция 11.1 (11.1.10.103)

    Ошибка исполнения отчета

    по причине:

    Ошибка при выполнении обработчика — ‘ПриКомпоновкеРезультата’

    по причине:

    {ВнешнийОтчет.АнализЗаказовКлиентов.МодульОбъекта(94)}: Поле объекта не обнаружено (ЗаказКлиента)

    Если ЗначениеЗаполнено(стр.ЗаказКлиента) И ЗначениеЗаполнено(стр.Номенклатура) И ЗначениеЗаполнено(стр.ПользовательскиеПоляПоле1) И стр.ПользовательскиеПоляПоле1 > 0 Тогда

    Reply
  8. altek

    (7) Bodyk, Здравствуйте, проверено на демо версии 11.1.10.103 — отчет формируется. Ваша конфигурация типовая, не измененная?

    Reply
  9. sbshop

    А в редакции 11,2 этот должен работать?

    Выдает ту же ошибку что и у Kolledei

    Reply
  10. altek

    (9) sbshop, Да, на последней версии (11.2.2.116) работает, только что проверил на демо базе.

    Reply
  11. redsun1981

    Отчет работает только при включенной функциональной опции «ИспользоватьОбособленноеОбеспечениеЗаказов». В демо базе она включена.

    Reply
  12. Nevskiy83

    на 11.2.3.182 не работает

    Reply
  13. 1st RUS

    у меня отчет работает.

    но в настройки не входит — ошибка передачи служебного параметра «НастройкиОтчета». как-то так…

    Reply
  14. altek

    (13) 1st RUS, Скорее всего открываете через «Файл — Открыть…» ?

    Нужно добавить отчет во внешние обработки (Администрирование — Внешние печатные формы и обработки).

    Reply
  15. yudakovst

    Подскажите, проверялось ли на версии УТ 11.3 ?

    Reply
  16. luckardo

    Управление торговлей, редакция 11.2 (11.2.3.143)

    ошибка Поле обьекта не обнаружено «заказ клиента»

    Reply
  17. user610722_lsn

    Управление торговлей, редакция 11.2 (11.2.3.202), сам отчёт работает, нажатие на «Настройки» выдаёт — «Не передан служебный параметр «НастройкиОтчёта». Обработку подключил в Дополнительные отчёты и обработки. Что делать?

    Reply
  18. Ford_Henry

    Управление торговлей, редакция 11.3 (11.3.3.163)

    ошибка Поле обьекта не обнаружено «заказ клиента»

    Reply
  19. altek

    (18) Проверил отчет на демо-версии 11.3.3.163. Все работает, ошибки нет. У вас типовая конфигурация?

    Reply
  20. altek

    (15) Да, на версии 11.3.3.163 работает.

    Reply
  21. altek

    (17)Поправил. Выслал отчет в ЛС. Позже и публикацию обновлю.

    Reply
  22. user791122

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

    И если делать корректировки, учитывает ли этот отчет их? Спасибо.

    Reply
  23. altek

    (22)Да, это кол-во будет в колонке «Заказано». И да, корректировки учитываются.

    Reply
  24. user791122

    (23) Алексей, а скажите, как сделать, чтобы эта колонка «Заказано» появилась. У меня ее нет и в настройках не нашел.

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

    Спасибо.

    Reply
  25. altek

    (24)Колонка «Заказано» идет после резерва и до колонки «Осталось обеспечить».

    Имелась ввиду корректировка регистров, не реализации. Сори, не так понял

    Reply
  26. user880350

    Здравствуйте. На основании заказа покупателя сформированы заказы поставщикам.

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

    2. Можно ли видеть, какие из заказанных позиций пришли на склад и готовы к отгрузке?

    Благодарю вас

    Reply
  27. altek

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

    Reply
  28. rassigor

    Купил отчет,

    1) При нажатии создать заказ поставщику

    {ВнешнийОтчет.АнализЗаказовКлиентов.Форма.ФормаОтчета.Форма(51)}: Поле объекта не обнаружено (КПоступлению)

    ПараметрыЗаполнения.Вставить(«Статус», Перечисления.СтатусыЗаказовПоставщикам.КПоступлению);

    2)При нажатии кнопки настройки

    {ОбщаяФорма.ФормаНастроекОтчета.Форма(31)}: Не передан служебный параметр «НастройкиОтчета».

    ВызватьИсключение НСтр(«ru = ‘Не передан служебный параметр «»НастройкиОтчета»».'»);

    11.3.4.149.

    Reply
  29. klaus38

    Добрый для 11.4 пойдет?

    Reply
  30. altek

    (29) Добрый день. На 11.4 не тестировал, не знаю точно

    Reply
  31. alex_phantom

    А будет работать на последних релизах 11.4?

    Reply
  32. altek

    (31) Не знаю, на последних версиях не проверял.

    Reply
  33. capitan

    11.2.3.129 работает

    Спасибо

    Reply
  34. annagolinskaya

    Отвечу на вопрос идет ли данный отчет на 11.4. Ответ: «Всё работает», при учете всего вышесказанного. Проверила на 11.4.5.86.

    Но анализ не совсем понравился. А именно, после того как заказ закрывается, то есть, отменяются некоторые строчки. То Отгружено становится равным Запланировано, что не верно.

    Может же быть такое заказали 100 единиц товара, продали 99 единиц, а одну отменили. Отменили не значит,что продали и отгрузили.

    Если уж это АНАЛИЗ, то хочется анализировать. А так информация, которая выходит в отчете можно и так получить штатными средствами.

    Но, всё, равно, спасибо.

    Reply
  35. mangust4

    11.4.2 — не работает(((

    Поле обьекта не обнаружено «заказ клиента»

    Reply
  36. altek

    (35) Здравствуйте. Для новой версии УТ этот отчет я не делал, он создавался для старой версии .Это писалось выше неоднократно. Могу лишь предположить, что у Вас не включен обособленный учет заказов в настройках.

    Reply
  37. sevipa

    Добрый день!

    Уточните плиз условия когда заполняются колонки отчета а особенно Заказано!? Обособленный учет товаров по заказу включен.

    Вот мой процесс обработки заказа, может что-то я неверно оформляю?!

    1.На основании заказа покупателя ввел Заказ поставщику на часть товара.

    2. в заказе Покупателя перезаполнил обеспечение, в строке появилось состояние Резервировать к дате, в отчете колонка Заказано не заполнена!

    3. После на основании Заказа поставщику ввел Поступление (перезаполняю обеспечение в заказе покупателя), заполнилась колонка Резерв и Осталось обеспечить (все верно)

    4. Ввожу Заказ поставщику на остальной товар (перезаполняю обеспечение в заказе покупателя), провожу. Колонка Заказано не заполнена!

    5. После на основании Заказа поставщику ввел Поступление (перезаполняю обеспечение в заказе покупателя), заполнилась колонка Резерв и Осталось обеспечить пустое (все верно)

    6. Снова перезаполняю обеспечение в заказе покупателя, устанавливаю статус Отгрузить, колонка Осталось обеспечить снова заполняется данными, ровно теми позициями которые находятся в заказе покупателя в статусе Отгрузить…

    7. Отгружаю часть товара. Заполняется колока Отгружено, в колонке Осталось отгрузить ровно те позиции которые еще не отгружены, и это же количество в колонке Осталось обеспечить!

    Конфигурация ут11.4, но механизмы этого модуля по сравнению с 11.3 не изменялись!

    Reply
  38. altek

    (37)Добрый день. В запросе есть только одно жесткое условие на вывод информации в колонках — тип номенклатуры должен быть равен «Товар» или «Услуга». Ну и условие на период естественно — дата между начальной датой и конечной датой. Связь между документами определяется назначением, точнее заказом, который указан в назначении. Указано ли назначение в заказе поставщику / поступлении / реализации?

    Reply
  39. sevipa

    Извините но я туплю… где в заказе поставщику и остальных документах можно увидеть Назначение… по иераржии документов видно следующее

    Коммерческое предложение клиенту МКЦБ-000001 от 16.07.2018 0:00:00 на сумму 643 505,3 руб.

    ГУЗ , МКЦБ-1, 16.07.2018 (Заказ клиента) (Назначение)

    Заказ клиента МКЦБ-000001 от 16.07.2018 13:43:57 на сумму 644 087,5 руб.

    Заказ поставщику МКЦБ-000001 от 01.08.2018 12:00:02 на сумму 326 175,6 руб.

    Приобретение товаров и услуг МКБП-000103 от 29.08.2018 12:00:00 на сумму 276 420 руб.

    Реализация товаров и услуг МКЦБ-000001 от 29.11.2018 22:00:05 на сумму 367 467,8 руб.

    Заказ поставщику МКЦБ-000002 от 29.11.2018 22:21:12 на сумму 244 631,7 руб.

    Приобретение товаров и услуг МКБП-000116 от 04.10.2018 13:32:52 на сумму 207 315 руб.

    но в самих документах такого реквизита нет…

    Reply
  40. altek

    (39)Колонка с назначением появляется во вкладке товаров при включенном обособленном учете в настройках. Там где все номенклатуры вбиваете.

    Reply
  41. sevipa

    Спасибо огромное разобрался! Все работает на версии 11.4.

    Есть пожелание! Очень не хватает расшифровки до регистратора! либо по данным в колонках по двойному нажатию (предпочтительно) либо новой иерархией!

    Reply
  42. sevipa

    И все таки вопросы остались!

    Как заполняется колонка Оплачено и Осталось оплатить?

    у меня в договоре устанволена детализация по договорам, и соглашения не оформляются, только договора!

    Наверное это неправильно, а как верно?

    Мне сейчас в начале можно подстроиться под реграмент и настройки при которых Ваш отчет будет работать без вопросов

    Reply
  43. altek

    (41)Извините. Делать расшифровку в планах нет.

    Reply
  44. altek

    (42)»Оплачено» и «Осталось оплатить» берут данные из стандартного регистра «Расчеты с клиентами». В него делают движения обычные платежки, т.е. обычные оплаты по заказу. Не важно есть соглашение или нет.

    Reply
  45. sevipa

    ясно, не заполняется в 11.4… видимо тут отличия есть

    Reply
  46. altek

    (45)Может быть… А вы сам заказ в платежке указываете? Поиск оплаты именно по нему и идет.

    Reply
  47. sevipa

    в платежке не вижу где внести заказ

    Мне пока сложно отойти от стереотипов УПП и УТ10 (мои основные конфигурации раньше) поэтому многие вещи совсем неочевидны как там…

    Reply
  48. sevipa

    Вроде нашел. Выбрал заказ как основание платежа, провел, но все равно поля пустые.

    Reply
  49. altek

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

    Reply
  50. sevipa

    а какой вд операции должен быть?

    Reply
  51. altek

    (50)Оплата от покупателя конечно

    Reply
  52. xyzet

    конфигурация УТ 11.2 (11.2.3.266)

    выдается ошибка как на скриншоте

    Поле объекта не обнаружено (ЗаказКлиента)

    Reply
  53. altek

    (52)Добрый вечер. Вероятнее всего у вас не включен обособленный учет заказов в настройках базы.

    Reply
  54. xyzet

    На второй вкладке заказы поставщикам есть ли возможность сделать разбивку формировать заказы на закупку позиций номенклатуры по поставщикам которые располагают этими позициями товаров?

    Reply
  55. xyzet

    Еще включенный обособленный учет заказов каким образом поменяет учет заказов, если ранее, он не был включен, и база работала без него уже как пару лет?

    Reply
  56. altek

    (54)Нет, самостоятельно, в режиме пользователя, это сделать не получится… это можно сделать только программированием, изменив форму и код

    Reply
  57. altek

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

    Reply
  58. xyzet

    Отчет очень информативный, сразу напрашивается две доработки 1. сворачивания верхней части с параметрами отбора для увеличения рабочей области окна, и 2. возможность формировать заказы с разбивкой по поставщикам и их товарам

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

    Reply
  59. altek

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

    Reply
  60. sevipa

    Добрый день! Не могу связаться с вами через кабинет!

    При использовании отчета с разворотом по характеристикам, данные получаются не совсем корректные, хотел уточнить возможность анализа базы!!1

    Reply
  61. altek

    (60)Добрый день. Характеристики в отчете не учитываются, к сожалению.

    Reply
  62. Logarifm_Andre

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

    Reply
  63. altek

    (62)Здравствуйте. Напишите мне в личном сообщение адрес электронной почты, я пришлю отчет просто так, не жалко 🙂

    Reply
  64. Logarifm_Andre

    (63)Спасибо)

    Reply
  65. Logarifm_Andre

    (63) Нет возможности отправить личным сообщением пришлите пожалуйста на почту logarifm_roman@bk.ru

    Reply

Leave a Comment

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