Ввод начальных остатков по взаиморасчетам для ЗУП, ЗБУ, КА, УПП




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

52 Comments

  1. Cyberboy

    А для 8.1?

    Reply
  2. tomvlad

    (1) Добавил вариант для 8.1.

    Reply
  3. gutentag

    Имхо полезная вещь, взял в копилочку

    Reply
  4. artbear

    (0) На УПП не тестировал?

    Reply
  5. tomvlad

    (4) Работает и на УПП и на КА

    Reply
  6. artbear

    (5) 1.Тогда, плиз, добавь в название обработку текст про УПП и КА — аудитория будет шире 🙂

    2. Нет ли какой-нибудь обработки по вводу начальных остатков по налогам для случая ввода ЗУП не с начала года?

    Reply
  7. tomvlad

    (6) 1. ОК

    2. Нет, а каких именно налогов нужно?

    Reply
  8. tango

    скачал, может, пригодится +

    Reply
  9. artbear

    (7) НДФЛ и Страховые взносы

    Reply
  10. AllexSoft

    неплохо было бы сразу ввод по ПФР, ФСС, НДФЛ исчисленных, для тех кто базу начинает в середине года, было бы хорошо единую форму занесения остатков на все

    Reply
  11. PrettyG

    Обработка ошибочно создает движение по регистру накоплния Зарплата за месяц в орг с видом расход, следствие чего при вылате зп сотруднику не учитывается сальдовка. а так обработка хорошая и нужная 😀

    Reply
  12. betxx

    Спасибо, работает и ЗУП бюджет по источникам

    Reply
  13. xpym-xpym

    Спасибо за обработку, хочу скрестить с загрузкой данных из бух 7.7

    у Вас нет случайно что-нибудь подобного?

    Reply
  14. adamlov

    Спасибо. Работает. беру в копилку

    Reply
  15. SergTH0000

    Спасибо, полезная вещь.

    Reply
  16. mg_ildar

    Очень полезная вещь! Спасибо!

    Reply
  17. Svetlana_K

    Отлично! Полезная вещь!

    Reply
  18. SergTH0000

    В копилку..

    Reply
  19. SergTH0000

    Гуд

    Reply
  20. didol3

    Класс! То, что нужно. Очень пригодилась при переходе на 8-ку.

    Reply
  21. LanaSN

    Огромное спасибо, очень удобный документ! Главное понятен пользователю и нет лишних ошибок, особенно если в организации работают до 50 человек, легче занести начальное сальдо документом сразу правильно, чем потом исправлять ошибки!

    Reply
  22. sdsmax

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

    Reply
  23. sdsmax

    Скачал проверил на ЗУП 8.2 — 2.5.44, все работает. Спасибо ещё раз, всех с наступившим новым годом, удачи и благополучия.

    Reply
  24. ninch

    А зачем движения по регистру «Зарплата за месяц организаций»? Где потом эти движения используются? Достаточно по «взиморасчетам с сотрудниками» движений

    Reply
  25. tomvlad

    (25) На основании остатков по регистру «Зарплата за месяц организаций» производится заполнение документа «Зарплата к выплате организаций»

    Reply
  26. ninch

    (26) Ок. Спасибо. Сегодня проверю в КА 1.1.

    Reply
  27. olegpochekutov

    А для расчета среднего заработка подойтет

    Reply
  28. tomvlad

    (29) Движения по регистру «Зарплата за месяц организаций» обязательно должны быть введены — на их основании производится заполнение документа «Зарплата к выплате организаций». При формировании документов ввода начальных остатков выполняется:

      Обнуление остатков по регистрам «Взаиморасчеты с депонентами организаций», «Взаиморасчеты с работниками организаций» и «Зарплата за месяц организаций» — формирование движения с видом «Расход». Соответственно, если нет остатков по этим регистрам — не будет и движений по обнулению остатков.

      Формировании движения с видом «Приход» — ввод записей по указанным регистрам на основании указанных пользователем данных.

    Пожалуйста, если обнаружена ошибка — сообщить о ней предметно, предложения типа

    Регистр «Взаиморасчеты» обнуляется (хотя и с лишними движениями), а вот в регистре «Зарплата за месяц…» все останется по-прежнему и выплачивать будет нечего.

    ясности не добавляют.

    Reply
  29. Ramir555

    (30) в посте 11 про одну проблему уже сообщалось, при вводе остатков в регистр «Взаиморасчеты…» вносятся суммы с видом «Приход», а в регистр «Зарплата…» с видом «Приход» и «Расход» на одну и ту же сумму.

    Reply
  30. gutentag

    Пожелание: сделать ввод данных в регистр «НДФЛ расчеты с Бюджетом» = очень актуально с 01-01-2011г

    В остальном, понравилось.

    Reply
  31. candy_sk

    «Движения по регистру «Зарплата за месяц организаций» где потом эти движения используются?»

    так и не понятно…

    Reply
  32. elena_77

    Спасибо, скачаю. Пригодится при переходе на новую программу.

    Reply
  33. ГердаКай

    Чем вам всем не нравятся типовые решения документы «Корректировка регистров накопления» и «Перенос данных»? При их заполнении на маленьких организациях ни один бухгалтер пока не жаловался на какую-то сложность. Все ясно и понятно. Но автору конечно плюс за работу.

    Reply
  34. makas

    (36) ГердаКай,


    Чем вам всем не нравятся типовые решения документы «Корректировка регистров накопления» и «Перенос данных»?

    Лично мне, нравится, тем что эта обработка эти документы открывает. Очень своевременная обработка была выложена.

    Автору — респект

    Reply
  35. temdj

    (36) ГердаКай, а в больших организациях бухов сложно заставить это делать. Поэтому автору +

    Reply
  36. search

    Удобная обработка))) Облегчает процесс на самом деле

    Reply
  37. Lisa1C

    Доброго времени суток, подскажите кто сможет — запускаю в небольшой организации ЗУП, конфигурация для меня абсолютно новая, потому взялась за неё с нуля, чтобы изучить. Хотелось бы корректно внести начальные остатки по взаиморасчетам по зарплате, отпускам и налогам работников (ранее учет велся на бумажных носителях). Есть в ЗУПе 2 документа, о которых говорилось в каментах выше, у меня численность работников составляет 30 человек, подскажите вот данная обработка заполняет только регистры накопления, посмотрев ещё на форумах, получила вот такой список регистров помимо регистров накопления, которые должны быть заполнены при старте программы:

    Регистры расчета

    1)Удержания с физических лиц организаций

    2)Отражение основных начислений в бухучете сотрудников организаций

    3)Дополнительные начисления сотрудников организаций

    4)Основные начисления сотрудников организаций

    5)Отражение дополнительных начислений в бухучете сотрудников организаций

    и Регистры сведений

    1)Состояние сотрудников организаций

    2)Учет основного заработка сотрудников организации в регламентированном учете

    3)Кадровая история сотрудников (по юрлицам)

    их вручную заполнять в документе «Перенос данных»? Просто мне нужно знать качать данную обработку или нет. Ато старт мани не так много )))

    Reply
  38. tanselja

    Ваша обработка мне очень помогла, спасибо большое.

    Reply
  39. mihalichman

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

    Reply
  40. tomvlad

    (42) mihalichman, к сожалению, Вы не указали ни версию платформы (и вариант использования), ни релиз конфигурации, ни описание ошибки. А проверять на всех версиях платформы, всех релизах конфигураций УПП, искать непонятно какую ошибку…

    Reply
  41. mihalichman

    (43) Извините, действительно не подумал. Платформа 8.2.17.153, конфигурация 1.3.41.1 для Украины.

    Текст ошибки:

    {Форма.Форма.Форма(20)}: Значение не является значением объектного типа (Отбор)

    ДокументСписок.Отбор.Организация.Установить(Организация);

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

    Reply
  42. tomvlad

    (44) mihalichman, к сожалению не имею доступа к УПП для Украины. Возможно, в ней нет документа «Перенос данных». В этом случае необходимо выполнить доработку самостоятельно.

    Reply
  43. mihalichman

    (45) К сожалению так и есть. Документа «перенос данных» не нахожу. Что можно сделать в данном случае и как доработать, если возможно опишите в общих чертах, будем разбираться.

    Reply
  44. tomvlad

    (46) mihalichman, если нет документа «Перенос данных», то скорее всего есть документ «Корректировка записей регистров». На форме обработки есть табличное поле «ДокументСписок» тип ДокументСписок.ПереносДанных. Необходимо изменить его тип на ДокументСписок.КорректировкаЗаписейРегистров и изменить в коде использование одного документа на другой.

    Reply
  45. mihalichman

    (47) Из связанных с ДокументСписок нашел только эти

    ДокументСписок.Отбор.Организация.Установить(Организация);

    ДокументСписок.Отбор.ПериодРегистрации.Установить(Период);

    А из найденных указаний на ПереносДанных

    ДокументСсылка = ПолучитьСоздатьСсылкуНаОбъект(«Документ», «ПереносДанных», ПоляПоиска, СтруктураРеквизитов, ТабличныеЧасти);

    Пробовал изменить в последнем и ошибка та же.

    Reply
  46. tomvlad

    (48) mihalichman, чтобы найти на форме табличное «ДокументСписок» можно воспользоваться командой «Форма — Список элементов управления формы…». А вообще, правильнее обратиться к специалисту.

    Reply
  47. mihalichman

    (49) с «ДокументСписок» разобрался. Со специалистами у нас проблема, те кто обслуживал пропали, новых найти в городе большая проблема, поэтому пока приходится самому выкручиваться.

    после решения вопроса с ДокументСписок выходит следующая ошибка

    {(8, 47)}: Поле не найдено «ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо»

    ВзаиморасчетыСРаботникамиОрганизацийОстатки.<<?>>Физлицо КАК Физлицо,

    на сколько я понимаю нужен документ «ВзаиморасчетыСРаботникамиОрганизацийОстатки» в котором поле Физлицо. И в целом я смотрю расхождения в конфигурациях значительные, и выискивать все ошибки и дорабатывать придётся долго, видимо нужно искать такую же обработку только для конфигурации Украины.

    UPD: Вместо Физлицо в указанном документе стоит Сотрудники, заменил все ссылки на документ с Физлицо на сотрудники и обработка запустилась

    Reply
  48. IrenLS

    Добрый день! Насколько правильно сработает Ваша обработка, если переносить остатки по зарплате из УПП для Крыма в российскую УПП? И подходит ли она в принципе для такого переноса зп?

    Reply
  49. tomvlad

    (51) IrenLS, к сожалению не знаком с УПП для Крыма.

    Reply
  50. IrenLS

    УПП для Крыма сделано на базе украинского УПП, но проблема в переносе зарплаты из украинского законодательного поля в российское. И еще — не подскажете, как в УПП разделяются документы ввода остатков по зарплате и текущие начисления зарплаты?

    Reply
  51. aanail

    При обновлении остатки вылетают.

    Reply
  52. tomvlad

    (54) Уточните пожалуйста — при обновлении чего? Какие остатки? Откуда именно вылетают?

    Reply

Leave a Comment

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