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




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *