Учет подарочных сертификатов для 1С: Управление торговлей ред 10.3 (10.3.21.1)




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

46 Comments

  1. Consultant_1C

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

    Reply
  2. Re:аниматор

    (1) выкладывай.

    Не плохо бы выделить отдельной подсистемой для идентификации объектов

    Reply
  3. Consultant_1C
    Reply
  4. Consultant_1C

    Да можно было бы закинуть в отдельную подсистему и включить в настройках параметра учета через функциональную опцию включить возможность включения(отключения) учета ПС.

    Reply
  5. Consultant_1C

    И отчет еще нужно поправить =))) а то Внереализованная прибыль не правильно отражается =)))

    Reply
  6. volga1

    у вас в фр как печатается «безналичная» или отдельной строкой?

    Reply
  7. IG

    В комплексной будет работать?

    Reply
  8. Consultant_1C

    Не могу сказать !!! К публикации приложен CF из УТ а Комплексная считается другим ПП фирмы 1С соответственно придется разворачивать и переносить ручками в КА 8 но там все подписано перенести день работы.

    Reply
  9. IG

    Спасибо! Попытаюсь перенести.

    Reply
  10. volga1

    Спасибо, работает на платформе 8.1, а по поводу ФР сделал отдельной строкой.

    Reply
  11. WhiteDragon

    (9) поделитесь опытом по переносу в личку 🙂

    (1) а если продажи делаются документом РТиУ (КА), сильно механизм менять придется?

    Reply
  12. Consultant_1C

    Блин я даже не знаю что сказать !!! Наверное придется не изменить, а придумать механизм какой то свой для гашения сертификата в документе РТиУ.

    Reply
  13. OR@NGE

    (10) volga1, подскажите, пожалуйста как переделать чтобы отдельной строкой шло в ФР?

    Reply
  14. Kitri

    (5) я так поняла, что она удваивается в итогах группировки? Если знаете, подскажите, пожалуйста, где это можно поправить?

    Reply
  15. Consultant_1C

    (14) Kitri, Не совсем понял вашего вопроса =)

    Reply
  16. makaorel

    спасибо, полезно

    Reply
  17. zif74

    Реализовывал когда-то подобное. правда использовал не серии, а характеристики. Но Ваш способ удобней, спасибо…

    Reply
  18. ov1

    В з-отчет попадает и стоимость подарочного сертификата и цена товара. То есть итоговая сумма за этот товар задваивается! Подскажите как это дело побороть?

    Reply
  19. NKrisV

    Скачала данную обработку, а теперь расскажите пожалуйста кто-нибудь, как ею пользоваться? Точнее как загрузить в 1с. Впервые столкнулась с таким разрешением .cf

    Reply
  20. Consultant_1C

    (19) NKrisV, Я думаю файл нужно передать программисту 1С и попросить его внедрить в вашу конфигурацию.

    По поводу задваения суммы в z-отчет , вы наверное что-то не так делаете!

    Reply
  21. kuza_87

    Если нет подсистемы с измененными/добавленными объектами, то может в статье напишите какие объекты добавили/изменили?

    Reply
  22. Consultant_1C

    Да, признаю, в отдельную подсистему не вывел! Сейчас уже и не вспомню что изменял лучше сравнить с типовым релизом!

    Reply
  23. MyBelio

    Подскажите в «Управление торговлей», редакция 10.3 (10.3.14.3) будет работать?

    Reply
  24. RokLI

    В отчете в скд поправьте

    Вместо

    ЕСТЬNULL(ДвижениеСертификатовОстатки.СуммаОстаток, 0)

    на это

    ВЫБОР
    КОГДА ДвиженияСерийныхНомеров.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозОперацияСертификатов.Реализация)
    ТОГДА ЕСТЬNULL(ДвижениеСертификатовОстатки.СуммаОстаток, 0)
    ИНАЧЕ 0
    КОНЕЦ КАК ВнереализационнаяПрибыль

    Прибыль то только от обналиченных сертификатов идет как понимаю )

    Reply
  25. Consultant_1C

    Я честно скажу что уровень моего программирования был не особо высок поэтому возможны ошибки. Но я за это и денег живых не беру =)))) А как болванка подойдет, а там люди поправят =)))

    Reply
  26. Гость

    Внедрил данную обработку в 1с 8.2 конфигурацию 10.3.30.1. Но есть проблема с которой пока не могу разобраться, при закрытии кассовой смены в отчете о розничных продажах не гасится ПС, но если его туда вручную вбить и перепровести, то все нормально.

    Прошу подсказать где накасячил.

    Reply
  27. konfed

    При проведении чека (продажа шла из ФормыРегистрацииПродаж) пишет,что остатка по сертификату НЕТ. разбираюсь почему проверяет остаток по сертификатам

    Reply
  28. Sartinsky

    Подскажите, как реализован учет по остаткам ПС? Так как столкнулся с проблемой, при проведении «Отчет о розничных продажах» — ругается на недостачу

    Reply
  29. rv6lvc

    Добрый день! Скачали подсистему, наш программист установил ее, и тут мы сталкнулись с проблемой на самом простом: мы не можем забить серийные номера как это показано у вас. Подскажите, с чем это может быть связано: с конфигурацией или с некоректной установкой подсистемы.

    Reply
  30. tyasytova

    (3) Нужно поменять чтобы не ругалось на недостаток товара на складе

    Документ: Чек ККМ:

    Процедура: ДвиженияПоРегистрам

    //Артем+++
    //Отберем ПС для формирования движений по регистрам
    ТаблицаПоПС = ОбщегоНазначения.ОтобратьСтрокиПоКритериям(ТаблицаПоТоварам,
    Новый Структура(«ПодарочныйСертификат», Истина)).Выгрузить();
    
    //По некоторым регистрам Услуги проводить не нужно.
    //Подготовим отдельную таблицу.
    ТаблицаПоТоварамБезУслуг = ОбщегоНазначения.ОтобратьСтрокиПоКритериям(ТаблицаПоТоварам,
    Новый Структура(«Услуга,ПС»,          Ложь,Ложь)).Выгрузить(); //Новый Структура(«Услуга,ПодарочныйСертификат»,          Ложь,Ложь)).Выгрузить();
    
    //++++++++++++

    Показать

    Reply
  31. Consultant_1C

    (29) Я думаю с установкой скорей всего.

    Reply
  32. Jelbock

    Здравствуйте. Внедрил данный учет сертификатов, но возникла проблема. Без фискального регистратора все хорошо, все работает. Но с фискальным регистратором при закрытии чека пишет «Возможны расхождения ИБ и ленты ФР! Ошибка при попытке проведения документа!». Фискальный регистратор Штрих-М-light-200.

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

    Reply
  33. Consultant_1C

    Вообщем я думаю нужно посмотреть механизм печати чека на ФР. Скорей всего вид оплаты подарочным сертификатом никак не проходит и не отражается в секции оплат чека. К сожалению ФР под руками нет и не появиться в ближайшее время а те что есть фискализированы и потестить не выйдет. Выше кто-то уже говорил про эту беду. Можно с ним списаться и попросить куски кода которые он изменил. Удачи Вам!

    Reply
  34. karik-news

    Добрый день!! Подскажите можно ли внедрить данную обработку в УТ 8.3 ВЕРСИИ 10.3.29.1 ???

    Reply
  35. Rockdrive

    (34)Да можно можете скинуть на адрес 1c8v@mail.ru

    Reply
  36. mrlakec

    Я правильно понимаю, если продажи делают через фискальный регистратор(ШТРИХ-М, без онлайн кассы) то сертификат не верно продается?

    Reply
  37. mrlakec

    (32)

    Не нашли решение проблемы?

    Reply
  38. Consultant_1C

    Да на текущий момент публикацию необходимо переработать. Она не отвечает требованиям ФЗ-54.

    Reply
  39. mrlakec

    (38) не планируете этим заняться?

    Reply
  40. market

    Если работает обмен УТ 10.3 с Розница 2.2 базовая, то данная обработка подойдет?

    Reply
  41. Consultant_1C

    (39)Бесплатно, нет+)))

    Reply
  42. Consultant_1C

    Нет, правила конвертации нужно переписывать !!! Если это сделать то подойдет !!!

    Reply
  43. erlsm

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

    Заинтересовала ваша система, сможете внедрить у нас на дописанной ут 10.3 с учетом ФЗ-54 , интересует цена вопроса, можем списать по email.

    Reply
  44. Consultant_1C

    (43)Добрый день!!! Готов оказать помощь!!! Пишите Consultant_1C@bk.ru

    Reply
  45. user1099420

    Помогите пожалуйста с установкой. Есть несколько вопросов:

    1) как объединять конфигурацию? основными делать свою или загружаемую?

    2) к каким регистраторам привязывать? (только ЧекККМ или еще какие-то нужны?)

    Reply
  46. Consultant_1C

    Думаю по поводу объединения лучше позвать программиста !!! Он как раз и перенесет изменения и новые объекты.

    Reply

Leave a Comment

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