<?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='\
Данная методика получения контактной информации используется:
http://infostart.ru/public/176720/
[Z]: Анализ Продаж.PRO [1С:8.2] [УниверсальныйОтчет]
код открыт? если да, завтра скачаю и плюсану.
(2) Код этого отчета открыт и является примером использования контактной информации в отчетах, построенных на платформе универсального отчета. Не забываем «плюсовать» и писать комментарии 🙂
При формировании пишет {ВнешнийОтчет.ОтчетПоКлиентамКИ(452)}: Слишком много фактических параметров
УниверсальныйОтчет.СформироватьОтчет(ТабличныйДокум
(4) Укажите какая у Вас конфигурация и номер ее релиза.
Для БП 1.6 такую можно сделать?
(6) Не знаю — не интересовался.
УПП 8.1.12 редакция 1.2
(8) УПП 1.2 — укажите точнее релиз. Возможно несколько изменился вызов метода по сравнению со старыми версиями.
(9)
>>> Таким способом можно доработать и другие отчеты в которых участвуют контрагенты. Это не просто — это очень просто
Спасибо, надоумили. Сходу несколько отчётов пофиксил.
Выводы: век живи, век учись.
УПП релиз 1.2.9
(11) На УПП 1.2.16 работает. Более младшего релиза у меня нет «под рукой».
(11) Попробуйте изменить вот так:
Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт
// Перед формирование отчета можно установить необходимые параметры универсального отчета.
Параметры = УниверсальныйОтчет.ПостроительОтчета.Параметры;
Параметры.Вставить( «ТоварКупленный», Перечисления.СтатусыПартийТоваров.Купленный);
УниверсальныйОтчет.СформироватьОтчет(ТабличныйДокумент);
КонецПроцедуры // СформироватьОтчет()
(13) Внес изменения в файл отчета для работы на «старых» версиях УПП 1.2.
Все равно молодец!!!
в конфе 10,31,1,17 не такой возможности куда капать?
Может что нужно дополнительно настроить?
Два верхних поста можно удалить, прошу прощение.
В большинстве фирм клиентская база является коммерческой тайной, поэтому вывод на печать контактных данных в типовых конфигурациях отсутствует. Ведь пользоваться отчетом будут менеджеры (руководству контактная информация, как правило, не нужна, максимум город или район), которые имеют свойство плавно перетекать из одной фирмы в другую, сходную по профилю. А с таким отчетом появляется возможность перейти вместе с клиентской базой. Конечно, всегда есть возможность переписать данные клиентов в тетрадку, ведь справочник клиентов открыт, но если клиентов несколько сотен, то задача по переписыванию становится не тривиальной. Так что с управленческой точки зрения подобные отчеты являются вредымим, или, если хотите, политически ощибочными.
А с технической точки зрения молодец.
(20)
>>> то задача по переписыванию становится не тривиальной.
А ничего, что в типовой УТ, УПП есть отчёт о контактной информации, где вся клиенсткая база как на ладони.
(19) Возьмите отчет «УниверсальныйОтчет» из последних релизов конфигурации.
(20) 1. Политической ошибкой является то, что клиент работает (в «широком» смысле) с конкретным менеджером, а не с компанией в целом.
2. Просто так клиенты не «уходят».
3. Менеджеры и так наизусть знают своих лучших клиентов, а «плохих» нет смысла «уводить».
(22)А у вас есть возможность его сюда выложить?
(24) Вполне возможно, что потребуется взять из новых релизов также процедуры и функции общего модуля, используемые отчетом «УниверсальныйОтчет».
Отличный отчет, главное нужный! Однозначно плюсую!
Спасибо большое! Мне очень помогло.
Кстати, на Российской Комплексной 8.2 ваш отчет тоже работает.
Моджно еще так :
Процедура ВставитьТегВТекстЗапроса(пТекстЗапроса,пОригинал,пДобавка)
пТекстЗапроса=СтрЗаменить(пТекстзапроса,пОригинал,пОригинал+»
|»+пДобавка+»
|»);
Конецпроцедуры
Потом, в Отчет.УстановитьНачальныеНастройки
//Д
лТекст=УниверсальныйОтчет.ПостроительОтчета.Текст;
ВставитьТегВТекстЗапроса(лТекст,»//ПОЛЯ_СВОЙСТВА»,»//ПОЛЯ_КОНТАКТНАЯИНФОРМАЦИЯ»);
ВставитьТегВТекстЗапроса(лТекст,»//ПСЕВДОНИМЫ_СВОЙСТВА»,»//ПСЕВДОНИМЫ_КОНТАКТНАЯИНФОРМАЦИЯ»);
ВставитьТегВТекстЗапроса(лТекст,»//СОЕДИНЕНИЯ»,»//КОНТАКТНАЯИНФОРМАЦИЯ_СОЕДИНЕНИЯ»);
ВставитьТегВТекстЗапроса(лТекст,»//УСЛОВИЯ_СВОЙСТВА»,»//УСЛОВИЯ_КОНТАКТНАЯИНФОРМАЦИЯ»);
ВставитьТегВТекстЗапроса(лТекст,»//ИТОГИ_СВОЙСТВА»,»//ИТОГИ_КОНТАКТНАЯИНФОРМАЦИЯ»);
УниверсальныйОтчет.ДобавитьКонтактнуюИнформацияДляПоля(«Контрагент», «Контрагент», «КиКонтрагент», Перечисления.ВидыОбъектовКонтактнойИнформации.Контрагенты, «Справочник.Контрагенты»);
//УниверсальныйОтчет.ДобавитьКонтактнуюИнформацияДляПоля(«ЗапросПоВзаиморасчетам.Контрагент.ОсновноеКонтактноеЛицо», «ОсновноеКонтактноеЛицо», «ОсновноеКонтактноеЛицо», Перечисления.ВидыОбъектовКонтактнойИнформации.КонтактныеЛицаКонтрагентов, «Справочник.КонтактныеЛица»);
УниверсальныйОтчет.ДобавитьВТекстЗапросаКонтактнуюИнформацию(лТекст);
УниверсальныйОтчет.ПостроительОтчета.Текст=лТекст;
Спасибо. Пригодилось
пригодилось, но в чуть другом виде))если автор не против, взял код и вставил в обработочку посерьезнее. а так все отлично! автору плюс и спасибо!
Очень полезная обработка. Спасибо!!! удивился, что нет стандартных отчетов
В версии для 8.2 решена проблема с группировкой по контактной информации (поле неограниченной длины).
Исходный код открыт! Пользуйтесь и получайте удовольствие 🙂
(39) Видимо это комментарий к этому отчетуhttp://infostart.ru/public/117647/ ?
Скачал, деньги снялись, отчет не открывается в УТ 11.1.9.56 — на «сформировать» выводится «не установлена схема компоновки данных», что делать ?
Отчет не работает на Ут 11.1.4.14, пустой, ошибка — «не установлена схема компоновки данных»
(42) AlbertZ, «Отчет не работает на Ут 11.1.4.14»
Отчет не работает на Ут 11.1, только на УТ 10.3, УПП 1.3, КА
Добрый день!
Подскажите, этот отчёт будет работать в Комплексной Автоматизации 1.1.32.?
Коллеги, как сделать, чтобы контактная инфа не выводилась в строке группы клиентов (на скриншоте это строки «Покупатели» и «Поставщики» — в них выводятся номера телефонов)? Предполагаю, что можно решить условным оформлением в расширенной настройке. Кто может подсказать?