ЗиК 2009




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

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

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

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

68 Comments

  1. MishaD

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

    Reply
  2. Shagan

    >Уже 286 релиз вышел оказывается

    а можно уточнить когда, дату?

    на сайте 1С пока токой инфы нет.

    Reply
  3. magus

    286 релиз пока не вышел и в ближайшее время не планируется.

    Reply
  4. Оболтус

    А для Комплексной конфигурации обработка не сработает?

    Reply
  5. NoMax

    (4) А руками проставить лень? Все очень подробно расписано, где чего и как изменить.

    Reply
  6. gucci76

    Плюс анансом (еще не проверил, но надеюсь работает)! Спасибо!

    Reply
  7. Оболтус

    (5)А считаться правильно будет?

    Reply
  8. NoMax

    (7) А в чем принципиальная разница изменения значения ставок, руками или программно? Находишь значение, изменяешь , указываешь дату с которой изменения действуют и все.

    (0) Автору отдельный респект.

    Reply
  9. Antia

    Имеется еще одно изменение законодательства, которое в обработке не учтено — надо исправлять в конфигурации.

    Уменьшен размер материальной выгоды по заемным (кредитным) средствам

    (Федеральный закон от 22 июля 2008 г. № 158-ФЗ «О внесении изменений в главы 21, 23, 24, 25 и 26 части второй Налогового кодекса Российской Федерации и некоторые другие акты законодательства Российской Федерации о налогах и сборах»)

    — Расчет будет производиться исходя из двух третьих действующей ставки рефинансирования, установленной ЦБ РФ (сейчас – трех четвертых)

    Reply
  10. seermak

    Спасибо за инфомацию.Вот бы такие изменения законодательства узнавать своевременно и в одном месте:) А поправить все можно и ручками.

    Reply
  11. victuan

    Спасибо! У меня куча организаций на ЗИКе (около 10), руками все исправлять замучаешься, а самому обработку написать — так это тоже время надо.

    Reply
  12. rimma_n

    Спасибо! для моих 40 баз руками мучиться долго

    Reply
  13. IsiKosta

    А для 1С:Бухгалтерии можете сделать?

    Reply
  14. IsiKosta

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

    Reply
  15. Antia

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

    Reply
  16. StadoAdama

    а под ЗУП 8.1 нет такого?

    Reply
  17. chikotilka@mail.ru

    А в каких процедурах/функциях нужно изменить, чтоб считалось по 2/3?

    Reply
  18. NoMax

    (16) а у вас под ЗУП 8.1 что отдельно 40 баз?

    Reply
  19. StadoAdama

    (18) не 40 конечно, но хватает…

    Reply
  20. Antia

    (17) Модуль формы документа НачислениеМатериальнойВыгодыПоВкладам. В релизе 285 — строки 84 и 218.

    Reply
  21. Fine22

    — максимум пособия по уходу за ребенком до полутора лет — 7194.03

    должно быть — 7194.02

    Reply
  22. chikotilka@mail.ru

    сПАСИБО!

    Reply
  23. Sol

    (16) вот для ЗУП написал http://infostart.ru/projects/3235/

    Учтены данные из (21)

    Reply
  24. Antia

    (21) Нет. 6630.44 * 1,085 = 7 194.03

    http://fss.ru/ru/news/22651.shtml

    Reply
  25. Fine22

    Не пойму логики фсс, если индексировать последовательно:

    6000*1,085*1,0185*1,085 = 7 194,021975

    Reply
  26. Antia

    (25) Надо округлять до копеек после каждого умножения.

    Reply
  27. Sol

    Вроде разобрался немного с движком инфостарта 😉

    (24) Вернул в обработку сумму 7 194.03, в справке дал ссылку на сайт ФСС.

    Reply
  28. oops!

    (20) Anita, а что ты на счет этого скажешь (ЗиК 285)?

    ВидРасчета.МатВыгодаПоСсудам.Модуль Расчета(30):

    Если ДатаНачала >= ‘01.01.2008’ Тогда

    СтавкаЦБ=Константа.СтавкаРефинансирования.Получить(КонМесяца(ДатаОкончания))*3/400;

    Иначе

    СтавкаЦБ=Константа.СтавкаРефинансирования.Получить(Макс(Документ.ДатаДок,’01.01.2001′))*3/400;

    КонецЕсли;

    Имхо, я бы здесь тоже исправил на:

    Если ДатаНачала >= ‘01.01.2009’ Тогда

    СтавкаЦБ=Константа.СтавкаРефинансирования.Получить(КонМесяца(ДатаОкончания))*2/300;

    ИначеЕсли ДатаНачала >= ‘01.01.2008’ Тогда

    СтавкаЦБ=Константа.СтавкаРефинансирования.Получить(КонМесяца(ДатаОкончания))*3/400;

    Иначе

    СтавкаЦБ=Константа.СтавкаРефинансирования.Получить(Макс(Документ.ДатаДок,’01.01.2001′))*3/400;

    КонецЕсли;

    Reply
  29. Antia

    (28) Конечно, надо исправлять. Пропустил. У меня ни у кого матвыгоды нет, поэтому я особо не заморачивался.

    Reply
  30. Boroda

    Молодец! Очень пригодилась, т.к. организаций много. Очень актуально!

    Reply
  31. alexzh

    Спасибо. Нужная вещь. Я еще после каждого действия добавил Сообщить(

    Теперь можно дать ее бухгалтеру и у него не возникнет вопросов, «а что она установила»

    Reply
  32. Fish

    Молодца 🙂

    Reply
  33. Alico

    Спасибо большое!

    Reply
  34. Garstag

    Простенько и со вкусом… Жирный ПЛЮС…

    🙂

    Reply
  35. Antia

    Добавил в обработку заполнение праздников на 2009 год.

    Reply
  36. Nata

    Спасибо огромное!!! Очень пригодилась. Организаций около 50 с ЗиК-ом и руками уже нет сил вбивать.

    Reply
  37. Erne100

    спс,пригадилася

    Reply
  38. account@segment.ru

    А изменения кодов вычетов учтены? Приказ ФНС от 30.12.2008 ММ-3-3/694@ 1000руб.-код 108, 2000руб.-код 110 и т.д.

    Reply
  39. myakinina

    Большое спасибо за файл!

    Надежда только на него, срочно нужно рассчитывать зарплату, а в 1с обновления нет.

    Я его скачала, но никак не получается произвести с него установку!

    Подскажите пожалуйста что мне делать после его разархивации!!

    Большое спасибо заранее!!!

    Reply
  40. Antia

    (38) Нет. На момент написания обработки информации об этом приказе не было. Благодарю за ссылку, буду думать о второй версии обработки.

    Reply
  41. Antia

    (39) Войти в зарплату, в меню выбрать файл-открыть, выбрать файл ZiK2009.ert .

    Reply
  42. Antia

    (38) Этот приказ пока не зарегистрирован Минюстом.

    Reply
  43. Andy525

    Прикольная штучка работает как часы

    Reply
  44. Gorr

    если кому надо, доработал в соотв с Приказом ФНС от 30.12.2008 ММ-3-3/694. вот только куда скинуть…

    Reply
  45. Solo1

    А объясните поподробнее как работать с обработкой? Открыла ее в ЗиК и ….?

    Reply
  46. Ёпрст

    (46) Нажала одну кнопку сформировать и привет.

    Наслаждаешься положительными эмоциями.

    Reply
  47. Solo1

    Работает!! Огромное человеческое Спасибо!

    Reply
  48. mnepox

    А что делать когда 286 выйдет, поверх натягивать просто или как?

    Reply
  49. Gorr

    именно так.

    Reply
  50. Gorr

    (50) действительно. там лимит скачиваний 10 раз…

    Reply
  51. Gorr
  52. gif

    Спасибо!

    Reply
  53. Antia

    Обновлять обработку пока не планирую. Свою задачу — начать расчеты за 2009 год и дождаться релиза 286 — она выполнила. Реализовать приказ ММ-3-3/694 только настройками в справочниках нельзя, потребуется изменение конфигурации. Каким образом изменения будут сделаны в 286 — неизвестно.

    Надеюсь, что и имеющиеся вычеты на детей будут обработаны, как это сделано в Бух504.

    Reply
  54. Antia

    Замечание по обновлению на релиз 286 после применения обработки.

    Если обработка запускалась на релизах 284 или 285, то никаких проблем не будет.

    Если релиз был меньше 284, то возможна такая проблема.

    В обработке ОбновлениеИБ для релиза 284 10 раз встречается строка вида

    Если Периодический.НайтиЗначение(‘01.01.2009’)=1 Тогда

    которая удаляет значения «детских» пособий на 2009 и 2010 годы.

    Эти строки нужно заменить на

    Если Периодический.НайтиЗначение(‘01.01.2009’,0)=1 Тогда

    Если этого не сделать, то обновление тупо грохнет 2 последних значения периодических констант.

    Если ошибку исправят, то вносить изменение не потребуется.

    Reply
  55. марокко

    Спасибо огромное))))))))))))))) А то клиенты по зарплате готовы скушать уже за отсутствие обновления)))))

    Reply
  56. elektr

    Оригинально!

    Reply
  57. Аверков

    По-моему, никто об этом здесь не писал — обработка устанавливает значения и пределы вычетов в справочниках, но не меняет значение константы «Предел вычета» (точное название см. в конфигураторе) с 20 000 на 40 000. А эта константа используется при расчётах.

    Reply
  58. pvv13

    Спасибо! (+)

    Reply
  59. Antia

    (61) Константа не используется. А почему 40000, а не 280000? 🙂

    Reply
  60. остров

    спасибки, я новичок:) и мне оч помогают ваши труды — «ПЛЮСИК»от души!!!!

    Reply
  61. Аверков

    (63) Ну, как не используется? Глобальный поиск сделай по конфигурации, очень даже используется. 40 000 потому, что предел предоставления стандартного налогового вычета с 01.01.2009 изменился с 20 000 на 40 000.

    Reply
  62. Antia

    (65) А вычет по детям ты стандартным не считаешь? 🙂

    А глобальный поиск нам показывает, что константа в конфигурации встречается, но в модулях с 2005 года не используется.

    Reply
  63. Uragan

    Как и куда установить этот файл?

    Заранее спасибо!

    Reply
  64. Kapitan911

    Вышел 286 релиз

    Reply
  65. Баклага

    лучше поздно, чем никогда, спасибо

    Reply
  66. Pit

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

    Reply
  67. Antia

    (70) Все остальные знают, как ЗиК работает, и поэтому не спрашивают.

    Размеры всех социальных пособий в ЗиК задаются без рк. Умная ЗиКа при расчете сама умножает его на «РК утв. Правительством РФ», заданный в настройках организации или в обособленном подразделении.

    Я не москаль.

    Reply
  68. Partner.lipetsk

    Здравствуйте! А можно сделать подобную обработку для изменений 2010 года? Пожалуйста.

    Reply

Leave a Comment

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