<?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='\
Кроме 10 счета другой можно выбрать, например, 41?
(1) cuba8, Пока нет, дальше планирую доработать с выбором счета
Спасибо.
Ваша бухи-заказчики молодцы, в который раз убеждаюсь, что подобной формы таблицы куда читабельнее и нагляднее, чем разного рода встроенные «карточки» и «аналитика» 1С.
Зачем изобретать велосипед, ведь есть намного мощнее решения, напримервот это
(4) Zerg118, Немного не то. А отчет конечно универсальный. Возьму на заметку!
(4)
Зачем изобретать велосипед
Наверное, затем, что каждому нужен свой велосипед. Конечно, много скоростей и всякого рода тюнинг штука замечательная, но чаще всего нужен велосипед в минимальной комплектации, на котором быстро и без проблем доехать из пункта А в пункт Б.
Ничего личного.
(7) wumka, тот велосипед замечательно доезжает из пункта А в пункт Б. Учитывая время затрат автора на свой велосипед — по скорости он явно проиграл.
Ничего личного
пока не качала, но на вид вещь нужная… а расшифровки движений работают, если кликнуть на количество-сумму?
и по счетам 41, 43 нужно бы 🙂
А как насчет этого отчетаhttp://infostart.ru/public/20562/
Скачала, работает! Однако заполняет только количество, суммы не выводит. Можете подсказать, почему? Для нас также было бы актуально разбивать списание на 20 по субконто «Номенклатура», например: договор 1, договор 2, договор 3, итого по 20. Было бы отлично.
(12) вам тогда сюдаhttp://infostart.ru/public/20562/ в этом отчете все это можно сделать!!!!
а там нет красивых колонок по документам 🙁
(14) Там есть конечно такая возможность.
Описывайте проводку Дт 10 Кр 71 и называйте колонку Авансовый отчет
Описывайте проводку Дт 10 Кр 60 и называйте колонку Поступление товаров и услуг
Причем это будет самая крупная детализация, можно для каждого субконто счета дать название колонки отдельно, например
Описывайте проводку Дт 10.3 Кр 71 и называйте колонку Авансовый отчет (топливо) итд
Так что пробуйте!!!
Хороший отчетик! А как бухгалтеру просьбы добавить 41 и 43 счета глубоко не понятны.Это ведь МАТЕРИАЛЬТЫЙ отчет. Для 41 счета нужен ТОВАРНЫЙ отчет. Учите матчасть, господа! Ну или у своих бухов консультируйтесь.
(16) Юлек я,
подумаешь )))
товарные отчеты тоже хотят быть красивыми
Вот я и говорю, учите матчасть-для него есть унифицированная форма.
Ошибка когда в именах колонок точки, Их тоже нужно заменить на чего нибудь, а так все прекрасно спасибо
И еще было бы здорово Развернуть 20счет по Наменклатурным группам
Не подскажете, почему-то у меня не формируется отчет, просто чистый бланк при формировании и выделение периода(БП 2.0, 2.0.28.3)???? В чем может быть дело? (списание с 10.01 и 10.08 на 20-ку)
БП 2.0.29.9 после нажатия сформировать выдает это:
{Форма.ФормаОтчета.Форма(100)}: Ошибка при вызове метода контекста (Добавить)
Таб.Колонки.Добавить(«ПриходК»+Имя,ОписаниеТиповЧ);
по причине:
Неверное имя колонки
что посоветуете?
{Форма.ФормаОтчета.Форма(100)}: Ошибка при вызове метода контекста (Добавить)
Таб.Колонки.Добавить(«ПриходК»+Имя,ОписаниеТиповЧ);
по причине:
Неверное имя колонки
Такая же ошибка(((
{Форма.ФормаОтчета.Форма(100)}: Ошибка при вызове метода контекста (Добавить)
Таб.Колонки.Добавить(«ПриходК»+Имя,ОписаниеТиповЧ);
по причине:
Неверное имя колонки
что посоветуете?
Ошибка возникает если в названиях документов поступления присутствуют символы, которые не могут использоваться в именах колонок и которые автор не удалил (такие докуметы как «Операция (бухгалтерский и налоговый учет)», «Поступление доп. расходов» …).
Исправить можно, вставив после каждой строки начинающейся с «Имя = СтрЗаменить(СтрЗаменить(»
две дополнительный строки:
Имя = СтрЗаменить(СтрЗаменить(Имя,»(«,»»),»)»,»»);
Имя = СтрЗаменить(СтрЗаменить(Имя,».»,»»),»,»,»»);
Таких вставок нужно сделать 4 шт.
Например для первой должно получится:
Для Каждого Стр Из ТДок Цикл
Имя = СтрЗаменить(СтрЗаменить(Стр.Док,» «,»»),»-«,»»);
Имя = СтрЗаменить(СтрЗаменить(Имя,»(«,»»),»)»,»»);
Имя = СтрЗаменить(СтрЗаменить(Имя,».»,»»),»,»,»»);
Таб.Колонки.Добавить(«ПриходК»+Имя,ОписаниеТиповЧ);
Отчет работает, но почему колонка «Цена» никогда не заполняется? Так и задумано?
В отчете сделаны исправления ошибок. Удалена неиспользуемая колонка «Цена». Добавлена возможность выбора счета. Например, можно отдельно сформировть отчет для субсчета 10.3 или всей группы 10. Спасибо за указанные ошибки!
Большое спасибо, отчет замечательный, особенно для малой организации, особенно когда никто из строителей помогать не хочет
(16) Юлек я, а товарный отчет от материального сильно отличается? Можно ли взять за основу встроенный товарный отчет и переделать под материальный?
Скачала, работает!
Хороший отчет, с меня +. Хотелось бы склады только видеть. А еще лучше сделать отбор по складам в списке (или не в списке). Мне из 50 складов 2 надо выкинуть.
(29) Dmitrii_Gukov, Спасибо за предложения. В ближайшее время внесу изменения в отчет.
(30) и еще в отчет не попадают регламентные операции.
(31)Сделал исправления
Ок, спасибо, будем посмотреть.))
(32) извиняюсь за назойливость, но все таки удобней, чтобы склады не были обязательными к заполнению. И если не выбраны склады в отчете отображались все склады. А так очень даже ничего, спасибо за труд.
(34)Исправил отбор по складам.
Отличный отчёт
Спасибо за публикацию !!!