<?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='\
В таком случае лучше прописать контроль партий при копировании
(1) над этим уже задумался, вот решил год закрою и сделаю условие такое.. 🙂
«…Кому помогло не поскупитесь поблагодарить «+ «….»
а кому это может помочь???
в смысле — этот список ошибок.
а таблицу значений создать ???
загнать туда доки с багами, с возможностью открыть и т.д….
(3) если вам не подходит, это не значит что другим не нужно..
на каждый товар найдется свой покупатель…
ага навоз то же селяне покупают поля удобрять… это к тому, что «на каждый товар найдется свой покупатель…»
мне больше нравится девиз «сделай как я, сделай лучше меня…»
(6) «Сделай как я» -это так ….
Я должен последовать Вашему примеру, создать щас нового юзера на этом сайте и начать придираться к публикациям??.
Я правильно понял Вас??
1.Бух.учет для Украины от захода не позволяет делать подобные вещи «копировать строки в документах, но забывают перещелкивать партии. Вот и получается что на елементе может висеть 2 ,а то и 3 «партии по умолчанию», или партия принадлежит другому елементу справочника»
2.Если это все таки возможно…
Пример. предприятие с оборотом 300 доков в день. штат операторов-менеджеров набивающих доки.
КАК вашим отчетом можно это исправить???
Вы представляете сколько на это нужно времени??? При вышеуказанном объеме.
см. п.4
(8) че вы мне будете расказывать что «невозможно», возмите последний релиз бухни для Украины (на данный момент если вы в курсе 277) и смодулируйте ситуацию!! например на доке операция №5…
Если вы не знаете, то это уже другой вопрос..
У меня бухи (их больше 18), хитрые и «умные», они еще и не такое умудряются сотворить..
Данный отчет реализован пока именно как «ошибки партионного учета» , а если позволит свободное время далее в планах реализовать именно ИСПРАВЛЕНИЕ АВТОМАТОМ..
P/S/ Вы хоть пробовали у себя запускать??
на ваш 2 пункт, хороший совет дал (1), себе с нового года буду реализовывать чтоб не было подобных ситуаций..
Всем: Ну и чего ругать? Это же не очередной перенумератор.
я даже в курсе, что Выпущен релиз 7.70.015 конфигурации » Торговля+Склад для Украины». и релиз 7.70.031 конфигурации «Бухгалтерия + Торговля + Склад + Зарплата + Кадры для Украины».
Отчет запускал и в ООО «Добро» и еще в 20 базах — никакого результата.
а что такое «…например на доке операция №5… »
пытался нагло допустить подобную ошибку — не дает данная процедура накосячить
Процедура ИзмТМЦ()
Если ТМЦ.Выбран()=1 Тогда
глУстановкаБазЕд(Контекст,ТМЦ);
// если партия этого ТМЦ уже есть, не будем ее трогать
Если Партия.Выбран() = 1 Тогда
Если Партия.Владелец <> ТМЦ Тогда
глПолучитьПартиюПоУмолчанию(Партия,ТМЦ);
КонецЕсли;
Иначе
глПолучитьПартиюПоУмолчанию(Партия,ТМЦ);
КонецЕсли;
УстЦенаБезНДС();
ИзмЦенаБезНДС();
КонецЕсли;
КонецПроцедуры
или
Обнаружены одинаковые ТМЦ (партии) в строках 1 и 2
еще пока ни кто и не ругал.
(11) пример допускания наглой ошибки!.
только что взял 277 демку и тупо допустил ошибку следующим образом.
1. Запустил отчет понятно что ошибок нету.
(рис1.) (рисунки смотри выше 3,4 и 5 миниатюры).
2. Док операция №5. Добавляю стоку Дт 201 Главный магазин- Авансовый платеж — партия по умолчанию (партия принадлежит авансовому платежу).
3. Добавляю еще одну проводку по Кт 201, Главный магазин-Авансовый платеж-партия по умолчанию. (партия принадлежит Авансовому платежу), !!!! Потом меняю авансовый платеж на «АРЕНДУ»»» партию не перещелкиваю. (рис2)
4. Запускаю отчет, внизу сообщает что партия по Умолчанию в аренде принадлежит Авансовому отчету!!
(рис3.)
Показал чтоб было видно Дт и Кт, также само происходит когда копируют строки например по Дт201, Тмц-поменяли, а партию забывают перещелкнуть, вот и получаются такие ошибки.
«Очень часто бухи любят копировать строки в документах,….»
копировать строки в документах и проводку в Операции это принципиально разные вещи по ходу
По терминам в документе операция копируется не строка а проводка.
да меня больше волнует найти и исправить ошибки, а не то что они там любят..
Вывод один. Проблема такая бывает, решать ее как то надо, а кто как копирует это уже второстепенное.. 🙂
Я улучшил Вашу обработку и если Вы не против (т.к. интерфейс и часть кода Вашего создания) — могу выложить.!?
да без проблем! одна голова хорошо а 2 лучше..
За идею хотя б поблагодарили.. 😉
я как практикующий бухгалтер не вижу пользы в этой идее, т.к. случай сугубо уникальный и у нормальных специалистов не имеющий место быть
а я вам скажу как практикующий програмер и бух в одном лице..
вопрос не в том хорошие спецы или нет, а в человеческом факторе..
Я еще более апгрейдил Ваш отчет.
http://infostart.ru/public/64439/?PAGEN_1=1#comm345021
Если есть возможность — проверьте функциональность кнопки «Выполнить»
Как бы ещё научиться в нём работать.