Реестр закупок для ББУ и БГУ 8




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

50 Comments

  1. 272727

    Спасибо! Тоже бухи спрашивали. Только в 7 версии ограничение на максимум, чтобы госконтракты не попадали. А у Вас на минимум, не понятно зачем.

    Reply
  2. flamik

    Спасибо !!!! очень актуально !!!

    В реестр должно включаться все что менее 100 тысяч, точнее все что закуплено без муниципальных или государственных контрактов, а у вас почему то более стоит 🙂

    Reply
  3. flamik

    Ошибка при формировании отчета вылетает «деление на 0»

    Reply
  4. flamik

    ОбластьСтрока.Параметры.Цена = Формат(Окр(ВыборкаЗакупка.СуммаСтроки/ВыборкаЗакупка.Количество,2), «ЧЦ=15; ЧДЦ=2; ЧРД=,; ЧРГ=.; ЧО=1»);

    Ошибка вылетает на этом месте. Это мои бухи касячат 🙁

    Reply
  5. flamik

    Сделал так

    ОбластьСтрока.Параметры.Цена = Формат(Окр(?(ВыборкаЗакупка.Количество>0,ВыборкаЗакупка.СуммаСтроки/ВыборкаЗакупка.Количество,0),2), «ЧЦ=15; ЧДЦ=2; ЧРД=,; ЧРГ=.; ЧО=1»);

    Пусть свои 0 сами ищут 😀

    Еще раз спасибо,adeich !!!

    Reply
  6. Abadonna

    За

    ОбластьСтрока.Параметры.Цена = Формат(Окр(ВыборкаЗакупка.СуммаСтроки/ВыборкаЗакупка.Количество,2)

    без проверки на ноль программиста надо сразу лишать всех регалий и увольнять с волчьим билетом 😉

    Reply
  7. adeich

    Отвечаю сразу всем: 😉

    Писалось на «месте» и по просьбе клиента, поэтому и стоит более 100 тыс

    Проверку на 0 не делал, каюсь :cry:, мой косяк . Обработка открыта, так что думаю те, кто будеи ей пользоваться, исправят

    В этом варианте вроде все косяки исправил.

    Сумма закупки теперь <= сумме строки документа

    Reply
  8. flamik

    2adeich, Не ошибается тот кто нечего не делает 😉

    Reply
  9. adeich

    Внес небольшие изменения.

    У кого вылетает с ошибкой на «Вид контрагента» (замечено мной), проверяйте свои справочники, не заполнен реквизит. Такое бывает при выгрузке из 7-ки 🙂

    Reply
  10. adeich

    ))

    Reply
  11. asya-gorec

    почему обработка не работает с прочими поступлениями МЗ с операциями касающиеся 401 счета,реестр не формируется

    Reply
  12. DSH949

    Если покупка осуществлялась через подотчетное лицо, то в отчете показывается поставщиком подотчтник, а надо бы показывать из поля «Грузоотправитель»

    Reply
  13. asya-gorec

    что же тогда делать? как выйти из данной ситуации 🙁

    Reply
  14. DSH949

    Ну вроде бы Автор хотел изменить, писал ему в личку. Ждем.

    Reply
  15. sdv_78

    как убрать подотчетников из реестра

    Reply
  16. adeich

    Посмотри обновленный файл. Если убрать подотчетников полностью, то нужно редактировать модуль

    Reply
  17. Djus

    Спасибо автору 😀

    Reply
  18. russ1971

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

    Reply
  19. Svetla

    У меня ББУ 8.2

    Очень хочу использовать этот отчет, но при открытии файла выдается ошибка —

    «Ошибка при выполнении файловой операции ‘N:VO!ReestrZakupok77_!!.erf’

    по причине:

    Неверный формат хранилища данных ‘file://N:/VO/!ReestrZakupok77_!!.erf'»

    ЧТО ДЕЛАТЬ??? С 8-кой только начинаю работать, может что-то делаю не так.

    Буду благодарна, если ответите.

    Reply
  20. adeich
    Svetla пишет:

    У меня ББУ 8.2

    Очень хочу использовать этот отчет, но при открытии файла выдается ошибка —

    «Ошибка при выполнении файловой операции ‘N:VO!ReestrZakupok77_!!.erf’

    по причине:

    Неверный формат хранилища данных ‘file://N:/VO/!ReestrZakupok77_!!.erf'»

    ЧТО ДЕЛАТЬ??? С 8-кой только начинаю работать, может что-то делаю не так.

    Буду благодарна, если ответите.

    Показать

    Вы точно скачали обработку для платформы 8.2? Она во втором прикрепленном файле, а вы, по-моему, запускаете обработку для 8.1

    Reply
  21. adeich
    russ1971 пишет:

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

    ответил в личку

    Reply
  22. evgenjola

    Скачал пока только 2-й файл. В тексте запроса надо везде перед словом «ИСТИНА» убрать знак «&», иначе выдает ошибку.

    А так выглядит очень даже приятно)

    Reply
  23. Sergleom

    Спасибо большое!

    Reply
  24. Slavez

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

    Reply
  25. Glebas

    Спасибо! Отлично!

    Reply
  26. kala

    Спасибо! Очень пригодился

    Reply
  27. Zuzya_2

    Да, тоже пригодился, особенно сейчас спрашивают!!!

    Reply
  28. Slavez

    Спасибо! Очень пригодился. Зачем нужен стандартный механизм в БГУ 8.2 не понимаю.

    Reply
  29. AnotherSide

    Спасибо. Обработка помогла, именно как «такая как в ББУ 7.7») В БГУ 8 вообще много чего хотят видеть «как в ББу 7.7»;-)

    Reply
  30. vilka2

    Большое человеческое СПАСИБО!

    Reply
  31. utia38

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

    2. Реестры закупок, осуществляемые без заключения муниципальных контрактов, должны содержать следующие сведения:

    — краткое наименование закупаемых товаров, работ и услуг;

    — наименование и местонахождение поставщиков, подрядчиков и исполнителей услуг;

    — цену и дату закупки.

    3. Закупка считается включенной в реестр закупок после присвоения ей регистрационного номера в соответствии с порядком нумерации.

    4. Сведения о закупке вносятся в реестры закупок не позднее трех дней с момента осуществления закупки.

    5. Реестры закупок ведутся в письменном виде (в форме журнала) или в электронном виде.

    Reply
  32. fin7

    Спасибо, ставлю плюсик! Совсем недавно бухгалтер спрашивала такой реестр как в ББУ 7.7 🙂

    Reply
  33. amatisol

    Наверно хорошая обработка, жаль что пока скачать не получается, а бухи то уже насели по этому поводу

    Reply
  34. tanya_charm

    Спасибо! мой плюсик ваш!

    Reply
  35. repz

    Спасибо! Очень пригодился!

    Reply
  36. AndreyMurom

    Спасибо большое, а то меня уже замучили с этим реестром, говорят хотим как в 7.7.

    Reply
  37. AndreyMurom

    Подскажите, а можно как-нибудь сделать, чтобы отчет формировался в разрезе «Вид обязательства» из справочника договоров, а то в реестр попадает всё, и договора и муниципальные контракты.

    Reply
  38. repz

    В реестре закупок в колонке «Дата закупки» должна стоять дата из договора, а не дата документа (проверяла контрольно-счетная палата сделала замечание). В типовом реестре закупок дата закупки подбирается правильно — из договора

    Reply
  39. NVKom

    не попадают из АвансовыхОтчетов Операции (бухгалтерские). Возможно доделать? спасибо

    Reply
  40. irina_ph

    СКАЖИТЕ ЕСЛИ ВЫСТАВИТЬ КОНКРЕТНЫЙ МЕСЯЦ ЗА КОТОРЫЙ ХОЧУ ПОГЛЯДЕТЬ ОТЧЕТ — ВЫДАЕТСЯ ОШИБКА {(21,28)}: Не задано значение параметра «Истина» И МЗ_Покупка.Проведен = <<?>>&Истина и МЗ_Покупка.Учреждение В(&Учреждение)

    Reply
  41. Agema

    (42) irina_ph, у меня нормально все формируется., и при выборе за конкретный месяц.

    Проверьте платформу, должна быть — 8.2.15

    Пробовал на 1С:Предприятие 8.2 (8.2.15.310), Бухгалтерия государственного учреждения, редакция 1.0 (1.0.11.4)

    Reply
  42. adeich

    Всем спасибо за комментарии! :)). Найденные косяки стараюсь исправлять, но… бывает не успеваю, не хватает времени, работа :))

    (40) repz, А вот у нас прокурорская проверка сказала — «Дата закупки», поэтому и писался отчет так. Хотя в некоторых версиях я вообще убирал и договор, и дату. Видимо тут все на усмотрение проверяющего.

    Насчет типового реестра — он строится на планах-графиках финансирования по договорам, поэтому и берется дата договора, а не дата закупки

    (41) NVKom — Нет. Реестр строится по документам, если ваши бухгалтера все заносят операциейбух, то… сорри

    (42) irina_ph, должно работать на любой платформе и любом релизе БГУ. Попробуйте перекачать отчет, такая ошибка была если качали версию под ББУ прошлый год

    Reply
  43. mnikol

    Да, мои бухгалтера такой реестр просят, привыкли в 7.7

    Reply
  44. more360

    добрый день! Как бухгалтер тоже нуждаюсь в таком отчета. Спасибо.

    Reply
  45. Loader_1C

    (44) спасибо! полезный и нужный отчет!

    Reply
  46. Marka_

    Спасибо.

    Reply
  47. lordguard

    Спасибо очень помогло, только попадают помеченные на удаление и не проведенные.

    Reply
  48. lordguard

    Лекарство против не проведенных и удаленных документов

    //проверка на пометку удаления и проведения Вет

    Попытка

    Если ((Докум.Документ.ПометкаУдаления=истина) или (Докум.Документ.Проведен=ложь)) тогда

    продолжить

    КонецЕсли;

    Исключение

    КонецПопытки;

    //конец попытки

    в процедуру сформироватьОтчет после строк

    ИтогоСумма = 0;

    Пока Докум.Следующий()Цикл

    после сохранения не будут браться удаленные и не проведенные

    Reply
  49. tazmag

    Хорошая обработка, очень необходимая, но какую из 3 скачивать? Помимо этой есть еще одна обработка на инфостарте http://infostart.ru/public/178635/index.php, но там тоже есть недоработки…

    Reply
  50. adeich

    (51) tazmag, Для БГУ ред. 1.0 актуальна 3-я

    Reply

Leave a Comment

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