<?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.01.06 получение авансов по экспорту НДС не облагается и счф по таким операциям не составляются.
А про напильник- вообще смешно.
Спасибо за конструктивную критику.
В свое оправдание хочу сказать следующее: моего кода в обработке немного, она сделана очень быстро под совершенно конкретные собственные нужды, скомпилирована из «кусков» типовой бухгалтерии.
Тем не менее, я подумал, что во многих простых случаях ее можно использовать и выложил сюда.
Наверное стоило сначала провести тщательную «предпродажную» подготовку, чтобы соответствовать высоким стандартам этого сайта.
Если кто-нибудь напишет, что такая обработка актуальна, то я обязуюсь привести ее в надлежащий вид.
Пока не скачивал.Но,судя по описанию,в этой обработке не предусмотрено формирование записи по восстановлению НДС с аванса ?
Господа, экономьте трафик других людей! «Жмите» в zip-архив! 🙂
5) «… Если кто-нибудь напишет, что такая обработка актуальна, то я обязуюсь привести ее в надлежащий вид… »
тема авансов — актуальна, так что ждем продолжения.
Мне, как пользователю понравилось, но есть недочеты. Я говорю как опытный пользователь и как главный бухгалтер. Вопрос Авансов актуален.
1) не проставляется вид операции: Аванс
2) дата может быть и датой поступления аванса (как у меня)
3) можно внедрить и печать сразу же
4) более расширенную возможность нумерации (у меня, например, что бы не сбивать нумерацию введен АВ000159)
И, кстати, есть обработки для бухгалтерии по печати документов по поступлению и реализации (я имею введу торг-12 и с/ф), но не нашла ни одной обработки комплексной печати на аванс. Промах Ваш товариши программисты!!!!
Спасибо за интерес к разработке! Сиуация сейчас такова, что я не имею больше времени заниматься 1С «просто так». Может недельки через три, когда пойду в небольшой отпуск, посижу немного — сделаю чего-ниубдь. В общем «следите за рекламой» на сайтеhttp://infostart.ru/projects/829/ !
🙂
Счет-фактура должен выписываться не последним числом месяца,а на днем оплаты
Обработка очень нужна и актуальна
Простите, друзья! Работаю полный рабочий день — все часы расписаны; а вечером программирую аутсорс еще часа по два-три ежедневно. На авансы нету времени совсем. Хотя очень хочется сделать что нибудь красивое и полезное на эту актуальную тему, с учетмо всех замечаний и «последних» тенденций.
Может быть в выходные? Не знаю …
Очень нужна Ваша помощь в доработке (за отдельную плату естественно), если есть возможность откликнитесь на post_l@bk.ru
мне потребоволась такая обработка. Нашел эту страницу. Во многом согласен с
«Звездочет». Сейчас «причесываю» обработку и исправляю ошибки.
Также сделаю возможным формирования СФ на аванс по результатам сальдо на конец периода. Обращайтесь: n7890@nm.ru
Много не учтеных факторов, суммы берет из документа а не из счетов бух учета, посмотриhttp://infostart.ru/projects/4292 , там часть твоего кода(создание фактур), но учет идет от бух счетов.
Опупеть, какая долгая жизнь у этой простенькой обработки!
Как молод я был … какой наивный код писал…
🙂
Больше тысячи скачиваний. Видать тема действительно актуальная. Посетило даже минтуное желание сделать ее с нуля и «как надо», чтобы закрыть все вопросы.
Но мне по-прежнему не до этого 🙁
В полне нормальная обработка и в таком виде. Во всяком случае это лучшее, что у меня было
А печать сразу же внедрить было бы не плохо да и на тему нумерации правильное замечание.
Обработка работает, сохранила мне кучу времени. Спасибо.
А у меня что-то не работает, помогите кто-нибудь!!!!!!!!!!!!!!
СЧЕТАФАКТУРЫНААВАНС.ERT(1217)}: Номер не уникальный!
Спасибо, допилил и использую