<?php // Полная загрузка сервисных книжек, создан 2025-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='\
хороший материал!!!
Большое Спасибо за статью. Как раз собирался разбираться как это устроено. Жаль что плюсануть можно только разок.
Хороший материал, но все таки такой отчет по-моему все таки будет быстрее написать через СКД
лет бы несколько назад, а так уже СКД
СКД не очень удобный механизм, универсальные отчеты и построитель лучше
В 8.1 построитель отчета оставлен для поддержки уже написанных на 8.0 конфигураций, все новые отчеты пишутся с использованием СКД. Тем ценнее статья.
А еще ценнее была бы статья о том как внести изменения в отчет, построенный с помощью построителя на примере ОтчетСписокКроссТаблица или ОтчетОстаткиИОбороты, так как на них написаны большинство отчетов в стандартных конфигурациях.
ждем про СКД, а пока ПЛЮС 😀
(5) чем интересно построитель лучше ❓
Бегло ознауомился, попозже почитаю поподробней, но идея понравилась. Да и за потраченное время +
Повторю за всеми , пора переходить на СКД, а так плюс , конечно.
Спасибо всем откликнувшимся.
Мое мнение — под 8.1 в стандартных конфигурациях этого хватит.
Самописные — видимо СКД, как более продвинутая технология.
Но не загорами 8.2, что там будет — к тому и будем адаптироваться.
Плюс. Но как и говорили выше, это механизм давно минувших дней. Но именно он стал пропотипом существуюшей СКД. Я так думаю.
Все это конечно хорошо, сам так делал и иногда делаю сейчас,
но как-то я уже писал на форуме, но никто не ответил 😥 ,
часто бывает отчет по своим рег. и т.п. необходимо распечатать и подписать, кладовщик, бухгалтер, не важно. Так вот как в такой отчет вывести строку для подписей в конце??? Если б не такая вот канитель, то было бы вообще нормально всё.
(14) А не пробовал после вывода отчета добавить строки из макета отчета? Попробую дома, может получится…
СКД отличный механизм, но привыкли бухгалтера к настройкам построителя. Все знают, что такое показатель, как настроить группировку и вывести дополнительный реквизит.
Показывать отчеты под СКД — ломать их мирровозрение. Когда-то это придется сделать, согласен, но не раньше чем необходимо.
(16) а каким образом? фиксированного макета нет у Универ.Отчета, куда добавить строки чтоб вывести их после таблицы, типа
форум
Директр ____ / <ФиоДир> Кассир _ / <ФиоКассир>
вот ссылка на форум,
никто не подкинул идейки (хотя я думаю народу много прочитало), если есть мысль поделись, а то мне что-то ничего путнего не пришло.
(15) поидее можно нарисовать один раз форму настройки СКД такого вида как она была в УниверсальномОтчете
(16) пробывал, все получалось
Уже пройдено, но материал все равно полезный. Есть пожелания к оформлению:
http://www.infostart.ru/public/19856/ )
1. код картинкой не очень хорошо (есть обработка
2. картинки лучше в формате PNG не будет ухудшения качества и размер будет маленький
(18) как пробывал? подробнее можешь пояснить?
… сам отчёт даЁт не верные цифры … на одну номенклатуру, дату, склад :
номенклатура…колОст….колРез
болт М14х30……184……….30…. данный отчёт
болт М14х30……..92………15…. штатный отчёт (происходит удвоение данных)
… вот …
за саму статью большое спасибо — четко, ясно, наглядно, ПОНЯТНО …. !
… ВОТ …
За подробное и толковое описание плюс. Но статья действительно устарела. В конфе БП уже давно есть аналог на скд. Заготовка готового отчета называется «ШаблонТиповогоОтчета». Все что там надо сделать — это настроить макет (СКД). Все остальные системы вывода, оформления (кстати в случае простых настроек аналогичны тем что привычны) и прочего уже происаны в конфе.
Сейчас под рукой нет УТ не могу проверить, но в ЗУПе и в УПП тоже большинство отчетов строится через СКД на базе универсального.
(21) Саша, могу тебя уверить — это проблемы составления правильного запроса. Особенно когда начинаешь делать кучу соединений.
Или если выводишь движения с точностью до регистратора — тогда могут плыть итоги по каждой строке…
(23) … понятно … спасибо …
…
в целом моё мнение:
такие отчеты «долгие» и + проблема «переделок» в (17) …
но «красивы» своей универсальностью и «стандартностью» …
… ВОТ …
п.с. … «универсальность» это зло …
(24) > «проблема «переделок» в (17)»
Учится надо :). Эти знания проверяются при сдаче на специалиста по УТ, там все билеты с подобными заданиями. Азы…
(22) а что-то в стандартной конфе БП 1,6,20 нет «ШаблонТиповогоОтчета».
да и в ЗУП и УТ нету тоже
(25)
это Вы о чем? Про какие азы? Что-то я непомню там требования подставить подпись при использовани универ. отчета
а вот при сдаче по платформе, требуется отчеты на СКД делать
Спасибо за статью. Все просто и понятно даже для такого новичка, как я. 🙂
(26) в БП его кажется удалили в 19 релизе (я у себя оставил).
В ЗУП и УПП можно смотреть в принципе любой отчет, в котором есть макет СКД — они построены универсально
(20) Все очень просто. В процедуре ОбновитьОтчет после стандартного вывода в табличный документ с ним можно делать что угодно. Например:
(22) Подобный шаблон и еще несколько полезных шаблонов СКД юзается при автогенерации файлов отчетов СКД в обработке «Универсальная консоль отчетов»
http://infostart.ru/public/16782/
рекомендую.
Новые отчеты создавать очень легко и просто.
У автора консоли даже есть отдельная статья для новичков, как с помощью его консоли быстро создать удобный файл отчета на базе собственной настройки СКД.
Не актуально. Сейчас принято делать отчеты на основе «Шаблона типового отчета»
2(17): да это действительно большая проблема… это конечно классно, что разработчики типовой УТ себе облегчили нелегкую жисть, а что теперь нам внедренцам делать с этим прекрасным универсальным отчетом х.е.з.
единственное, что можно делать, получать из построителя готовый макет и его уже ковырять… в конец то табличного документа можно вывести секций сколько угодно, а вот подправить шапку и заголовки табличной части будет попроблематичнее…
Прекрасная работа, хорошо бы аналогичную статью почитать по СКД
Плюсанул, так как до сих пор помню, как отчет, который был оценен на 6 часов, я сделал за 15 мину:-). Благо прям перед этим разобрал по полочкам этот объект:-). Была бы эта статья у меня перед глазами, тогда (давно), то и на разбор ушло бы намного меньше. Это поможет в основном начинающим, ну а опытным, как справка, вдруг по запарке забудут что-нить.
(31) где ж ты раньше-то был 🙂 , спасибо
Как все сложно-то. СКД рулит, а на 8.2 темболее рулит 😉
Очевидно, что это один из быстрых способов построения отчетов в типовых конфигурациях. Один недостаток — его можно использовать только когда в запросе извлекаются конечные данные.
Поставил «+» за полезность материала для тех кто «курочит» типовые, особенно начинающих, а также за труд по составлению.
Спасибо! Уже пригодилось в доработке типового отчета.
Отличная статья! Плюс однозначно. Только есть просьба. Выложите эту статью в формате *.doc или др. текстовом формате. Я начинающий, поэтому для подробного разбора html не очень удобно. Заранее благодарю!
(42) Давайте мыло, кину
(43) DoctorRoza@mail.ru
😳 😳 😳
(44) отправил
Есть и минуса этого использования, при сложных расчетах колонок, которые нельзя вычислить в запросе в макет к сожалению не попадут, а в другом я всегда это использую уже примерно года два или побольше 🙂
Для начинающих программистов самое то!
+1 адназначна!
Спасибо! Пригодилось!
(46) Это верно, вариант «Одного запроса»
Но с опытом приноравливаешся, и случаев, когда одним запросом не справится, становится все меньше.
Хотелось бы добавить, следующее:
1. Подобным функционалом владеют еще и отчеты ОтчетОстаткиИОбороты, ОтчетСписокКроссТаблица и ОтчетДиаграмма.
2. Если запрос простой, его текст можно и не писать. Достаточно заполнить спец. макет группировками и показателями и вызвать процедуру УправлениеОтчетами.ЗаполнитьНачальныеНастройкиПоМакету. Как пример, в УТ можно глянуть отчет ПланируемыеПоступленияДенежныхСредств.
«+» за старания.
спасибо
Большое спасибо! Наконец-то я «подружился» с отчетами 🙂
(30)
На ИТС есть поставка подсистемы «Шаблон типового отчета», за 15 минут можно встроить с поддержкой поставщика в любую конфигурацию.
автор маладец
если бы 1С такие описания к своим механизмам делала — жить стало бы легче
(53) В какой ИТС, например, есть?
что-то я в своих не нашел?
Декабрь 2009
1CItsEXETreport
Возможно это есть только на партнерском ИТС, но вроде это общедоступная «демка».
Добрый день. С Новым Годом! Можно мне получить на мыло (F_S_S@ukr.net) эту статью в формате *.doc.
Хорошая статья! Спасибо. 🙂
Вот я начинающий,и мне непонятно,почему из резерва взяли только количество,а не количество и номенклатура,мне непонятно по какому полю будет соединение происходить.
а понял,сорри затупил,а построитель он что делает макет формирует?
очень помог. с выбором цен
Как можно изменить представление показателя, если как источник используется регистр накопления.
Ведь в форме настройки табличное поле Показатели недоступно для редактирования.
Как пример.
Ведомость по взаиморасчетам с контрагентами.
В отборе ставим вид контрагента покупатель — в отчете пишет «Долг покупателя» вместо Начальный остаток
В отборе ставим вид контрагента поставщик — в отчете пишет «Долг перед поставщиком». вместо Начальный остаток
Спасибо за хорошую статью
Блин круто (Вот это способ) 😀
честное слово выручили!!!Вот только проблема у меня половина учреждений на УТ 10.1, а там как известно —
а где можно почитать поподробнее про УО???
А что такое УО?
(67) УО — умственно отсталый (с) «Три с половиной дня из жизни Ивана Семёнова — второклассника и второгодника»
(68) Думаю что в контексте данной статьи это не вариант
Автору спасибо огромное! За 2 часа по инструкциям в статье сделал отчет, на который иначе ушло бы два дня.
Скажите пожалуйста. Можно ли просто подключить файл .erf в 1С УТ и пользоваться данным шаблоном, или все по шагам все проделывают как автор написал?
У меня есть похожий отчет, только на основе универсального отчета, по регистрам партий (комплексная конфигурация, УПП). Проблема с выводом начальных остатков и расшифровок по документам. При выводе расшифровки строки в режиме период+регистратор и отключения детальных записей — все получается (проверено) кроме начальных остатков. Кто-нибудь поможет решать эту проблему?
(67) Думаю, УО — это универсальный отчет 🙂
А не подскажете, можно программно задать условное оформление поля? Например, я добавляю дополнительное поле «Дата» :
УниверсальныйОтчет.ДобавитьДополнительноеПоле(«Регистратор.Дата», ТипРазмещенияРеквизитовИзмерений.Отдельно, 3);
Как задать, чтобы оно выводилось в формате dd.MM.yyyy (без времени)?
Спасибо огромное за такое пояснение!!! ❗ Все понятно и одновременно ничего лишнего!!!
Мне очень помогло 😀
Статья очень полезная. И пример тоже. В примере исправить ошибку надо в одном месте.
УниверсальныйОтчет.ДобавитьПоказатель(«СуммаРезерв», «Сумма остаток в резерве», Истина, «ЧЦ=15; ЧДЦ=2», «Сумма», «Сумма»);
вот такая строчка должная быть. а не
УниверсальныйОтчет.ДобавитьПоказатель(«ОстатокРезерв», «Сумма остаток в резерве», Истина, «ЧЦ=15; ЧДЦ=2», «Сумма», «Сумма»);
Сделал всё вроде по инструкции, строки, колонки, номенклатура выводится… И получается вроде правильный отчет, да только не заполненый)
показатели не показывает( почему может быть? может в запросе как то накосячил?
Вот вы всё хорошо расписали, а СерииНоменклатуры у вас не выводятся ни как отдельное поле, ни в группировках..
А как же быть, если нужно отображать остатки в разре серий?
+ если я использую вложенный запрос, необходимо ли внутри вложенного запроса применять конструкции построителя?
(76) Точно так же было. Оказалось, что на закладке Итоги слетели настройки. Вероятно, глюк платформы.
(72)
А документы движения показываются или вы их не выводите?
Сделал по инструкции (ТоварыОрганизацийОстаткиИОбороты), без детальных записей все норм. С детальными записями не выводит документы движения. Тот-же запрос в консоли запросов выбирает нормально.
спасибо, чувак. Намного лучше прочитать статью чем самому с нуля разбирацо)))
Огромное спасибо!!! очень полезная статья)))
спасибо, материал помог разобраться в стоявшей передо мной проблемой. + однозначно )
спасибо за публикацию, очень интересно
Спасибо за публикацию!!! Очень спасла! Сделал отчет на СКД, но клиенту захотелось чтобы он был на основе универсального, т.к. его сотрудники привыкли к интерфейсу. Пришлось переделать, но долго не мог понять как сделать на основе запроса, а не по одному регистру. Спасибо!
спасибо, слава богу что я пришел в 1с когда универсальный отчет уже начал отмирать 🙂
Большое Спасибо за статью, помогла разбираться как это устроено. Но хорошо бы облегчить вот такой момент — часто бывает отчет по своим рег. и т.п. необходимо распечатать и подписать, кладовщик, бухгалтер, не важно. Так вот как в такой отчет вывести строку для подписей в конце???
Прямо мини учебник. Быстро понять азы — самое то. Огромное спасибо, сам начинал с данного примера!!!
(86) svetic,
Необходимо выводить строки в уже полученный макет. Т.е. сформированный макет не выводим сразу, а перехватываем, добавляем в конец нужные нам строки, и только после выводим.
Очень помогло разобраться в сабже. Спасибо)
Спасибо, очень хорошая статья — научила пользоваться универсальным отчетом, хотя СКД конечно пофункциональней будет.
Отличная статья, переписала типовой отчет добавив необходимые для пользователя поля и ограничила по правам видимость этих полей.
за статью, спаибо
Хорошая статья спасибо
Отличная статья все по полочкам. Для начинающих в самый раз. +
Спасибо,много хорошей информации
Хороший пример!
Большое спасибо, очень познавательно.
(17) Just, тоже как-то нужно было разработать отчет произвольной формы. Думал уже на макетах делать, но разобрался и сделал на СКД. Гриф «Утверждаю», места подписей руководителей и т.п.
(15) а вы воспользуйтесь механизмом произвольного отчета. И СКД, и стандарт.