<?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='\
Ура 🙂 Перенумератор 🙂
Да и еще запаролено. Несмомненно удачное решение.
(2) Я думаю для тебя не составит труда открыть код.
(3) Да труда-то не составит, вопрос только — зачем? Зачем паролить-то?
(0) Нельзя обычному пользователю давать перенумератор в руки. ИМХО.
Хотя бы потому что они базу не сохраняют…)))
(4) Пароль установлен по принципу: «Кто хочет его посмотреть — тот посмотрит, всем остальным нужен результат. Результат обработки — выполнение заявленной задачи!».
(5) Начнем по порядку:
1. Архивы базы должны делаться регулярно.
2. У пользователей должны быть ограниченные права доступа к периоду редактирования данных.
3. За кассовую книгу отвечает 1-2 человека и они понимают смысл перенумерации кассовых документов!!! по крайней мере должны понимать 🙂
и я же не предлагаю выдать всем пользователям механизм удаления объектов без проверки ссылочной целостности.
Оч полезная обработка!
Замечания/пожелания:
— Имхо обработка будет еще удобнее если в нее встроить «возможность расстановки очередности кассовых документов»(например, сперва ПКО, потом РКО).
— Имхо дополнить обработку ограничителем знаков в нумераторе
(7) Начнем по порядку.
1. А если бухи решили перенумеровать в середине дня то от сохранения нет никакого толку.
2. Даже если он есть сохранятся только те данные которые защищены, в любом случае месяц для кассы обычно открыт.
3. Да они понимают смысл перенумерации, но не знают как работает перенумератор, а если даже объяснить, они забудут через 2 дня. Обычная спешка может привести к геморою Вам же…
Но если кто не боится давать такой инструмент, то не вопрос обработка пригодиться… Мое дело предупредить 🙂
(8) Возможность расстановки очередности кассовых документов добавил, но только ручную, пользователь должен понимать, что он делает это все-таки касса.
Ограничитель знаков в начальном номере добавил, зависит от длины номера и префикса.
(9) Написанное имеет место, но все зависит от конечных пользователей.
(10) Маленькое Замечание по обработке: Если РКО создано(дата условная) 10.12.08 в 00.00.00 часов, то перемещая вверх ПКО, документ меняет дату(что не правильно), а надо чтобы ПКО встал перед РКО созданным в в 00.00.00 часов, т.е. самым первым в этот день.
А в остальном, благодарю ! 🙂
Всегда задавался вопросом: как они перенумеровывают доки, если те — уже на руках? А если встречная проверка?
ПС Шифрую грамотно название перенумераторов за плюсы, от местных троллей.
Примеры в качестве рекламы:
1. Менеджер организации последовательности нумерации документов
2. Отдадчик положения документов в журнале по их номерам
3. ОВЕРНУМБЕР PRO
🙂
(13) у меня на работе принято выдавать зарплату сотрудникам (около 60-чел.) и дивиденды акционерам только по РКО +деньги получают в банке несколько дней. Поэтому кассир не знает кто и когда распишется в получении денег. Соответственно заранее печатаются бланки без номеров. И проводятся в течении нескльких дней. Поэтому и нужен перенумератор
Нет перенумератора для других документов?
(15) Есть но я его не выкладывал. Хорошо на днях выложу.
А сегодня?
(17) если только вечером.
Спасибо!
Это Ваша, стандартного перенумератора для 1С Бухгалтерии не существует?
На одном из ИТС, и т.п.
(19) 1CItsEXEEXTREPSUNIREPS81UniversalSelectionУниверсальны еПодборИОбработкаОбъектов.epf
Закладка «Обработки» — «Перенумерация объектов»
1. Страноватая привязка размеров полей ввода к форме, когда разворачиваешь окно.
2. Если преффикс оставить пустым, пишет «Укажите начальный номер документов, отличный от 0». Приходиться ставить 0 ???
А вообщем, неплохо оформлено!
У меня выдает сообщения
НомерДокПечатнойФормы = глПреобразоватьНомерДок<<?>>(Док.НомерДок, 0, 0);
{\IVECOSERVER1СEUEXTFORMSПЕЧАТЬ ПКО РКО.ERT(29)}: Функция не обнаружена (глПреобразоватьНомерДок)
СтрНДС = «НДС(«+глПредставлениеСтавки<<?>>(Док.СтавкаНДС)+»)- «+РубКоп(Док.НДС);
{\IVECOSERVER1СEUEXTFORMSПЕЧАТЬ ПКО РКО.ERT(37)}: Функция не обнаружена (глПредставлениеСтавки)
НомерДокПечатнойФормы = глПреобразоватьНомерДок<<?>>(Док.НомерДок, 0, 0);
{\IVECOSERVER1СEUREXTFORMSПЕЧАТЬ ПКО РКО.ERT(72)}: Функция не обнаружена (глПреобразоватьНомерДок)
Подскажите что делать?
(22) Сначала необходимо сказать какая у вас конфигурация?
Для БП 1.6 эта обработка работает.
У меня комплексная конфигурация редакция 4,5.
Подскажите , в какую папку поместить недо эту обработку. Мне тут подсказали что в ExtForms, но там её программа вообще не видит, видит только с разрешением ert.
(24) ээээ, а платформа 7.7?!
Эта обработка для платформы 8.1
Да 7,7 . Жаль что не пойдет, очень нумератор нужен .
а для Бух 8.2 нет такого перенумератора?????? 😀
Спасибо за обработку)
Использовал обработку в работе, спасибо
(27) krielena, А почему бы не воспользоваться конвертированием обработок для 8.2?
а для Бух 8.2 нет такого перенумератора??????
Кстати, интересно, будет ли работать после конвертирования (8.2 не пользуюсь, но планируется переход)?
В ближайшее время добавлю эту обработку для 8.2
Спасибо! Очень полезная штука оказалась. Бухгалтер довольна, что теперь можно делать автоматически перенумерацию.
Появилась для 8.2?
(34) Да появилась.
файл для 8.2 является основным для загрузки.
Спасибо огромное! Очень полезная обработка, реально облегчила жизнь кассира.
В модуле объекта ошибка
мДлинаПКО = Метаданные.Документы.ПриходныйКассовыйОрдер.ДлинаНомера;
мДлинаРКО = Метаданные.Документы.ПриходныйКассовыйОрдер.ДлинаНомера;
Минус. За пароль. Не себе, не людям.
(5) WiseSnake, у нас перенумерацию тоже делает кассир. Один раз за прошедший месяц. Он не знает, как она работает, но знает, какой должен быть результат. Это зона его ответственности.
При попытке перенумеровать РКО упорно пишет «Укажите начальный номер документов, отличный от 0» и отказывается работать.
Начальной номер РКО и ПКО заданы(пробовал несколько значений)
Модуль обработки запаролен.
А потому разработка оказалась бесполезной.