<?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='\
01.11.07 10:00 подправил внешний вид кнопок, обход и подсказки.
Вопрос к аудитории: использует ли кто периодические реквизиты в планах счетов?
Здорово! Особенно 4-ый пункт) +
До сих пор не приходилось использовать периодические реквизиты в плане счетов.
Тогда, справедливо будет Che Burashka оставить здесь коммент для рейтинга за идею.
Пришел, увидел, почитал.. не увидел «печати за период»…
но нормуль…
(5) Привет! По заголовку «Работа с» логично было бы здесь видеть не только печать, но и множественный фильтр, выборку с пометками, и т.д. В общем, было бы похоже на учойс.
Другое, будет ли востребована такая овчинка? Три действия и доп. четвертое, — твоя задумка (за него плюсанул), — востребованы (хотя бы при свертке). Для остального есть привычная встроенная в 1с-ке «история» и штатная в ТиС-е «ЗначенияПериодическихРеквизитов» с печатью.
А потом «Печать за период», — есть смысл? Там «портянка» на сотни листов будет… 🙂
Или все же переименовать в «Работа админа с перидикой»?
Замечание при режиме восстановления:
Прежде чем
Периодический.ДатаЗнач = СохрДата;
Периодический.Значение = ТекЗначение;
Периодический.Записать();
неплохо бы было назначить тип элементу:
ТипОбъекта = ТипЗначенияСтр(ТекЗначение);
Если ТипОбъекта = «Справочник» Тогда
Если Найти(ТекРеквизит,»Субконто») > 0 Тогда
Периодический.НазначитьТип(ТипОбъекта+».»+ТекЗначение.Вид());
КонецЕсли;
ИначеЕсли (ТипОбъекта = «Документ») или (ТипОбъекта = «Перечисление»)
Тогда
Периодический.НазначитьТип(ТипОбъекта+».»+ТекЗначение.Вид());
КонецЕсли;
(7) Спасибо за "фикси". Обработку обновил.
А по назначаемому типу, содержание в идентификаторе реквизита "Субконто" ни о чем не говорит 🙂
Показать полностью
Прикольная штука, спасибо
Хорошая обработка, лучшая из всех, касаемо переодических реквизитов! Мне очень помогла исправить ляп бухгалтеров. Спасибо!!!
0 : 00 : 00 : 00 : 21 / 37 059 : Оптимизация значений по 12 периодическим реквизитам справочника СвоиЮрЛица
Периодический.Удалить();
{…PERIODIC.ERT(1487)}: Значение установлено документом!
. . шт. 115.000
03.04.03 118.000
09.08.04 142.000
14.10.04 114.000
25.02.05 110.000
12.05.05 108.000
16.06.05 108.000
08.07.05 108.000
19.08.05 112.000
16.10.05 105.000
07.02.06 Установка новых цен № КП-0000372 110.000
25.03.06 Установка новых цен № КП-0000922 109.000
12.08.06 Установка новых цен № КП-0003021 93.000
08.10.06 Установка новых цен № КП-0003614 96.000
19.12.06 Установка новых цен № КП-0004470 105.000
20.02.07 Установка новых цен № КП-0000326 105.000
20.02.07 Установка новых цен № КП-0000330 110.000
27.03.07 Установка новых цен № КП-0000643 110.000
14.04.07 Установка новых цен № КП-0000818 110.000
15.05.07 Установка новых цен № КП-0001134 110.000
09.06.07 Установка новых цен № КП-0001398 110.000
06.07.07 Установка новых цен № КП-0001600 110.000
28.07.07 Установка новых цен № КП-0001816 110.000
21.08.07 Установка новых цен № КП-0002008 110.000
08.09.07 Установка новых цен № КП-0002155 110.000
05.10.07 Установка новых цен № КП-0002330 115.000
20.10.07 Установка новых цен № КП-0002433 115.000
12.11.07 Установка новых цен № КП-0002569 115.000
29.11.07 Установка новых цен № КП-0002697 115.000
15.12.07 Установка новых цен № КП-0002839 115.000
30.12.07 шт. 105.000
19.01.08 Установка новых цен № КП-0000051 115.000
31.03.08 Установка новых цен № КП-0000694 126.000
Почему-то рубится на 25.02.05, значение установлно не документом …
нужно попробовать без транзакции …
Предлагаю в исключение добавить
ТабНеКорр.ТекстОшибки = ОписаниеОшибки(); и соответсвующую колонку в ТЗ и таблице
Если есть сохраненная настройка отчета с галками почему-то не появляется колонка с пометками
Появляется, только если нажать вручную на одну из галок …
Так же в ТабНеКорр и отчет нужно добавить колонку Владелец, чтобы сразу видеть чей подчиненный элемент попал в отчет.
(11) Скорее всего ошибки в таблицах, запустил ТИИ, жду )
Ага, так и есть в 11 ложная тревога, глюки в базе 😉
(17) Пожалуй, добавлю в таблицу значений на форме инфу о возможности ручного изменения пер. реквизита.
(15) (13) что нить добавим….
(14) Галки на форме можно сохранять стандартным «сохранением настроек», однако, лучше их оставлять непомеченными, чтоб юзер осмысленно их устанавливал. А табличная часть, — она зависит от конфигурации, стандартное сохранение может не прокатить, — поэтому и сделал свое сохранение.
Очень помогла при свертке базы. Плюсую!