Отчеты в Декалитрах (ДАЛ) для 1С: Розница 2.2.4 — 2.2.11: Продажи, Поступления, Анализ движения номенклатуры. Движение по документам ЕГАИС




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

33 Comments

  1. gull22

    Я правильно понимаю. что Отчет Анализ движение номенклатуры объединяет в себе оба отчета: по продажам и поступлениям?

    Reply
  2. omenfarsh

    (1) gull22, правильно, только в нем нет суммы, т.е. показывает лишь количество.

    Reply
  3. xeephon

    Для 2.2+ подойдет?

    Reply
  4. omenfarsh

    (3) xeephon, да, подойдет. На днях пользовался этими отчетами на релизе 2.2.4.30

    Reply
  5. heruvim76

    какие файлы для Розницы 2.2.4

    Reply
  6. omenfarsh

    (5) Удалил отчеты для старого релиза, можете смело качать.

    Reply
  7. RocKeR_13

    Давно уже придумал и для Розницы, и для УТ) С расшифровками каждого показателя по документам http://infostart.ru/public/537534/

    Reply
  8. omenfarsh

    (7) Кому какой вид удобней… Здесь дело вкуса. Любой из этик отчетов через настройки также можно вывести с детализацией по документам. А для УТ 10.3 еще в начале года были придуманы отчеты также в привычной для многих форме http://infostart.ru/public/449220/

    Reply
  9. heruvim76

    Скачал Ваши отчеты. Но почему то они не добавляются в разделы. (Администрирование-ПечатныеФормыОтчетыИОбработки-ДополнительныеОтчеты ИОбработки-Создать)

    1с Розница 2.2.4.33

    Reply
  10. omenfarsh

    (9)Извините, что так долго. Предновогодний хаос))) Вчера проверил на релизе 2.2.5.21, все работает. Я пробовал на платформе 8.3.9.1850. Более новая как раз таки выделывается с добавлением внешних файлов.

    Reply
  11. user635667

    Получается можно скачать Анализ движения, сформировать его, распечатать и спокойно сидеть заполнять декларацию? круче только если уже готовая декларация будет выгружатья. А у вас такой обработки нету?

    Reply
  12. user635667

    Срочно нужна помощь — Можно-ли в названия производителей добавить их ИНН и КПП? Или как-то отдельной стройкой или столбиком? А то по названию не всегда можно определить Производителя.

    Reply
  13. omenfarsh

    (11) К сожаления, я пока не готов взять на себя ответственность за постоянную поддержку форматов выгрузки в деклорант, поэтому и остановился на данном варианте.

    1) «Анализ движений номенклатуры» — актуален для просмотра остатков на конец периода. В расходе и приходе по мимо продаж и поступлений присутствуют данны по оприходованию, списанию и т.д.

    2) «ВедомостьПоПоступлениямТоваров» — здесь участвуют только документы «Поступления товаров».

    3) «ВедомостьПоПродажамТоваров» — здесь участвуют только документы продаж.

    Reply
  14. omenfarsh

    (12) Заменены все три отчета. Теперь перед наименованием производителя прописывается ИНН и КПП. Так же в «Ведомости по поступлениям товаров» добавлен вариант отчета «Ведомость по поступлениям товаров по поставщикам». Для того, чтобы настроить прошлую версию отчета под выведение ИНН и КПП, в расширенных настройках отчета необходимо с структуре заменить «Номенклатура.Производитель (импортер) алкогольной продукции» на «Номенклатура.Производитель (импортер) алкогольной продукции.ИНН, Номенклатура.Производитель (импортер) алкогольной продукции.КПП, Номенклатура.Производитель (импортер) алкогольной продукции». Эта настройка также указана в скриншотах.

    Reply
  15. user635667

    Можете еще добавить отбор — Вид алкогольной продукции — Заполнено

    Reply
  16. omenfarsh

    (15), если вид алкогольной продукции не заполнен, оно идет всегда впереди списка у производителя. В основном бывает так, что не заполнены либо вид и производитель, либо только производитель, в этих случаях данная номенклатура идет в начале отчета. Если такой вариант не устраивает, на выходных могу добавить.

    Reply
  17. user635667

    да, но есть и другая продукция, например шоколадки. они тоже попадают в этот отчет)

    Reply
  18. omenfarsh

    (17), это можно сделать в отборе

    Reply
  19. omenfarsh

    (17)либо так

    Reply
  20. nikaleks

    Спасибо!, отчёты помогли и выручили.

    Хорошая работа!

    Reply
  21. omenfarsh

    (20)большое спасибо за отзыв!

    Reply
  22. Protman

    Данные берутся из ИБ или с ЕГАИС?

    Reply
  23. omenfarsh

    (22)Данные берутся из ИБ, по факту они должны совпадать с данными в ЕГАИС. Есть дополнение к текущему отчету, в котором реквизиты (Производитель, ИНН, КПП, объем) берутся из сопоставленной с номенклатурой Алкогольной продукции ЕГАИС. Это для того случая, если данные реквизиты в ИБ не везде заполнены корректно.

    Reply
  24. Protman

    (23) По факту должны, только есть момент пересорта. Чаще с пивом с разных заводов, EAN13 один, а алкокод разный 🙁

    Reply
  25. omenfarsh

    (24) В ЕГАИС обычно пиво никто не списывает, либо списывают на авось, поэтому и в ЕГАИС по пиву остатки редко бывают актуальны. Если вы не хотите маркировать пиво своими штрихкодами или отключать уникальность штрихкодов в ИБ, можете воспользоваться данной обработкой http://infostart.ru/public/599525/. Хорошая штука.

    Reply
  26. Protman

    (25) Такой вариант не подойдёт с 01.07.2017 г. ни ЕГАИСу ни нам 🙂 Буквально сегодня несколько заказчиков решило посмотреть свои остатки в ЕГАИС… 1,5к бутылок пива одной номенклатуры числится, хотя по факту у них в магазине даже если взять всё пиво столько нет 🙂

    То-же самое и с алкоголем, пришла водка с одним штрихкодом от того же поставщика и производителя и объём прежний, всё совпадает вроде, но алкокод разный и в ЕГАИС теперь «минус», соответственно нужно делать пересорт если получится… И такие «нюансы» работы с ЕГАИС постоянно ломают всю отчетность т.к. ЕГАИС фиксируются все поступления/продажи, постановки/снятия с баланса…

    Reply
  27. omenfarsh

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

    Reply
  28. omenfarsh

    (26)клиентам с малым объемам продаж отключаю уникальность штрихкодов, и в этом случае у кассира выходит окно , в котором он должен выбрать от какого производителя он продает товар. В случае некорректного выбора по крепкому алкоголю все куда проще: в ЕГАИС остатки будут корректные , в 1С пересорт по производителям. В пиве в таких случаях подписываем (если Балтика) в конце наименования город производителя, либо удобней для продавца букву маркировки (к примеру z-Ростов, Y-Ярославль и т.д.)

    Reply
  29. Protman

    С алкоголем мы сделали немного проще, штрихкоды вносим только с марок, никакого EAN13, и кассиры соответственно подбор делают по маркам т.к. по штрихкоду с бутылки не найдут. 🙂 А с пивом действительно придется свои штрихкоды печатать чтобы одно название с разными алкокодами не перемешалось.

    Reply
  30. user595255_a.kolganov

    Добрый день, все прекрасно, но если добавить стоимость закупки и продажи, это было бы не заменимо!!!

    Reply
  31. mic_1c

    Спасибо.

    Reply
  32. Gendalf

    С третьим регистром как обстоят дела?

    Reply
  33. omenfarsh

    (32)Третий регистр не планировал рассматривать в данных отчётах. Как минимум на данный момент алкодекларация для Розницы по крепкому алкоголю не сдаётся и соответственно формирование данных отчётов для него не актуальны. А пиво было, есть и будет жить на 2-м регистре. Если речь идёт об общепите, то это уже другая история. Данная 1С изначально не предполагала ведение учёта алкоголя в ЕГАИС для общепита.

    Reply

Leave a Comment

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