<?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='\
Три в одном, как маккофе 💡
Если Дата2 >= ПолучитьДатуТА() Тогда
{H:1СУНИВЕРСАЛЬНЫЙОТЧЕТ.ERT(1824)}: Метод ПолучитьДатуТА не может быть доступен так как компонента Оперативный учет не загружена!
to tsvetik123
Спасибо, исправил.
Не открывает ???
Прошу справочники …
Если ЗапросСПериодами.Выполнить(ТекстЗапросаПоПериодам)=0 Тогда
УНИВЕРСАЛЬНЫЙОТЧЕТ.ERT(1979)}: Неверный диапазон дат!
to Доня
Неверный диапазон дат — означает что неправильно выбран период, но исправил.
в моей конфигурации нет обработки «ПодборОбъектов» 😮
Пытаюсь выбрать документы.
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{C:UNIVERSALJNYJOTCHET.ERT(2003)}: Неверный диапазон дат!
Я не очень понимаю, что значит неправильно выбран период (01.12.2009-31.12.2009)
(6) Имеется в виду UChoice.ert 😉
to (7)
значит что дата начала отчета больше даты ТА.
добавил проверку.
Не работает… По оборотному регистру ничего нет, а по останкам, при группировке день — полная «радуга» …
+10 Т.е данные неверные… показывает расход/приход/останки по тем дням где нет вообще никаких движений… + неверная строка итогов.
И.. по справочникам тоже пусто — в группировку хотя бы нужно добавить код/наименование/текущий Элемент …
а не только реквизиты.
(10) на скрине №3 результат по оборотному регистру обороты — значит работает.
(11) — вообще не понял что вы имеете ввиду, остатки он должен показывать независимо от движений.
(12) — группировку по «Элементу» можно добавить , нажав на кнопку «…» над списком группировок.
Скачал, работает.
Всю «пушистость» поисследовать не успел, но интересный «зверёк».
+ прилагается.
Все работает замечательно. Теперь смогу вывести всех нерадивых на чистую воду. Огромное спасибо автору! 😉
есть конечно недостатки (нет отбора документов проведенных /не проведенных), но в целом обработка очень хорошая — «+»
Не пробовал но однозначно плюс. Сам что-то подобное рисовал
М.б. что-то делаю неправильно, но выдаёт пустые отчёты. Единственные данные показываются по «Справочник – Банковские счета».
Либо выдаёт ошибки.
(1С Бухгалтерия 7.7 релиз 508)
to (16) — спасибо, исправлю в ближайшее время
to (18).
Может быть неправильно формируете, напишите мне в личку.
источнЫк данных
Штука конечно полезная, но немного сыроватая, рекомендую самостоятельно довести до ума и запиисаться в соавторы 🙂
Конт.ОткрытьПодбор(СправочникПодбора,,ФормаПодбора,?(Режим=»ДобавитьНесколько»,1,0),ТекЭлемент);
{UNIVERSALJNYJOTCHET.ERT(1475)}: Неверный вид справочника Основной
Ну и тд и тп. УДАЧИ 😉
к (22)
Описанную ошибку уже исправил.
К (21) — очепятку тоже
добротная вещь + однозназный
http://infostart.ru/public/63360/
хотелось бы получить комментарии автора на
прошу не считать саморекламой, есть желание скооперироваться с автором
😮
1.баг
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{C:MYUNIREPORTУНИВЕРСАЛЬНЫЙОТЧЕТ.ERT(2022)}: Длина индекса превышает максимальную длину и не может быть уменьшена.
2.Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{C:MYUNIREPORTУНИВЕРСАЛЬНЫЙОТЧЕТ.ERT(2022)}: <<?>> месяц = Справочник.Параметры.месяц;
Запрос[3] : Неизвестая ошибка ‘месяц’
ответ (25) :
mista
Этот отчет — конструктор,
но под птичками на списке группировок надо понимать, что обработка построит запрос.
А в 1С есть некоторые ограничения на запросы.
по баг1. — ответ сдесь
по баг 2.
Немного исправил формирование запроса. Если Реквизит «Месяц» не используется в группировках — ошибки не будет,
но если есть — будет предупреждение, ибо нельзя в запросах обращатся к реквизитам , которые имею имена зарезервированных операндов запроса.
Мне отчет понравился. Работает и в «Бухгалтерии» и на «складской» и даже под «Вистой» (там у меня не все отчеты формируютя в складской версии).+
Люди, кто скачал, ответьте все ли работает как заявлено. Насколько универсален этот отчет? А то я читаю вначале было много ошибок и нареканий. Стоит ли тратить с трудом заработанные виртуальные «доллары» на скачку этого внешнего отчета?
Очень пригодилась. Немного дописал теперь пользуюсь.
ВидРегистра = спЗначенийВариантовИсточников.ПолучитьЗначение(спЗначенийВариантовИсточников.ТекущаяСтрока());
{C:DOCUMENTS AND SETTINGSSEMDESKTOPUNIREPORTУНИВЕРСАЛЬНЫЙОТЧЕТ.ERT(121)}: Индекс не входит в границы списка значений.
Для м = 1 По Метаданные.Регистр(ВидРегистра).Измерение() Цикл
{C:DOCUMENTS AND SETTINGSSEMDESKTOPUNIREPORTУНИВЕРСАЛЬНЫЙОТЧЕТ.ERT(122)}: Значение не представляет агрегатный объект (Измерение)
Как решился вопрос с пустыми отчетами? такая же фигня как и (18) тоже только справочники формирует
вещь классная. неплохо бы иметь еще следующее:
1. сохранение настроек.
2. расшифровку доработать. (у меня так и не заработала. открывает форму отчета и все)
3. возможность использовать из других отчетов с использованием сохраненной настройки.
мне нужны были причины возврата в Приходных накладных. Причины есть, я доволен =) буду дальше тестировать. Первое впечатление — всё отлично!) особенно приятно, что под 7.7
(32) mixa_gr, я путаю, или сверху есть кнопички — сохранить и восстановить настройки ?….
Вопрос автору — сколько за такую обработку выручили с заказчика ?
(34) namazi74, да, вы путаете.
(35) — из заказчика я ничего не выручил,
писал (творил) когда было желание и время.
Сейчас обработку дописывать уже не собираюсь,
код открытый — кто хочет — пусть допиливает.
хорошая штука 🙂
Автор, спасибо! Пригодилась.
Нужно было из 7.7 справочник номенклатуры выгрузить в excel (несколько полей, включая код родителя) — т.е. сущий пустяк. Но то, что на 8-ке делаю быстрее чем запрос в поисковике пишу, в 7-ке вызывает первобытный страх, как у Сишника перед Ассемблером, завуалированный фразой «на кой мне эту рухлядь ковырять» …
Довольно сыровато. Но, как отметил Froloid, помогает преодолеть страх. Простейшие запросы можно накидывать. Автору спасибо
что то поломалось. По документам выводит пустые строки