Исправленная ведомость РСВ-1 для комплексной и бухгалтерии




Принцип обмена данными из 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='\

38 Comments

  1. jeckane

    😀 Спасибо, заполнилось, некоторые цифирки даже совпадают с ожидаемыми, рекомендую ))) Но блин хотелось бы от ОдынЭс нормальных отчетов и этот и ФСС-4

    Reply
  2. kittwell

    На моей памяти ещё ни один новый отчет сделаный 1С не работал сразу. Более того очень часто исправление ошибок выдается в аккурат к концу срока сдачи отчетности.

    Reply
  3. корум

    (0) Огромное спасибо. Вроде бы помогло, завтра бухи выскажут всё что думают 🙂

    Reply
  4. kittwell

    Теперь с ожиданиями совпадает гораздо больше 🙂 и не только в комплексной. 😀

    1. Работает с бухгалтерией.

    2. Заполняются данные по оплате сборов берутся из данных бух учета.

    Reply
  5. Business.itit

    😥 Вроде все добавил и выдает такую ошибку

    ВсегоСотров = Сотрудники.РазмерСписка();

    {C:КСEXTFORMSRP10Q1.GRPESN_GET.ERT(1221)}: Значение не представляет агрегатный объект (РазмерСписка)

    Пока НомерЗначения < СписокСотрудников.РазмерСписка() Цикл

    {C:КСEXTFORMSRP10Q1.GRPRCV102.ERT(3551)}: Значение не представляет агрегатный объект (РазмерСписка)

    Reply
  6. Ipse

    При ЕНВД выводит нули 🙁

    Reply
  7. Wisest

    не заработало 😥

    тоже везде нули

    Reply
  8. kittwell

    (5) Скорее всего у Вас нет исправления Сотрудник.ФизЛицо просто в комплексной и в бухгалтерии это разные справочники. Условие там стоит.

    (5) (6) (7) а в какой конфигурации не заработало?

    Reply
  9. Vov4ikK

    В Комплексной не работает, ошибки аналогичны (5).

    Reply
  10. Aalam

    Да, в типовой комплексной 496 не работает (я скачивал файл).

    ЕстьЕНВД = ?(Константа.ОрганизацияЯвляетсяПлательщикомЕНВД = Да<<?>>, 1, 0);

    {\SERBUHBUHBASES_NEWMORONMASKRUSATCEXTFORMSRP10Q1.GRPESN_GET.ERT(74)}: Переменная не определена (Да)

    ТаблицаОсновныхТарифов = глПолучитьТаблицуОсновныхТарифов(ДатаАктуальности<<?>>);

    {\SERBUHBUHBASES_NEWMORONMASKRUSATCEXTFORMSRP10Q1.GRPESN_GET.ERT(181)}: Недостаточно фактических параметров

    СотрЗапросПоВзносам = глОтобратьСтрокиТаблицы<<?>>(ЗапросПоВзносам, СписокКолонок);

    {\SERBUHBUHBASES_NEWMORONMASKRUSATCEXTFORMSRP10Q1.GRPESN_GET.ERT(749)}: Функция не обнаружена (глОтобратьСтрокиТаблицы)

    Пока НомерЗначения < СписокСотрудников.РазмерСписка() Цикл

    {\SERBUHBUHBASES_NEWMORONMASKRUSATCEXTFORMSRP10Q1.GRPRCV102.ERT(3551)}: Значение не представляет агрегатный объект (РазмерСписка)

    Reply
  11. Aalam

    Виноват, я скачал только 1 файл. Пробую и второй.

    Reply
  12. Aalam

    Все равно не работает.

    Вот

    Если (Сотрудник.Инвалид.Получить(ДатаМесяца) = 1) Тогда

    {\…ATCEXTFORMSRP10Q1.GRPESN_GET.ERT(425)}: Поле агрегатного объекта не обнаружено (Инвалид)

    Пока НомерЗначения < СписокСотрудников.РазмерСписка() Цикл

    {\…ATCEXTFORMSRP10Q1.GRPRCV102.ERT(3551)}: Значение не представляет агрегатный объект (РазмерСписка)

    Reply
  13. Kurt

    В Комплексной тащит уплату налогов по всем организациям имеющимся в базе, короче тупо дебетовый оборот ВСЕГО 69.2.2.. (и по остальным 69ым тоже) Лечится установкой фильтра на бухитоги по разделителю учёта.

    в RCV102.ERT строка 3821

    Если (ИдентКонфигурации = «BUOUSL») ИЛИ (ИдентКонфигурации = «BU42TK») ИЛИ (ИдентКонфигурации = «BUPSB25») Тогда //Бухгалтерия, ПУБ, Комплексная

    БухИт = СоздатьОбъект(«БухгалтерскиеИтоги»);

    БухИт.ИспользоватьРазделительУчета(ВыбраннаяФирма);

    БухИт.ИспользоватьСубконто();

    Если КонецРассчитанногоПериодаБИ() < Дата2 Тогда

    Reply
  14. andron-qq

    Я хоть и на паровозе, но работает! Спасибо! Тем у кого не работает — убить все предыдущие варианты с сохранением пустышек и … все сначала с титульного листа с другим

    именем варианта. 496 тип.

    Reply
  15. kittwell

    (13) Спасибки! Поправлю 🙂 Хотя отношение это имеет только для тех у кого больше одной фирмы в базе. Иногда но бывает.

    И ещё, по статистике скачивания я обратил внимание на то, что народ качает только один файл RCV102 а скачивать надо оба файла. Более того собственно весь расчет и делается в ESN_GET

    (12) С сотрудником — инвалидом проверю 🙂

    Reply
  16. lenaonly

    Объясните несведущему человеку! Скачать эти два файла и заменить в папке ExtForms? Или еще ручками надо все править? 😳

    Заменила. Попала оплата, а начисления 0! Как небыло так и нет…. 🙁

    Reply
  17. kittwell

    (16) в какой конфигурации используете?

    Reply
  18. lenaonly

    Комплексная 496

    Reply
  19. Serg O.

    сегодня полдня убил на «обновления» от 1С от 12.04.2010 — для Комплексной РСВ-1 не работает, завтра буду Ваш вариант пробовать…

    Reply
  20. Ipse

    В комплексной конфигурации, рел. 496 при наличии УСН или ЕНВД по прежнему выдаются только нули. Если смешанная система (общая + ЕНВД), то берутся только цифры, относящиеся к общей системе налогообложения, суммы по ЕНВД игнорирует 🙁

    Reply
  21. ИИван1

    Огромная благодарность за доработаный отчет. Одинэс в очередной раз обо**алась выкладывая отчетность 3 раза подряд и так и не исправив очевидный косяк, видимо пустили все силы на 8ку 👿

    Reply
  22. ИИван1

    Единственное пришлось регистироваваться в вас 2 раза тк стоит ограничение на скачивание файлов раз в 24 часа. Простите меня пожалуйста 😳

    Reply
  23. kittwell

    (20) а вы проводки при усн формировать не пробывали? Очень помогает. 😉

    Reply
  24. Иванов2000

    У меня при распаковке выдает:! D:ИнфостартRCV.zip: Архив повреждён или имеет неизвестный формат.Антивирус отключен. Скачивал неоднократно.

    Может, кто подскажет??? Скачивал Оперой.

    Reply
  25. Иванов2000

    Оперой качать нельзя!

    Reply
  26. okf

    Спасибо за програмки! Работает! По-моему вам (kitwell) пора требовать проценты от 1С за исправление их ошибок!

    Reply
  27. Песец

    Два дня б/л за счет работодателя не должны попадать в строки 200,201,202?

    Reply
  28. irinka800

    (27) Должны. и в 210-212 тоже должны попадать, как необлагаемые. Обратили внимание, что в 210-211 не попадают выплаты иностранцам, хотя по 212-ФЗ тоже необлагаемые суммы

    Reply
  29. Aalam

    Ну вот, не получилось у меня с этим вариантом 🙁

    А 1С уже свой выложил. Вроде как заполняется.

    Reply
  30. Kurt

    Это всё конечно хорошо…

    А вот что делать с RCV104.ERT (раздел 4.1) в Комплексной??? (данные по инвалидам. и такие люди у нас есть)

    Кнопка «Заполнение» активируется только при установленной галке «заполнять по внешним данным»… и где эти внешние данные брать??? Я в Комплексной не нашел никакого отчета, который хоть сколько-нибудь похожую информацию рожал … а уж тем более выгружал 👿

    А про RCV105.ERT (раздел 4.2) вообще молчу… там заполнение вообще ни для какой конфигурации не предусмотрено. 🙁

    Reply
  31. aimerlive

    заполняется то заполняется…. только у нас заполняется совсем неправильно сверЯешь со стандартными отчетами не то 😥

    Reply
  32. kittwell

    Для тех кто еще не знает.

    1. Если у сотрудника з/п превысит 415000 руб то формы 1С включая свежую несут полную ахинею.

    2. Последний релиз 1С включает в базу б/л за счет работодателя 🙂 из-за этого опять же полный бред по циферкам.

    Reply
  33. Ольга_tmp

    так понимаю,что у кого смешанная система (общая + ЕНВД), тот заполняет ручками отчет? Потому как суммы по ЕНВД в отчет не попадают

    Reply
  34. kittwell

    (33) Верно понимаете. Сейчас непонятно нуж но ли этот момент дорабатывать для комплексной. Вдруг 1С разродиться исправленным отчетом.

    Reply
  35. Ольга_tmp

    спасибо за ответ!мне этот вопрос был задан бухгалтерией, почему в 1-2 раздел не попадают люди с ЕНВД, но обнаружила в данной ведомости раздел 3, который как раз и должен заполняться данными по инвалидам и ЕНВД,значит получается что все ок, и в 1-2 раздел ЕНВД и не должен попадать

    Reply
  36. alsoftik

    Спасибо, а то бухи после обновления чуть не сьели )

    Reply
  37. Kurt

    А где собственно ESN_GET.ERT???

    У меня вместо него предлагает скачать RSV1_1203.ERT…. который я уже как бы скачал.

    Reply
  38. kittwell

    (37) Kurt, Спасибо за замечание, конечно повтор файла удалил, esn_get добавил.

    Reply

Leave a Comment

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