Документы "Табель", "Начисление больничного", "Начисление отпуска" для конфигурации Бухгалтерский учет 7.7




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

60 Comments

  1. Свой

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

    Позволю некоторую обратную связь.

    Интересно было, как у вас сделано, что в базу расчета отпуска входит зарплата, а в базу расчета больничного зарплата и отпуск, поэтому бегло просмотрел код.

    В базу для Отпуска у вас входят все начисления с кодом НДФЛ 2000, для больничного аналогично.

    1. некоторые бухгалтеры отпуск указывают с кодом НДФЛ 2000 (правильность этого — спорный вопрос, но если не ошибаюсь такой вариант допустим). Из за этого возможно ошибочное попадание сумм отпуск в базу отпуска.

    2. В базу Больничного не будет попадать Отпуск, если он будет не с кодом 2000.

    Reply ↓
  2. kompas-dm

    (0) Табель ❓

    Каждую ячейку любого сотрудника можно отредактировать вручную

    . Графиков, календаря все-таки нет 😮

    Reply ↓
  3. dmitish

    Очень нужное дополнение к типовой задаче.

    Буду пробовать применять на практике ОБЯЗАТЕЛЬНО.

    Reply ↓
  4. artbear

    По начислению ЗП куча вопросов и различных исключений.

    Например, есть ли у вас дни без сохранения ЗП? если да, то выкидываются ли они при расчете средней для отпусков и больничных?

    есть ли расчет средней зп — типа донорских, командировки и т.д.?

    и т.д. и т.п.

    Reply ↓
  5. hasp_x

    (1) Бухгалтер говорит, что отпуска должны иметь код 2012 и в базу больничного должны попадать только рабочие начисления.

    (4) Можно сделать, чтоб выкидывались

    Reply ↓
  6. Хряк

    а нафига добавлены константы, если они не используются?

    Reply ↓
  7. victuan

    И что, для всех налоговых режимов и вариантов их совмещения работает?

    Reply ↓
  8. Арчибальд

    Зарплата — дело тонкое. Прикрутить ее к бухгалтерии — дело полезное. +

    Reply ↓
  9. hasp_x

    (7) пытался в свое время, и для общей, и упрощенки, и вмененки. Есть вариант даже для ред. УСН 1.3

    Reply ↓
  10. victuan

    Ну а этот вариант работает только для ОСН? И для режима совмещения ОСН+ЕНВД тоже работает?

    Reply ↓
  11. victuan

    А для просто ЕНВД работает?

    Reply ↓
  12. shape

    а для Бухгалтерии УСН подойдет?

    Reply ↓
  13. hasp_x

    (11) (12) не очень силен в различиях, но по-моему, расчет больничных и отпусков в ОСН, УСН и в ЕНВД одинаков, только налоги разные

    Reply ↓
  14. hasp_x

    (12) для редакции Бухгалтерия 1.3 (УСН) надо немного переделывать.

    Осталось сделать обработку для ввода стажа на основании табеля для формирования сведений в ПФР. Так что, если будет апгрейд, возможно, поставлю и для ред. 1.3

    Reply ↓
  15. luda_karas

    Подскажите пожалуйста как объединить конфигурации?

    Reply ↓
  16. hasp_x

    (15) конфигурация, объединение конфигураций, выбираем 1cv7.md, и галочки ставим по первому скриншоту, далее везде ОК или Принять. Перед объединением ОБЯЗАТЕЛЬНО сделать архивную копию!

    Reply ↓
  17. luda_karas

    а файл 1cv7.md чей брать? Из ЗиК? Я попробовала из ЗиК, она ругается.

    Reply ↓
  18. АБАШ

    Пожалуйста, сделай для редакции Бухгалтерия 1.3 (УСН)!!!!!!!! 😳 ОЧЕНЬ ПРОШУ!!!!!!!!!! : ❗ ❗ ❗

    Reply ↓
  19. hasp_x

    (17) файл 1cv7.md находится в архиве 1cv7.rar, это один из двух файлов, который надо скачать

    Reply ↓
  20. zebo06@rambler.ru

    Почему при заполнении табеля выдается такое сообщение-«ХарактерРаботы = Сотр.ХарактерРаботы.Получить(НачМесяца(ДатаЗнач));

    {Глобальный модуль(7384)}: Поле агрегатного объекта не обнаружено (ХарактерРаботы)»

    Reply ↓
  21. zebo06@rambler.ru

    Почему при заполнении табеля выдается сообщение: ХарактерРаботы = Сотр.ХарактерРаботы.Получить(НачМесяца(ДатаЗнач));

    {Глобальный модуль(7384)}: Поле агрегатного объекта не обнаружено (ХарактерРаботы)

    Reply ↓
  22. natali_sch

    Молодец!!!! Очень полезная штука. Большое спасибо))) +++++++++++

    Reply ↓
  23. byru

    Отлично!

    Reply ↓
  24. cafeco

    Очень хорошая вещь. Только у меня не работает автоматический расчет отпускных (больничных).

    При нажатии «расчет», выдает ошибку:

    «СреднийЗаработок = ВсегоРазмерЗаработка/ВсегоФактОтработано; : {Документ.НачислениеОтпуска.Форма.Модуль(250)}: Деление на 0».

    Не пойму, что я не так делаю. Помогите, плз!

    Reply ↓
  25. hasp_x

    (24) сложно сказать. Сделай тогда так:

    Если ВсегоФактОтработано <> 0 Тогда

    СреднийЗаработок = ВсегоРазмерЗаработка/ВсегоФактОтработано

    КонецЕсли

    Reply ↓
  26. Марийка

    Есть замечание которое успела заметить. В больничных есть ограничение среднедневного заработка 415000 руб./365 дней. А в общем хорошая вещь давно такую искала. Спасибо.

    Reply ↓
  27. Иволга

    И я прошу, пожалуйста, для УСН выложите. Для нас, «малышей» это ОЧЕНЬ нужная вещь!!!

    Reply ↓
  28. acpidaemon

    Добрый день! Выложите, пожалуйста, для УСН! Заранее огромное спасибо.

    Reply ↓
  29. fotinia59

    Присоединяюсь. Очень нужно для УСН. Пожалуйста.

    Reply ↓
  30. Buhgaltersha

    Действительно замечательная разработка для бух 7.7. Можно обойтись без громоздкой ЗиК. В табеле еще можно добавить буковку К — командировки.

    Reply ↓
  31. gutentag

    Полезная вещь + , вызывает настольгичию, после я перехода на «восьмерку бух и зп базовые версии»

    —

    Reply ↓
  32. v_id

    А это часом не Камин? Интерфейс-то уж точно от туда …

    Reply ↓
  33. hasp_x

    (32) интерфейс ЗиК 7.7

    Reply ↓
  34. кира 2011

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

    Reply ↓
  35. hasp_x

    (34) так коэффициент индексации используется, если не нажать флажок «Не использовать индекс повышения»

    Reply ↓
  36. chev
    hasp_x пишет:

    (1) Бухгалтер говорит, что отпуска должны иметь код 2012 и в базу больничного должны попадать только рабочие начисления.

    (4) Можно сделать, чтоб выкидывались

    Правильно говорит ваш бухгалтер. Заполните корректно справочник по видам начислений и соответственно пропишите везде, где встречаются ссылки при определении величины налоговой базы.

    Вообще-то идея хорошая. У меня она реализована с 2005 года. Правда, для подсчета дней используется компонента Расчет. С начала работы вносились изменения в соответствии с законодательством. Правда перечень документов у меня шире, к вашим прибавьте еще компенсацию за неиспользованный отпуск, уход за ребенком до 1.5 лет, выплаты в связи с ранними сроками беременности. Документ «Табель» формирую перед начислением зарплаты, а затем уж расчет самой зарплаты. Во всех доках, где это требуется, заполнение дней отработанных за месяц автоматическое.

    Reply ↓
  37. Екатерина2011

    ты смотри какая красота, но лично я ее не скоро смогу увидеть, нету репутации, или чего там еще надо теперь…

    Reply ↓
  38. antoninayuf80

    Очень полезная обработка в дополнение к типовой конфигурации. Особенно с нашими постоянными перемещениями работников в пространстве (в командировку и обратно). Спасибо автору!

    Reply ↓
  39. NPodolsk

    Для УСН есть такая? Уже завидую бухгалтерам кому она подошла… Подскажите пожалуйста что нужно подправить чтобы для УСН тоже использовать?

    Reply ↓
  40. lana_nco

    Жаль, нельзя поставить пять плюсов! Я бухгалтер (программиста 1с нет, все что могу, осиливаю сама). Очень давно мечтала о подобном дополнении! НО! У меня стоит отраслевая 1с (Подрядчик строительства). Можно ли использовать Вашу разработку? Подозреваю, что нет… Жаль.

    Reply ↓
  41. hasp_x

    (40) конечно можно. Обработка изначально и создавалась для клиента, у которого «Подрядчик строительства» 2.3 на 5 пользователей

    Reply ↓
  42. hasp_x

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

    Reply ↓
  43. lana_nco

    (41)

    Так не бывает! УРА! У меня Подрядчик строительства 2.3 на 5 пользователей! Теперь нужно зарабатывать StartMoney…

    Reply ↓
  44. Svetlana_67

    Прочитала коментарии очень захотелось попробовать. Надоело считать в Excel. Тем более обновляется 7.7 теперь очень редко и подправлять конфигурацию будет проще.

    Reply ↓
  45. hasp_x

    (44) тем более, что при типовом обновлении и подправлять-то ничего не придется

    Reply ↓
  46. opolyakova

    зачем она нужна?

    Reply ↓
  47. LEXX2012

    Вышлите пожалуйста данную программу на мыло vlad__2005@mail.ru Спасибо

    Reply ↓
  48. alexmbls

    Эхх… очень интересное и нужное дополнение к семерке, но где взять эти стартмани… 🙁

    Reply ↓
  49. zero00

    Интересно, жаль, что скачать не могу.

    Reply ↓
  50. nora
    Есть вариант даже для ред. УСН 1.3

    Если есть этот вариант, сбросьте пожалуйста на эл.почту: kleponosova@mail.ru . Спасибо заранее!

    Reply ↓
  51. ulas

    Ну очень интересно и нужно. Как скачать? crjkmrj ljk;yj ,snm yf cxtne

    Reply ↓
  52. ulas

    Да, хотелось бы скачать, но сколько баллов нужно набрать

    Reply ↓
  53. Доня

    Автору >>

    Обновлено 03.06.2014

    А что там новенького?

    Reply ↓
  54. hasp_x

    (54) со 2 апреля 2014 года среднемесячное число для расчета отпусков меняется на 29.3 (было 29.4)

    Reply ↓
  55. Доня

    ОК!

    Спасибо

    Reply ↓
  56. Доня

    (55)

    Начала пользоваться Табелем — как заполнить разобралась

    и появились вопросы:

    1) при нажатии кнопки «действие» выводит в документ «Начисление зарплаты» — Хорошо!

    2) Провожу документ «Начисление зарплаты» — а вот дальше не хорошо.

    т.е.

    при стандартном проведении «Начисление зарплаты» проводки формируются

    по счету 70 и счету 68.1 (ндфл), и далее «Закрытием месяца» формируются взносы на счет 69…

    а вот при выводе «Начисление зп» через Табель — формируются проводки на все счета 70, 68.1 счета 69… , т.е. взносы начисляются не правильно !!!!

    Как бы это поправить — чтобы при выходе через Табель в документ «Начисление ЗП» не формировались проводки по начислению взносов по счете 69 ……

    Подскажите.

    Reply ↓
  57. hasp_x

    (57) вы можете прислать mdшник, если не секрет конечно, пройдусь отладчиком. Честно говоря, не помню уже ни семерку, ни эту обработку

    Reply ↓
  58. Доня

    Нашла:

    В модуле документа НачислениеЗП:

    есть такое:

    Если документ создан в редакции 4.0, то начислим ЕСН.

    Если ВерсияОбъекта < «7.70.421» Тогда

    Сч00 = СчетПоКоду(«00»);

    Сч69_1 = СчетПоКоду(«69.1»);

    Сч69_2_1 = СчетПоКоду(«69.2.1»);

    Сч69_3_1 = СчетПоКоду(«69.3.1»);

    Сч69_3_2 = СчетПоКоду(«69.3.2»);

    Сч69_11 = СчетПоКоду(«69.11»);

    Сч70 = СчетПоКоду(«70»);

    Сч84 = СчетПоКоду(«84»);

    Сч91_2 = СчетПоКоду(«91.2»);

    Вот если в строке

    Если ВерсияОбъекта = «7.70.421» Тогда (поставить =)

    тогда все правильно выводится из Табеля в НачислениеЗП,

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

    придется при обновлении каждый раз заходить и править

    может в документе Табель что-то подобное отобразить

    Reply ↓
  59. hasp_x

    (59) поставьте номер конфигурации, который на данный момент, например 7.70.605

    Reply ↓
  60. hasp_x

    (59) номер конфигурации по-моему проставляется в константах

    Reply ↓

Leave a Comment

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