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




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

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