<?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) Насколько я помню, если длина наименования файла > 50, теряется расширение.
При выборе статьи движения денежных средств, неплохо было бы установить отбор по виду «Налоги и сборы»….
В табличную часть «Суммы к перечислению» необходимо добавить подвал с итогами.
При формировании ПП не производится заполнение полей «текст получателя» и «текст плательщика», в результате — невозможно распечатать печатную форму.
И еще — по неизвестной причине не заполнился реквизит «Коррсчет». В общем обработка полезная, очень….
PS: как производится рассчет суммы на перечисление . У меня сумма по табличной части «Суммы к перечислению » не совпали с Суммами по платежному поручению
(2) Где теряется расширение, если длина наименования файла > 50?
+ за идею
(3) При выборе статьи движения денежных средств устанавливается отбор по виду движения «Расчеты по налогам и сборам».
(4) В табличную часть «Суммы к перечислению» добавлен подвал, в итоге выводятся суммы платежей.
(5) Текст получателя и текст плательщика формируются типовой функцией СформироватьАвтоЗначенияРеквизитовПлательщикаПолучателя общего модуля ФормированиеПечатныхФорм. А она работает с реквизитами организации — «НаименованиеПлательщикаПриПеречисленииНалогов». Нужно проверять заполнение реквизитов.
(6) Если я назову файл ПодготовкаПлатежныхПорученийНаПеречислениеНалогов.epf, то раньше терялось расширение «epf». Возможно сейчас это не так.
Я делал нечто подобное своему клиенту.
+
уж скоько раз писали в 1с сделать подобное, тем более, что в клюшках это было…
Большой жирный плюс за то, что нашли времяэто сделать
(10) Я в конференции 1С ещё год назад расписал, как надо сделать. !С-ники сказали «спасибо», пообщели сделать в КОРПе. Недавно посмотрел — сделали какой-то полуфабрикат. 🙁
Что касается самой разработки, то за групповое формирование платёжек — очевидный плюс, за незнание правил оформлления налоговых платежей — столь же очевидный минус => итоговая оценка — ноль.
На скриншотах замечены следующие ошибки, которые приведут либо к непроведению налогового платежа банком, либо к незачислению суммы налоговой инспекцией с соответствующими последствиями по пеням и недоимкам:
1. КБК налоговой службы начинается на 182, а вовсе не на 015 => платёж не будет зачтен налоговиками.
2. Очередность платежа налоговых платежей — 4, а не 6 => банк не примет платежку.
3. Статус налогоплатедьщика для пенсионных взносов не 01, а 14 => налоговики имеют право не зачесть платеж.
4. Статус налогоплательщика для НДФЛ не 01, а 02 => налоговики имеют право не зачесть платеж.
5. Регистрационый номер налогоплательщика в ПФР не указан => платёж не будет зачтен пенсионщиками.
6. Для платежей внутри налогового периода используется тип платежа АВ, а не НС (это не будет считаться налоговиками за ошибку, но всё равно, можно было бы и формализовать).
Кроме того, на скриншотах я не увидел, каким образом осуществляется настройка, позволяющая указывать нули в тех полях платежки, информация по которым не определена (КПП, номер документа, дата документа и т.п.).
В заключение замечу, что задача налоговых платежей формализована далеко не полностью — ещё есть, куда совершенствоваться. Можно, например, резать КБК на сегменты (см. ту же КОРП) и в зависимости от того или иного сегмента менять назначения платежа. В частности, 14-й символ КБК определяет, что платится: налог, пеня или штраф (кстати, от этого символа также зависит и очередность платежа, которая может быть равной 3 или 4). Ну, и далее в том же духе…
P.S. Будет желание развивать продукт, пиши в личку.
(11) Пардон, опечатался:
>!С-ники сказали «спасибо», пообщели сделать в КОРПе
1С-ники сказали «спасибо», пообещали сделать в КОРПе.
(11) вообще-то не я автор разработки,так что предложения наверно лучше адресовать ему 🙂
Обработку я еще не тестировал — собираюсь предложить бухгалтерам фирмы, которая кучу организаций ведет. Думаю им облегчение будет. Но сначала, конечно, будут проверять правилно ли заполняются реквизиты. Возможно, что на уровне шаблонов большинство вопросов решаемо.
Кстати, не нашел как можно узнавать (подписаться) о выходе обновлений. Кто-то может подскажет?
Да, и вот ещё что…
На скришоте почему указан дебетовый оборот НДФЛ. 🙁
(8) Не бывает «двунаправленных» статей движения денежных средств: только «однонаправленные» — либо притоки, либо оттоки. Точнее, не бывает «двунаправленных» статей ДДС, если эти статьи формируют форму №4. А если это «внутриденежные» статьи, и в форму №4 они не попадают, то они могут использоваться и как притоки, и как оттоки. Налоговые платежи — однозначно должны разбиваться на два направления:
Оттоки: уплата налогов, сборов, пеней, штрафов, госпошлин
Притоки: возврат налогов и сборов
Можешь назвать файл: ПакетноеФормированиеНалоговыхППИ.epf
(11) (14) Цель создания скриншотов — продемонстрировать не методику заполнения налоговых платежей, а формы диалогов. Насчет именования файла — разберусь сам. КОРП смотрел, некоторые моменты как раз оттуда. Но смысла дублировать функционал не вижу, кому будет нужно, тот приобретет более дорогой продукт.
Да ладно тебе, Владислав, ты же видишь что твое творение вызвало массу дебатов… Это ли не лучший отзыв о нужности продукта. Отвечая на (11) — массу замечаний сделал видимо не изучив разработки. Дело в том, что многи пункты можно легко редактировать именно в первоначальных настройках….
Молодец! А остальным — коды открыты … поправьте.
Владислав, не мешало бы еще и прогрессор организовать…
Для полной автоматизации процесса неплохо бы в назначении платежа автоматом вставлять за какой период налог.
(18) При заполнении таблицы налогов, в назначение платежа дописывается период.
(15)
>Цель создания скриншотов — продемонстрировать не методику заполнения
>налоговых платежей, а формы диалогов.
А зря. Ты всё-таки делаешь не технический инструментарий, а такой, который, при неграмотной настройке, может привести к налоговым санкциям.
>Насчет именования файла — разберусь сам.
>Не сомневаюсь. Но моё предложение было всего лишь продолжением разумного совета (1). Замечу, кстати, что пока ещё не разобрался. 🙂
>КОРП смотрел, некоторые моменты как раз оттуда. Но смысла дублировать
>функционал не вижу, кому будет нужно, тот приобретет более дорогой
>продукт.
Я и не призывал дублировать — я призывал ГРАМОТНО формализовать задачу, т.е. ЛУЧШЕ, чем это сделано в КОРП — все предпосылки для этого уже заложены. Просто используй свои преимущества! 🙂
Написал нечто похожее на семерке
Сам хотел написать на 8ке да все времени не не было, от себя можно еще добавить функцию что бы сразу и распечатывала (для тех у кого нет банк клиента)
а так молодец!)
Выбор организации и формирование ПП только по ней не работает. т.Е. все налоги которые сформированы в базе из нескольких организаций формируются на выбранную.
Но если организация только одна — то большой плюс. Вот если бы еще номер КБК сопровождался информацией чей это кбк (пример: ПФР накоп, ФСС НСиПЗ) хотя и без этого хорошо
согласна с (22) насчет нескольких организаций. Еще возник вопрос, как перенести шаблоны при копировании базы на другой комп?
сделал в декабре платежки за ноябрь и за декабрь, а она декабрьские заменила с теми же номерами ноябрьские. Заметил только когда выписки начал вносить.
(25) При формировании платежных поручений производится поиск ранее сформированных документов по полям «ДатаПеречисления,Организация,СчетОрганизации,Контрагент,СчетКонтрагента,СчетУчетаРасчетовСКонтрагентом,Комментарий». Если будут найдены документы, идентичные вновь формируемым по данным полям, то они будут перезаполнены. В данном случае необходимо либо изменить содержимое поля «Комментарий» в документах, сформированных ранее, либо дату платежа.
Многие бухгалтера мечтали о такой обработке несколько лет.
почему на печать не выводит КБК ОКАТО и.д. или я что то не так делаю???
А как использовать эту замечательную обработку в 1С 8.2?
Появляется сообщение об ошибке:
{Форма.Форма.Форма(184)}: Поле объекта не обнаружено (ВидОперации)
ЭлементыФормы.СписокПлатежей.Значение.Отбор.ВидОперации.Использование = Истина;
Спасибо. Помогло.
(29) И у меня так же…Конвертация не помогла.
(31) Hellgga, в БП редакции 2.0 есть штатная обработка «Формирование платежных поручений на уплату налогов». Какой смысл использовать старую, не предназначенную для этой редакции обработку?