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




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

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 не будет опубликован. Обязательные поля помечены *