<?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='\
Не работает при РАУЗ! Надо было это написать! 🙁
Согласна с Risoks, хотелось бы такой же, но для РАУЗА.
Интересно, есть ли подобная разработка для Комплексной автоматизации?
К сожалению у меня нет возможности проверить. Но допускаю, что отчет будет работать и в КА, т.к. КА это обрезанная УПП.
(4) Что толку(если заработает в КА) — 90% пользователей работают в РАУЗ
Хотелось бы увидеть скриншот готового отчета с ошибками
(6) gull22,
как выглядит отчет .
Если в базе нет ошибок — отчет будет пустой.
Если будут ошибки — тогда и будут выведены строки в соответствии с настроенными группировками. Основная цель отчета — понять до проведения «Расчет себестоимости» выявить будут проблемы или нет.
Сформировал отчет в своей базе, где у меня были проблемы. Посмотрите
(5) zzz_natali,
Отчет работает в Партионном учёте — такова была его цель. В моей компании запустить РАУЗ не представляется возможным: учёт должен вестись и по МСФО (для МСФО такого метода как РАУЗ быть не может) и искажения в стоимости при движении между складами меня также не устраивают.
(8)
можно еще несколько слов об этом?
Мысль хорошая, но…
Запустил на нашей УПП 1.3.29.2, в которой только что расчет себестоимости показал кучу ошибок, в том числе и заявленных в публикации. Отчет формировался 4 минуты, что является очень хорошим показателем, т.к. у нас проведение документа «Расчет себестоимости» сейчас идет порядка 2.5 часов. Но результат — пустая таблица, только шапка.
Сомневаюсь, что были серьезные изменения в запросе между 1.3.29.2 и 1.3.31.1. Проверю.
(10) kapustinag,
Я тоже перепроверил на тестовой базе, где 1 месяц сведен, другой не сведен. В первом случае отчет был пустой, во втором — с записями. Всё как и задумывалось. Но обратите внимание, отчет ловит только 2 ошибки из 7. В моем случае чаще всего сталкивался с 3-мя ошибками.
Я уже пишу статью продолжение и выложу все отчеты, которые пришлось создать, чтобы решать проблемы с себестоимостью.
(9) tango,
Тут всё просто. На эту проблему моё внимание впервые обратил Насипов Фарит в своей статье. Идея такова: т.к. РАУЗ рассчитывает себестоимость иным способом, чем определено в МСФО, то методологически использование РАУЗ для подготовки отчета по МСФО невозможно. Это же подтвердили мне аудиторы Ernst and Young — у нас ежегодно проводится проверки и в состав этой проверки входит проверка методов выбытия запасов. Суть проверки заключается в анализе всех движений по одному или нескольким артикулов на соблюдение правилам учётной политики. Т.к. рассчитанная себестоимость в партионном учете по ФИФО будет отличаться от РАУЗ ФИФО — в результате аудиторы зафиксируют нарушение метода выбытия запасов.
(12)
Ну тогда получается, что такой же вердикт могут вынести аудиторы и без МСФО. Себестоимость ФИФО при партионном учете вполне может отличаться от рассчитанной в РАУЗ. То есть каждая компания, перешедшая на РАУЗ, рискует «попасть» на такой вердикт при аудиторской или налоговой проверке? Что на этот счет говорят методологи? Или, может быть, уже были прецеденты подобных разбирательств с проверяющими органами?
(11)
Да, забыл написать… Обещанную статью буду ждать с нетерпением. Тоже боремся с себестоимостью, в том числе с помощью собственных наработок (Автор — не я, так что выложить не могу). Интересно будет прочитать о чужом практическом опыте.
(7) воспользовалась Вашей обработкой «Анализ ошибок себестоимости». Возлагала очень большие надежды, но он сформировался пустой. Хотя при этом у меня не закрывается счет 20 на несколько тысяч. Причем, только по одной затрате. Я определила, что это остатки по регистру Незавершенное производство. Никакие отчеты не помогли понять причину не списания этих остатков.Методом волшебного тыка стала увеличивать количество действий «Расчет затрат встречного выпуска»,и остаток в РН «Незавершенное производство» начал таять. Есть ли у Вас опыт и какие-либо инструменты для «отлова» проблем со встречным выпуском?Например, до расчета себестоимости определить количество итераций, требуемых для расчета затрат по встречному выпуску или отчет, который позволил бы выявить причину, почему незакрытый остаток остается только по какой то одной затрате.
(15) svetatolk,
Добрый день Светлана. Отчет из статьи позволяет ловить только 2 типичные ошибки из расчета себестоимости. Если отчет формируется и нет никаких данных, то значит эти ошибки отсутствуют. Я на днях напишу уже более полную статью по поиску ошибок при расчете себестоимости.
Теперь по поводу встречного выпуска. Такая ситуация возникать может когда угодно. В моей базе нужно 3 документа для закрытия себестоимости, связанные со встречным выпуском. В курсе «УПП от А до Я» Алексей Бурьяненко (преподаватель курсов 1С) говорил о том, что может понадобиться 8 раз проводить Расчет себестоимости с этапом закрытия встречного выпуска. Также он упомянул о случае, когда для закрытия понадобилось 17 документов с встречным выпуском. В моей базе, я разделил на несколько документов Расчет себестоимости: с этапами до встречного выпуска, отдельно несколько документов со встречным выпуском и потом остальные этапы с закрытием себестоимости.
Возможно, нужно создавать программу по закрытию встречного выпуска, чтобы она сама проверяла закрылся ли регистр НЗП и создавала столько документов Расчет себестоимости пока не закроются остатки.
спасибо за ответ!я согласна, что со встречным выпуском при партионке надо что то дорабатывать. я параллельно работаю и с РАУЗ в Комплексной автоматизации, дак там проблем со «встречкой» вообще не возникает. правда, есть проблемы другого характера)), но это уже другая история, как говорит Каневский.
(4)
КА — это не обрезанная УПП, а нечто, созданное на основе обрезка от УПП.
В КА нет партионного учета, который вы здесь и проверяете. Расчет себестоимости только для РАУЗ.
А «партионный» учет — только количественный для склада.
(12)
вообще-то это и без Фарита понятно — что РАУЗ это не партионный учет, и МСФО, в котором все прозрачно и обоснованно — ну никак не сочетается с 1совым «РАУЗ».
И что еще со своим так называемым «РАУЗ» (который на самом деле — понимание РАУЗ через 1С) все напрыгаются.
(7)
Ваш отчет, видимо, делает, как я понял только одно — примитивно сверяет, чтобы совпадали аналитики в приход-расход (причем, видимо, для сравнения документов и поиска «непохожих» используется сугубо частный способ сравнения, который используется на вашем предприятии).
(1) Risoks,
РАУЗ и партионка — несовместимые методы учета и расчета.
оно и написано:
(5) zzz_natali,
значит, море непаханное для доработок и исправлений будет.
(2) infostartuser1c,
тоже учите, что и где и с чем работаете.
(20) AlexO,
Он действительно делает примитивную проверку по сверке аналитик. Но это не частный случай, а общий для всех предприятий. Суть такова — я взял запрос из документа расчет себестоимости и встроил в этот отчет. В результате, отчет можно запускать до расчета себестоимости и сразу узнать проведется ли расчет с ошибками или без ошибок. Отчет помогает сэкономить время.
(24)
да, все бы было хорошо, если б расчет себестоимости не подразумевал повторный циклический расчет на основе предварительных расчетов… собственно, на что и уходит время, и где и кроются самые критические ошибки.
(24)
ну хоть так сделал 🙂
Только напишите четко и конкретно, что считаете, и какие ограничения «проверки» — а не в стиле «Да я эту себестоимость как хошь верчу» ))
Плюс — за адекватное понимание ситуации и оценки предмета.
При давальческой схеме (мы давальцы) отчет не работает.
Делаем пробный расчет себестоимости (партионный учет). Проверил работу на версии УПП для Украины 1.3.31.2. Отчет работает, но при формировании выдает ошибку, если не указан период, но это не проблема.
Отчет работает (УПП 1.3.71.2, партионный учет).
Не работает
1С УПП 1.3.97.5 (партионный учет)
Просто пустой отчет…
(31) Уже давно не занимаюсь УПП. Извините, но не смогу помочь. В версии, с которой я работал, отчет запускался.