Контроль для НДС




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

37 Comments

  1. cucuruza

    У меня не заполняется ни одна таблица.

    Reply
  2. nata_07

    Значит ошибок (которые проверяются обработкой) нет. 😀

    Reply
  3. akozhuhova

    (2) думаю, стоило бы вывести сообщение в случае отсутствия ошибок. Молчание — пугает бухгалтеров. А так обработка очень хорошая! +!

    Reply
  4. victuan

    (0) Еще много чего можно проверить по поводу НДС. Здесь примерный список можно посмотреть http://infostart.ru/public/20629/

    Reply
  5. cucuruza

    отличная обработка, всеми способами неделю искала разницу по базам ндс и прибыль, зато теперь нашла. Спасибо.

    Reply
  6. ash2015

    БЛАГОДАРЮ

    Reply
  7. KIA26

    Огромное спасибо!

    Reply
  8. ASV

    1. Насколько я понял, «Проверка суммы НДС по документам» проверяет всегда 18%.

    У меня в ошибки попадает перечисление Зарплаты и Перечисление денежных средств со счета на счет (В обоих случаях в платежке ставится «НДС не облагается»).

    Хорошо бы исключить из проверки эти платежи.

    2. При проверке Авансов, было бы удобно иметь хотя бы одну колонку в которой вычислялся бы НДС от «Остаток62 кт» исходя из ставки 18/118.

    В остальном «+»

    Reply
  9. nata_07

    (8) 1. В условиях жестко задан фильтр по документам со ставкой НДС 18%. Документы с другими ставками в выборку не попадают. (ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС18)).

    2. Обновленная версия с колонкой «Разница».

    Reply
  10. buh02

    Здравствуйте! Я пользовалась вашей чудесной обработкой в Бухгалтерии 8.1, теперь перешла на 8.2 (1.6.30.7 и 2.0.19.12), проверила в обоих конфигурациях — не запускается (Ошибка загрузки документа. Внешняя обработка не может быть прочитана текущей версией программы). В чем может быть дело?

    Reply
  11. bearcat

    (10) нужно конвертировать обработку в 8.2

    это можно сделать непосредственно в конфигураторе 1С 8.2

    Все выгруженные обработки/отчеты открытьв конфигураторе 8.2, на вопрос — Сконвертировать? — ответ «да»

    При этом. все равно некоторые обработки не работают даже после конвертации, потому что есть изменения в конфигураторе 8.2 по сравнению с 8.2.

    Такие обработки нужно дорабатывать специалисту , подгонять под 8.2

    Конкретно обработка «Конроль НДС» после конвертации у меня работает.

    Reply
  12. Alav

    (10) В 2.0 есть типовая, встроенная проверка. Чем она не устраивает?

    Reply
  13. dar_t

    (11) Спасибо за совет! У меня получилось сконвертировать! Я первый раз этим занимаюсь! СПАСИБО!

    Reply
  14. FreeJ

    Спасибо за обработку.

    Небольшое замечание: если самому вводить КонДату, то данные за этот день в отчет не попадают.

    У себя в процедуру

    Процедура КонПериодаПриИзменении(Элемент)

    добавил

    КонПериода=КонецДня(КонПериода);
    Reply
  15. nicxxx

    если в документе есть ставка НДС, но флаг УчитыватьНДС отключен — то обработка все равно показывает ошибки на закладке «НДС в документах». надо добавить условие на этот флаг и исключить подобные документы

    Reply
  16. nata_07

    (15)Условие можно конечно задать, но его смысл? Если есть ставка НДС — то НДС учитывается. В таком случае не выставленный флаг «Учитывать НДС» — косяк пользователя. Если НДС не учитывается, то и ставки его нечего заполнять (опять таки — косяк).

    Reply
  17. nicxxx

    документы могут создаваться программно, например при выгрузке из торговли.

    наличие заполненной ставки ндс не косяк, главный тут — флаг Учитывать НДС.

    я уже переделал как мне надо, просто учти, если хочешь

    Reply
  18. nata_07

    Не согласна. Документы должны создаваться правильно и переноситься правильно. Несоответствие одного параметрареквизита другому вносит путаницу. А ну как 1с заменит флаг чем-нибудь, и все… получите НДС, там где его нет.

    😀 А вообще — это мое личное мнение, учить кого-то не буду.

    Reply
  19. nata_07

    (17)Да, в догонку. Если при выгрузке из торговли и это план обмена — что мешает правила нормально настроить?

    Reply
  20. beland

    отличная обработка. спасибо.

    Reply
  21. WildFire

    Отличная штука! Слегка подправил под свои нужды, да и покрасивше сделал, но всё равно огромное спасибо автору!

    Кстати, а можно бы сделать что-то похожее, только по счетам продаж? Мне наши бухи пытались пояснить, что от меня хотят, но сделали это так путанно, что я их попросту не понял 🙂 или по крайней мере задачу поставить толком, а я уж сам ее попробую реализовать.

    Reply
  22. nata_07

    (21)»Кстати, а можно бы сделать что-то похожее, только по счетам продаж?»

    Сделать то можно все, что угодно.Нужна постановка задачи (что с чем сравнивать, хотя бы на пользовательском уровне). Эта обработка- урезанный вариант рабочей, сделанной по мотивам найденных косяков (т.е. задачу тоже ни кто не ставил).

    Reply
  23. bearcat

    22. Сделать то можно все, что угодно.Нужна постановка задачи (что с чем сравнивать, хотя бы на пользовательском уровне). Эта обработка- урезанный вариант рабочей, сделанной по мотивам найденных косяков (т.е. задачу тоже ни кто не ставил).

    Прошу выложить не урезанный вариант обработки. Или доработать, если не откажетесь. Так как сейчас на вкладке «АВАНСЫ» обработка отражает только в части начисления НДС, то есть есть данные «оборот 62 кт» и «Оборот 76 Дт». Но обработка не отражает данные «оборот 62 Дт» и соответственно «оборот 76 Кт». Когда большой массив остатков, то сразу навскидку не определить есть ошибки или нет. Потому было бы просто замечательно, если бы был добавлен еще хотя бы один столбец, в котором бы отражалось расхождение, если оно есть, а если расхождения нет, тогда ноль. Расхождение легко считать по формуле: сумма из графы «Остаток 62 Кт» х 18 /118 минус сумма из графы «остаток 76 Дт». Если ноль, значит все правильно, если есть разница , то пусть бух сам решает, если копейки, то можно пренебречь, а если тысячи, надо искать ошибку.

    Хотя и проверки расхождения только по ИТОГАМ маловато, потмоу что бывает так, что пришел аванс Кт62 есть, а НДС с аванса не начислили, то есть Дт 76 АВ ноль. И соответственно при зачете аванса оборот Дт 62.02 есть, а оборот по Кт 76.АВ тоже нет. Вот и получается, что сальдо конечное верное, но внутри была допущена ошибка в части НЕНАЧИСЛЕНИЯ НДС с аванса, к чему налорги обязательно придерутся.

    Потому я все равно после этой обработки проверяю на калькуляторе ИТОГ сальдо и итого оборотов 62.02Кт х 18/118 = ИТОГ оборотов 76.АВ Дт. Если есть расхожление, тогда сохраняю в Excel и «протягиваю» формулу по всем покупателям, чтобы найти разницу.

    Поэтому, если бы автоматически разницу считала обработка, вот это было бы отлично!!! Какая экономия времени была бы!!!

    Reply
  24. nata_07
    bearcat пишет:

    Но обработка не отражает данные «оборот 62 Дт» и соответственно «оборот 76 Кт».

    bearcat пишет:

    Расхождение легко считать по формуле: сумма из графы «Остаток 62 Кт» х 18 /118 минус сумма из графы «остаток 76 Дт».

    Это и есть в колонке «Разница».

    bearcat пишет:

    Поэтому, если бы автоматически разницу считала обработка, вот это было бы отлично!

    Так о какой разнице в итоге речь — Обороты Кт62 — Дт76 или Дт62 — Кт.76 или Сальдо конечное Дт62 — Кт76??

    Reply
  25. nata_07

    (25)Читать я умею. Просьба не писать бессмысленные комментарии (в данном случае «типа ответ» на не Вам поставленный вопрос)

    (23)Вопрос остался прежним — «Разница по Конечному сальдо Кт62 — Дт76 в отчете показывается, какую разницу хочется видеть еще?»

    Reply
  26. Master07

    Огромное спасибо!

    Reply
  27. bearcat

    26. цитата «Разница по Конечному сальдо Кт62 — Дт76 в отчете показывается»

    значит мы говорим о разных обработках.

    Я проверила, я веду речь об обработке с названием «Kontrol_NDSторую скачала 20.03.11.

    в этой обработке можно задать период c_gj? организацию, в ней четыре вкладки:

    1. контроль СФ

    2. Авансы

    3. платежки

    4. НДС в док

    Я говорю о том, что вкладка АВАНСЫ имеет в списке всего шесть граф

    1. номер

    2. Контрагент

    3. Оборот 62Кт

    4. Остаток 62 Кт

    5. Оборот 76 Дт

    6. Остаток 76 Дт.

    ВСЕ!!!!!!!!!!!!!!!!!

    Не на вкладке графы с названием «Разница по конечному сальдо» !!!!!!!!!!!!!!!!!!!!!!

    Если это есть в вашей обработке, сейчас скачаю и заменб прежнюю обработку на Вашу.

    Reply
  28. bearcat

    Посмотрела на скриншот к данной обработке, вроде как это та самая обраюотка, которая у меня есть.

    Навашем выложенном вами скриншоте вкладка «АВАНСЫ» не имеет столбца «Разница» (по Конечному сальдо Кт62 — Дт76 «) ???

    В обработке, которая в моейт 1С я вывела список и проверила вдруг там есть колонка «Разница», но на ней просто не стоит «галочка». Нет такой колонки.

    Может быть разница должна показываться не на вкладке АВАНСЫ, а на вкладке «Платежки» или «НДС в док», я не знаю, т.к. у меня эти вкладки вообще не формируются.

    Когда нажимаю «Заполнить платежки» , пишет «Преобразование значения по типу Булево не может быть выполнено», после этого для любопытства можно нажать «Подробнее» и тогда прочитать сообщение» {Форма.Форма.Форма(162)}: Преобразование значения к типу Булево не может быть выполнено

    Если Не Неудача Тогда

    Такая же ситуация и с вкладкой «НДС в документах».

    То есть в данной обработке не знаю как у кого, а у меня заполняются только две вкладки из четырех, но на вкладке АВАНСЫ я хотела бы видеть автоматический расчет ошибки (или подтверждения отсутствия ошибки).

    Например, в колонке «Остаток 62Кт» указан остаток 11800, а на вкладке «Остаток 76 Дт» указан остаток 3000 рублей, тогда как расчетный остаток должен быть 11800 х 18/118 = 1800. И вот , если бы был столбец «Разница» , то в нем бы как раз пользователь увидел сумму 1200 (рассчитанныую как разница между суммой 3000 руб, которая реально «висит» на счете 76.АВ в 1С и между расчетной суммой 1800 руб, которая ДОЛЖНА быть на остатках 76.АВ при остатке 11800 на счете 62.02.)

    А если при остатке по кредиту 62.02 суммы 11800 в колонке «Остаток по дебету 76» видим сумму 1800, следовательно в колонке «разница» должен стоять 0.00 (ноль целых ноль десятых).

    Сейчас скачала еще раз обработку, завтра загружу в 1С, посмотрю. может быть у меня действительно старый вариант и вы делаи какое-нить обновление.

    Reply
  29. nata_07

    (29)Да, каюсь, скриншоты не обновляла, НО обработка обновлялась несколько раз и описание ТЕКУЩЕГО функционала есть и оно обновляется вместе с обработками.

    Колонка «Разница» на вкладке «Авансы» присутствует вот с этого времени —

    (8)

    ASV пишет:

    2. При проверке Авансов, было бы удобно иметь хотя бы одну колонку в которой вычислялся бы НДС от «Остаток62 кт» исходя из ставки 18/118.

    (9)

    nata_07 пишет:

    2. Обновленная версия с колонкой «Разница».

    и все это аж в ноябре 2010 года….

    P.s.: ради чистоты эксперимента только что загрузила старую обработку для 8.11.6 — колонка «Разница» в наличии.

    Какое-то время тут присутствовал клон моей обработки для Бухгалтерии 2.0 (быстро сняли с публикации и забанили автора за плагиат) ну и на одном форуме есть ссылка на архив в котором есть и старая версия Контроля, может быть ваша версия из этих источников…

    P.p.s.: грустно, думала обсуждаем добавление функционала, а оказалось — какой-то полтергейст

    Reply
  30. bearcat

    30. Из-за чего возникло недоразумение.

    1. дата самой обработки 31.05.2010 13:02, я ее скачала в июне 2010 года.

    2. я только что еще раз перечитала аннотацию к обработке и сообщения об обновлении в ноябре 2010 года не увидела.

    3. не знаю кто как, я лично, когда скачиваю обработку, дополнительно веду учет когда скачала, наименование самой разработки , номер с сайта, чтобы было легче найти. Ессно, я не скачиваю каждый раз заново обработку, чтобы проверить, а не произошло ли какое-нить изменение в ней?

    Время, потраченное на переписку не считаю зря потраченным, так как в новой обработке я все равно не нашла разницы с оборотов.

    (26) Вы спрашивали : «Какую разницу хочется видеть еще?»

    отвечаю: разницу в дополнение к оборотам, которые данная обработка отрадает на вкладке АВАНСЫ. Почему я уже обясняла выше в (23)

    Хотя и проверки расхождения только по ИТОГАМ маловато, потмоу что бывает так, что пришел аванс Кт62 есть, а НДС с аванса не начислили, то есть Дт 76 АВ ноль. И соответственно при зачете аванса оборот Дт 62.02 есть, а оборот по Кт 76.АВ тоже нет. Вот и получается, что сальдо конечное верное, но внутри была допущена ошибка в части НЕНАЧИСЛЕНИЯ НДС с аванса, к чему налорги обязательно придерутся.

    <…>

    После загрузки обновленной обработки специально проверила.

    С аванса Д 51 К 62.02 на сумму 100 000 счет-фактуру на аванс не сделала, а через 10 дней был зачет аванса, то есть была отгрузка и соответственно при проводке Д 62.02 К 62.01 сальдо со счета 62.02 исчезло. По итогам все нормально нет ни сальдо по счету 62.02 ни сальдо по счету 76.АВ. А нет столбца с разницей расчетного НДС с оборота по крелиту 62.02 со счетом 76.АВ , потому нужно напрягать зрение и просматривать все строки , чтобы найти ошибку. d этом случае все равно нужно вручную делать проверку/

    Я лично сделала в Excel таблицу

    1. Сальдо К 62.02 оборот Д 62.02 Оборот Кт 62.02 Сальдо К 62.02

    2. Сальдо Д 76.Ав Оборот Д 76.Ав Оборот Кт 76 АВ Сальдо Д 76.Ав

    3. Сальдо Д 76.Ав Оборот Д 76.Ав Оборот Кт 76 АВ Сальдо Д 76.Ав

    4. разница Д 76.Ав Оборот Д 76.Ав Оборот Кт 76 АВ Сальдо Д 76.Ав

    строку 3 и 4 я заполнила формулами из строки 1 и 2.

    Если вижу разницу более 1 рубля, проводу аналитическую проверку по покупателям, откуда взялась ошибка.

    Вот об этом я говорила выше, что было бы здорово, если бы не в формате Excelстроить таблицу имея обработку, а одним нажатием кнопки в данной обработке увидеть разницу с оборотов.

    Reply
  31. bearcat

    Также не поняла назначение вкладки НДС-АВАНСЫ ( наверное, это в аннотации пункт 6*. Сравнение оборотов регистра НДС «ЗаписиКнигиПродаж» и счёта 76.АВ. (только для 8.2 2.0)

    На данной вкладке есть пять колонок

    1. НДС оборот

    2. Книга продаж

    3. счет 76.АВ

    4. сумма оборот дт

    5. разница

    Не знаю как это правильно должно работать, но у меня на этой вкладке заполняются только три колонки:

    1, 2, и 5, и значения из колонки 1 равны значениям в колоне 5 при том , что реально никакой разницы нет, суммы НДС оборот в книге продаж реально соответствуют суммам по дебету счета 76.АВ.

    Прошу подсказать, может что-то нужно настроить, чтобы данная вкладка заполняла все правильно?

    у меня 8.2 (8.2.13.205), релиз 2.0.26.8 (последний)

    Reply
  32. nata_07

    (32)Это значит, что на 76.АВ нет ЭТИХ документов с ЭТИМИ суммами. Проверить просто — Оборотка по 76.АВ и регистр накопления ЗаписиКнигиПродаж с нужными фильтрами).

    Колонку с разницей по оборотам (всего то…) на неделе сделаю.

    Reply
  33. pgs1958

    Вообше надо отменить НДС , ввести налог с оборота и вопросов ни у кого не будет.

    Reply
  34. Acasta

    Спасибо, пригодилась!

    Reply
  35. VCFORMULA

    Пришлось разделить проверку по этапам.

    Reply
  36. orsprog

    Насколько я поняла… «Проверка суммы НДС по документам» проверяет всегда 18%.

    У меня в ошибки попадает перечисление Зарплаты и Перечисление денежных средств со счета на счет (В обоих случаях в платежке ставится «НДС не облагается»)…

    Reply
  37. Гость

    ОГРОМНОЕ СПАСИБО!!!!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *