Корректировка остатков ЕГАИС




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

62 Comments

  1. rusmil

    Интересно, а почему подобную обработку убрали из в 1С Розница 2.2.8 ?

    Reply
  2. vostdnn

    потому что она не актуальна (всвязи с ведением 3 регистра с июля 2017г). в 2.2.9 вроде как добавили документы для выравнивания остатков. (так написано в описании)

    Reply
  3. Sherdrada

    Акты списания и постановки на баланс формировать вручную или обработка предусматривает их автоматическое заполнение?

    Reply
  4. Sherdrada

    (2) в смысле не актуальна? третий регистр хранит акцизные марки, а пиво сверять как?

    тем более что Корректировка автоматически сверяла остатки ЕГАИС с остатками в базе и формировала акты списания и постановки на баланс

    Reply
  5. empafe

    (3) пока было сделано в ручном режиме. Создать, заполнить шапку, записать, выбрать. Как будет время, сделаю в автоматическом

    Reply
  6. empafe

    (3)а табличная часть заполняется из обработки

    Reply
  7. protsenkodv

    Заполняется наоборот. То что надо списать попадает в оприходование, а излишки в списание.

    Reply
  8. empafe

    (7) странно, у меня вроде все правильно

    Reply
  9. empafe

    (7) понял, поспешил, не ту версию прикрепил. напишите почту, отправлю вам исправленную

    Reply
  10. byte11

    А не подскажите с помощью вашей обработки возможно сделать реальную ревизию на складе Розница 2.2.9.18???

    Reply
  11. user593840_metall_14

    Будет работать на Платформе 8.3.11.3034, конфигурация Розница 2.2.8.27 и в дальнейшем будет обработка обновляться под следующие версии ?

    Reply
  12. empafe

    (11) конкретно на вашей версии конфигурации не тестировал, но думаю от 2.2.8.29 ничем не отличается. Если будут какие-то проблемы, отпишитесь, поправлю. Обновляться будет по мере наличия свободного времени

    Reply
  13. user593840_metall_14

    (12) понял спасибо.

    Reply
  14. krasbox

    Добрый день, а как переместить с регистра 1 на регистр 2? Так то логично сначала все что есть со склада в ТЗ, а уже потом списывать.

    Reply
  15. CrimeanWind

    (14)можно списать и со склада.

    А так — запросили остатки со склада, посмотрели что там.

    Затем Склад-передачи в регистр№2

    Reply
  16. mafey

    Спасибо большое, как всегда 1С-ники убирают все нужное, а такие хорошие люди, как Артем нам помогают! Спасибо за труд!

    Reply
  17. plutonii

    В акте списания не маркируемого алкоголя (пива, например) требуется указывать справку Б (2), в вашей обработке не вижу запрос остатков в разрезе справок Б.

    Столкнулся сейчас с этой проблемой в УТ 10.3 последнего релиза. Там списание в разрезе этих справок вообще не реализовано, а акт списания на основании отчета о розничных надо в разрезе справок Б.

    Даже остатки по второму регистру приходят без этой аналитики в свернутом виде в разрезе справок.

    Reply
  18. firml

    Здравствуйте! Можно ли из Вашей формы открыть Номенклатуру, чтобы посмотреть ее код, штрихкод и т.п. ?

    А также увидеть алкокод.

    Reply
  19. empafe

    (18) да, колонки номенклатура и алкогольная продукция доступны для открытия

    Reply
  20. firml

    Спасибо.

    Reply
  21. Strannik-s-Gor

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

    Reply
  22. proa@1eska.ru

    Есть ли похожая обработка для УТ 11.3-11.4?

    Reply
  23. empafe

    (22) к сожалению нет

    Reply
  24. Stason13

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

    Reply
  25. Stason13

    Переоткрыл обработку, все работает.

    Reply
  26. coolseo

    Здравствуйте, при выборе текущие остатки пишет требует документ пересчета. Если законметировать эту проверку, то колонка количество факт не заполняется.

    Reply
  27. firml

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

    Reply
  28. Strannik-s-Gor

    (2) Незнаю. Я его там не нашел.))

    Reply
  29. aakholmogorov

    Добрый день!

    подскажите пожалуйста есть ли возможность корректировки остатков на регистре 1,3?

    И можно ли будет корректировать поштучный учет АП на регистре 1 так же?

    Есть ли какие то инструменты работы со справками Б?!

    Reply
  30. CrimeanWind

    (29)нет таких инструментов. И корректировать численно так же не получится, т.к. на 3м регистре хранится не количество, а марки.

    И нужно запрашивать остаток по каждой справке2 на 3м регистре, сравнивать с пришедшими и проданными марками.

    Хотя при желании… Регистры накоплений по справкам же тоже есть. Но ЕГАИС через раз не срабатывает по1+3му регистру то по продажам, то по возвратам.

    Reply
  31. reddstone

    (9) Не могли бы вы мне выслать на почту вашу свежую обработку askar.bosum@gmail.com без корректировок работа встала

    Reply
  32. alexandr.samoylenko.ru

    Подскажите, на Рознице 2.2 (2.2.9.20) будет работать?

    Reply
  33. user589818_goldysv

    (32) Здравствуйте! Работает в 2.2.9.20

    Reply
  34. user589818_goldysv

    Здравствуйте! Обработка работает, но не понятно зачем нужно сначала обязательно выбрать какой-нибудь (любой причем) пересчет и только тогда обработка будет работать «по текущим остаткам»? Великая просьба! А можно сделать не «по текущим остаткам» а по остаткам на … с выбором даты? Очень нужно! Сегодня пыталась сделать корректировку и никак не могла понять почему разные остатки по складу в корректировке и на складе. 1С встроенная корректировка брала остатки на конец дня предыдущего дню запроса остатков ЕГАИС, а в Вашей обработке получилось, что остатки ЕГАИС (запрашивала утром) на конец вчерашнего дня, а остатки по складу берет именно текущие, а уже были продажи пива, а спишутся продажи пива только в конце рабочего дня.

    Reply
  35. user672591_pavelv

    Добрый день! А ваша обработка позволить передать все остатки с регистра 1 ЕГАИС на регистр 2?

    Reply
  36. empafe

    (37) Добавил возможность

    Reply
  37. empafe

    (34) Добавил возможность выбирать дату запроса остатков на складах

    Reply
  38. user589818_goldysv

    (39) Здравствуйте. Спасибо за добавление! А как обнову скачать?

    Reply
  39. user1061417

    Добрый день! А можно скачать Вашу доработку не за стартмани?

    Reply
  40. derxander

    День добрый.. Подскажите: будет ли дорабатываться данная обработка в связи с выходом новых релизов конфигураций?

    Reply
  41. empafe

    (42) Добрый. Доработка планируется ближе к концу месяца

    Reply
  42. empafe

    (41) напишите в лс

    Reply
  43. user765384

    Здравствуйте. Розница 2.2.10.19 будет работать? Можно использовать только на одном компьютере или таких ограничений нет?

    Reply
  44. Romleks

    (44) тоже интересен этот вопрос, а связаться в личке не могу с вами, напишите, пожалуйста

    Reply
  45. user1061417

    (44)Не могу связаться с вами моя почта goldtrud@mail.ru

    Reply
  46. Pavel5003

    Добрый день. Как получить обновленную версию?

    Reply
  47. empafe

    (48) скачать за стартмани

    Reply
  48. empafe

    (45) ограничений нет. На данный момент нет возможности протестировать на этой версии, к сожалению только после праздников

    Reply
  49. user1014133

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

    Reply
  50. Pavel5003

    Да

    Reply
  51. Zebra0974

    Скачала обработку, она классная , спасибо)) Но у меня нормально работала только когда сделала документ : Пересчет товаров.Без документа, со способом заполнения «по остаткам», показал количество факт= 13 бут, когда остатков в егаис 1 256. Не понимаю почему только 13, откуда он берет при данном способе заполнения факт, из какого регистра ?

    Reply
  52. mafey

    Подскажите работает ли нормально на версии розницы 2.2.11?

    Reply
  53. c_one_

    Добрый день. Будьте добры, отправьте обработку на email: babaylov@gmail.com

    Буду очень признателен!

    Reply
  54. programteh

    Добрый день, подскажите пожалуйста как реализован у вас механизм для корректировки алкоголя с помарочным учетом?

    Reply
  55. SimonAVZ

    Добрый день. Могли бы вы предоставить возможность получить сею обработку другим способом, используя иной метод расчетов. Моя электронная почта a.borodach78@mail.ru.

    Буду очень признателен!

    Reply
  56. Prizrak8000

    Присоединяюсь к предыдущему комментарию. xxxceregaxxx@inbox.ru

    Reply
  57. andreykuptsovk

    Здравствуйте.

    Пришлите, пожалуйста, исправленную.

    Буду признателен.

    grandsageandrew@gmail.com

    Reply
  58. firml

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

    Здравствуйте, присоединяюсь к вопросу.

    Reply
  59. Valek-guards

    Добрый день. Можно получить обработку другим расчетом. Моя почта valek-guards@mail.ru

    Буду признателен.

    Reply
  60. tross

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

    tross@mail.ru

    Reply
  61. AlexKKT

    Здравствуйте, можно получить разработку альтернативным расчетом? alexkkt@mail.ru

    Reply
  62. AlexKKT

    Здравствуйте, можно получить разработку альтернативным расчетом? alexkkt@mail.ru

    Reply

Leave a Comment

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