<?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='\
Почитайте про оформление:http://infostart.ru/blogs/1134/ .
Хм… работает немного странно. Если в один и тот же день, по различным дисконтным картам покупался один и тот же товар, то в Отчете ККМ все продажи данной позиции вешаются на одну дисконтную карту. Тоесть в конце дня появляется счастливчик с очень крупными накоплениями по карте, а остальные обладатели дисконтных карт сосут лапу… Сижу правлю отчет ККМ, планирую убрать списание товаров по отчету ККМ, а чеки пускай остаются проведенными, в глобальном модуле в функции дисконта вообще уберу обработку отчета ККМ.
Обновил версию дисконта, используется у клиентов, 100% работает!
Попробовал «внедрить» Ваш дисконт в конфигурацию ТиС 9.2
и в процессе использования программа ругается на строку
Если ПустоеЗначение(СкидкаСтрока)=1 Тогда
Пишет что не известный элемент «СкидкаСтрока».
Хм, а у меня все получилось. В табличной части каждого документа, в котором используется дисконт должен быть реквизит «СкидкаСтрока» ссылающийся на справочник скидок.
Вы же очевидно просто подправили модули документов. Рекомендую всетаки скопировать документы из прилагаемого автором MD-файла.
После внедерния вашего дисконта в ТИС обнаружил следующие:
Шкала 3 При попадание суммы в о вторую позицию он считает первую
pers200590: как у Вас организована шкала? какая сумма конкретно? что значит шкала 3?
Спасибо! Просто и удобно.
Я делал для клиента, который торгует в розницу по чекам на ФР. Если есть пожелания могу переделать, сделать, или доделать по желанию заказчика за отдельное вознаграждение!
По поводу чека ККМ- это как раз и правильно, а не в реализации.
У меня выдало кучу ошибок:
{Документ.ЧекККМ.Форма.Модуль(49)}: Неопознанный оператор
Заголовок = глНазваниеДОкументаВЖурнале<<?>>(Контекст);
{Документ.ЧекККМ.Форма.Модуль(92)}: Функция не обнаружена (глНазваниеДОкументаВЖурнале)
Параметры.ДобавитьЗначение(глЗначениеПоУмолчанию<<?>>(«ОсновнойТипЦенПродажи»), «ТипЦен»);
{Документ.ЧекККМ.Форма.Модуль(130)}: Функция не обнаружена (глЗначениеПоУмолчанию)
Параметры.ДобавитьЗначение(глЗначениеПоУмолчанию(«ОсновнойТипЦенПродажи»)<<?>>, «ТипЦен»);
{Документ.ЧекККМ.Форма.Модуль(130)}: Неопознанный оператор
<<?>>Иначе
{Документ.ЧекККМ.Форма.Модуль(131)}: Ожидается ключевое слово ‘КонецПроцедуры’ (‘EndProcedure’)
А еще выдает:
Если ((Конт.Номенклатура.ОтключитьСкидки = 1) ИЛИ (Конт.Номенклатура.Родитель.ОтключитьСкидки = 1)) Тогда
{Глобальный модуль(2372)}: Поле агрегатного объекта не обнаружено (ОтключитьСкидки)
На первый вопрос- какая у Вас конфигурация? Второй вопрос — не правильно накатили изменения скорее всего!
Конфигурация Торговля и склад 9.2, скажите как правильно? (конфигуратор — загрузить измененную конфигурацию)
как правильно читайте README.txt он приложен в архиве!
А разве в MD — нет этих изменений?
ЧИТАЙ правила описанные в txt файле! «-» за то что не смог внедрить! Молодец «-» тоже оценка!
а если из Реализации купли продажи надо сделать скидку такую. то что подправить подскажите?
и возможно ли сделать бонусную скидку на месяц. тоесть в начале месяца происходит обнуление скидки.
и еще пожелание 🙂 бонус вместо скидки (или плюсом к скидке). А на бонус клиент может набрать другой товар
(19) trioka, Посмотрите какие изменения я в нес документ ЧекККМ, по этому же принципу допишите в документ реализация, там суть сводится к тому чтобы получить скидку клиента и на эту скиду уменьшить сумму документа-оплаты!
всё конечно хорошо, работает всё, вот только на нефискальник скидка не округлённая приходит…
(21) bvk, Там не так трудно изменить, найдите в документе где вызывается функция из внешней ert обработки ФР, и поставьте ОКР
Много спорных моментов, но некоторые идеи позаимствовал. +
(23) kida1, Все спорные моменты можно всегда обсудить, спасибо за отзыв, я рад что смог быть полезен.
Скачал, посмотрю, спасибо. А есть ли у вас наработки по учету сертификатов подарочных , на торговлю 9.2?
(25) arian89, к сожалению на 9.2 нету, но можно данный механизм легко переделать в учет сертификатов.
(26) еще вопрос, в справочнике КлиентДисконт, есть ссылка на отчет Отчет.ИсторияПродажПоДисконту, а в МД его нет =( где его можно достать?
(27) arian89, к сожалению я его дать не смогу, уже все утеряно и забыто, там его написать за две минуты можно.
Denis_Viktorovich, я не программист, но удалось удачно прикрутить ваши скидки. В справочник КлиентДисконт добавил еще колонку НакоплениеКарты для списка, чтобы накопления видны были в общем списке, но не могу там вывести эти значения, не подскажите как сделать?
(29) Bunker, нужно не колонку добавлять, а вставить реквизит из справочника в этот список.
(30) да, я добавил реквизит НакоплениеКарты, но как сделать чтобы ему передать это значени, или как это делается
(31) Bunker, не справится Вам если Вы не программист.
(32) Спасибо вам за данную разработку скидок. Установить скидки получилось без особых проблем, но есть пару вопросов:
1. На часть строк вид «Если ((Конт.Номенклатура.ОтключитьСкидки = 1) ИЛИ (Конт.Номенклатура.Родитель.ОтключитьСкидки = 1)) Тогда» выдает ошибку «Поле агрегатного объекта не обнаружено (ОтключитьСкидки)», может это быть связано, что у меня версия ТиС 979? Эти строки закомментировал и вроде все работает.
2. И что надо подправить в справочнике «КлиентДисконт» чтобы вести учет карт по штрихкодам?
(33) klickg,Ответ 1: Это реквизиты справочника добавлены руками для отключения скидки на группу товара и на товар тип Истина/Ложь
Ответ 2: чтобы искал ДК в справочнике нужно событие обрабатывать, как это сделано в документе ЧекККМ, смотрите там.
(34) Спасибо, с первым вопросом все понятно.
А по второму не могли бы немного уточнить, в справочнике КлиентДисконт надо добавить реквизит, например, ШтрихКодДК, в который записывается штрихкод, и обрабатывать событие также как и в документе ЧекККМ?
Хотел себе скачать, не приходит ссылка на почтовый ящик