ЗиК 2009




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *