<?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='\
(0) Маловато будет)
(1) cleaner_it, Какие есть предложения по расширению статьи?=)
Маловато. Было бы отлично с подробным разбором и примером.
(3) grfru, хорошо, как будет возможность, добавлю в статью разбор типового запроса цены и на ее основе создам свой.
Так как к статье нельзя крепить файлы, то вот готовая схема СКД цены из статьи
Подскажите, какой Запрос сделать, чтобы из Цены Дилер, получить расчетную цену «Дилер без НДС»,
Просто делить на 1.18 нельзя, т.к. у всех товаров НДС разный.
(6) aramius, на вскидку можно из номенклатуры взять саму ставку, а затем в запросе через Выбор прописывать процент на который делится. Например
Какой будет запрос для определенного вида цены?
Что -то типа?:
Показать
(9) vit1c, ее не нужно получать, при расчетах вид цены берется из документа установки цен, и сам автоматически подставляется в ее расчет.
Если просто необходимо получить уже установленную цену для номенклатуры, то в принципе такой запрос подойдет.
Подскажите пожалуйста почему в при выборе типового запроса «Цены поступления» в некоторых случаях вставляется Цена без НДС а в некоторых Цена с НДС. Заранее благодарен!
(11) azovgsm, может у вас в самой номенклатуре указано, что она «без ндс», поэтому и цена без нее.
Спасибо за ответ. Действительно, так и есть. В справочнике номенклатура стоит Цена Без НДС, но если ставить НДС к примеру 10%, то ничего не изменяется, в документ установка цен все равно попадает цена — НДС.
(13) azovgsm, а посмотрите еще в документе поступления, там цена с ндс или без указан
УТ11.1
Вопрос такой:
Можно ли сделать так, чтобы вид цен РекомендуемаяЦена заполнялся по формуле
РекомендуемаяЦена = цена поставщика Завод , (Завод — это партнер(поставщик) из справочника)
не на основании Заказа поставщику или Поступления , а просто в документе Установка цен или в с рабочего места Цены(Прайс-лист)
Поясню.
От поставщика» Завод» мы получаем прайс на товар с ценой «Рекомендуемая». По этой цене мы продаем нашим клиентам товар, делая различные сложные скидки. А также по этой же Рекомендуемой цене мы покупаем товар у поставщика Завод, но скидки, конечно, Завод нам делает гораздо большие и они тоже сложные. Скидки разные на разные товары (от 10 до 50%). Скидки зависят от того, предоплата или отсрочка. сколько дней отсрочка, какой товар, и проч. в общем сложные скидки. Скидки у нас настроены, все нормально.
Но, мы вынуждены заводить (обновлять) регулярно объемный прайс Рекомендуемой цены.ВРУЧНУЮ ДВАЖДЫ.
Один раз — создавая Цены поставщика (Прайс-лист), колонка цены (вид цены) — Рекомендованная, поставщик — Завод.
Второй раз — Создавая свой Цены (прайс-лист), колонки прайс-листа (вид цен) РекомендуемаяЦена.
Нам не хочется заводить одни и те же цифры (Рекомендованный прайс Завода) в наш прайс и в прайс поставщика. Хочется сначала заполнить один прайс поставщика, а из него — автоматически -прайс наш.
(15) Кошкин Василий, здравствуйте, попробуйте настроить вторую цена, как рассчитываемую на основании первой, в проценте надбавки указать 0
(0) Спасибо за статью, очень полезно.
Задался настройкой данного механизма. Смог настроить произвольным запросом один вид цен (ВидЦен1). Сделал установку цен для ВидЦен1. Теперь хочу другим произвольным запросом рассчитать ВидЦен2 по формуле, например ВидЦен1 * x (где x — получаю из БД). Пытался получить ВидЦен1 как у (9), в конструкторе запрос работает как нужно, но в виде цен — не работает.
Уважаемый karpik666, было бы не плохо, если бы Вы объяснили как вид цен рассчитанной произвольным запросом, в другом виде цен, который настраивается произвольным запросом… )))
(17) InWith, здравствуйте, к сожалению сейчас с управлением торговлей не работаю, поэтому как-то подробней тему не смогу раскрыть.
Добрый день! Хорошая статья.
Не подскажете как можно сделать следующее:
В документ реализации нужно включать стоимость доставки. Стоимость доставки рассчитывается как 10% от стоимости всего заказа.
Хотелось бы реализовать такую схему типовыми средствами.
Создаю номенклатуру «Доставка товара» с типом услуга. В типовом соглашении об условиях продаж на закладке «Уточнение цен по товарам»
добавляю номенклатуру «Доставка товара» указываю вид цены «Доставка».
В карточке этого вида цены указываю: использовать «при продаже клиентам»; способ задания цены «произвольный запрос к данным ИБ».
В поле схема компоновки данных «произвольный».
И вот теперь вопрос: как в этой схеме получить стоимость доставки путем суммирования стоимости всех товаров в заказе и умножения этой стоимости на 10%.
Возможно ли это? Или может я пошел не тем путем и лучше реализовать все это как то по другому?
(19) Spacer,
Правильней, да и проще, реализовать обработкой заполнения для документа.
все сделал по инструкции, ввел значение параметра, но ничего не считает, пишет параметр не заполен
(21) kassbar, здравствуйте, пришлите мне в сообщении сам запрос, все ли в нем верно.
(23)
Привет, вот запрос простейший, мне нужно установить цену в зависимости от веса номенклатуры. единственный параметр — коэфиициент, ставил и программно и при установке цены, не работает..
(24) kassbar, ну у меня тоже пишет, что параметры не заполнены, но цену считает, а вот запрос, у вас какой-то странный. Вы не все делали, как написано в статье. В в полях номенклатура и валюта должны быть ссылочные поля, а не строки.
Должно быть Валюта.Ссылка КаК Валюта, и Номенклатура.Ссылка КАК Номенклатура.
я уже по-всякому писал, и ссылка, и с фигурными скобками и без, не считает все равно
(27) Загрузите данную схему себе, у меня она точно работает. Плюс такие настройки должны быть в самой цене. А в прайс-листе когда будете рассчитывать цены — при заполнении ничего не проставится и нужно нажать «Рассчитать вычисляемые».
Спасибо )
Добавьте пож-та в статью этот пункт «А в прайс-листе когда будете рассчитывать цены — при заполнении ничего не проставится и нужно нажать «Рассчитать вычисляемые».
Собственно в нем и была вся загвоздка, просто по нажатию кнопки «сформировать» расчета цены не происходит, только заполняется колонка ном-ры.
Все работает, супер !
(29) kassbar, пожалуйста, публикацию обновлю и добавлю данную информацию. Если же статья понравилась, то ставь плюс, очень мотивирует.
Привет. Помоги разобраться. Не как ни могу запустить выдаёт ошибку. Ошибка в схеме компоновки данных
по причине:
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(67, 59)}: Неверные параметры «Справочник.УпаковкиНоменклатуры.ПустаяСсылка»
КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка = ЗНАЧЕНИЕ(<<?>>Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
(31) Здравствуйте, судя по данной ошибке, в конфигурации нет справочника «УпаковкиНоменклатуры», проверьте может он был переименован на «Упаковки», либо его вообще убрали
Здравствуйте, проверил такого справочника нету, что теперь делать? Спасибо.
(33) поправить текст запроса
Вы поможете с поправкой текста. Если вам не сложно. И то я этого не понимаю
Добавьте пож-та в статью этот пункт «А в прайс-листе когда будете рассчитывать цены — при заполнении ничего не проставится и нужно нажать «Рассчитать вычисляемые».
Собственно в нем и была вся загвоздка, просто по нажатию кнопки «сформировать» расчета цены не происходит, только заполняется колонка ном-ры.
Все работает, супер !
Доброго времени суток. А есть возможность в типовой произвести наценку таким образом:
Закупочная цена от 0р до 999р — наценка 50%
Закупочная цена от 1000р до 10000р — наценка 40% и т.п.?
Конфигурация КА2
(37) Здравствуйте, давно работал с УТ 11, поэтому могу не помнить. но разве в типовом функционале нельзя задать шкалу с уловиями и размером наценки без программирования формулы в СКД?
(38)
Возможно, что есть такая возможность, но за последнюю неделю я ее не смог найти. К тому же, на сколько я понял, в КА2 есть только 1 вид цен — Прайс-лист или я ошибаюсь?
(39) внутри справочника можно завести разные виды цен
(40)с видами цен разобрался, нужно было включить в настройках «Несколько видов цен».
Но как включить наценку по диапазонам? Вычитал на форуме, что можно это сделать с помощью документа «Установка диапазонов базовых цен», но в конфигурации не могу найти ничего похожего на этот документ.
Проблема решена, всем спасибо за участие.
Итак, мой вариант решения проблемы, может кому будет полезно.
Имеем необходимые диапазоны наценок от закупочной цены:
От 0 р. до 100 р. — 100%
От 100 р. до 500 р. — 50%
От 500 р. до 1000 р. — 40%
От 1000 р. до 5000 р. — 35%
От 5000 р. до 10000 р. — 30%
От 10000 р. до 20000 р. — 25%
От 20000 р. до 30000 р. — 20%
Свыше 30000 р. — 15%
Создаем вид цены «Закупочная» со способом задания цены «Произвольный запрос к данным ИБ» со схемой компановки данных «Цена поступления»
Создаем вид цены «Розничная» со способом задания цены «Произвольная формула от других видов цен», саму же формулу нужно писать под определенные условия, в моем случае формула получилась следующая:
Расставляем необходимые галочки, задаем пороги округления и срабатывания и вуаля, заработало.
Согласен, решение кривовато, но всё таки это решение:)
Разобрался!
Нужно было переменную &ВидЦены назвать по другому. В эту передается обрабатываемая цена. Я назвал &ВидЦены_Закуп, добавил в параметры и присвоил цену закупа. Вот рабочий вариант:
Показать
Доброго времени суток!
Вдохновился статьёй, но до конца недопонял.
Как на СКД сделать цену , чтобы она помимо наценки на другой вид цен добавляла копеечки в зависимости от типа упаковки. Чем мельче упаковочка, тем больше копеечек.
С уважением, Земсков В.К.
смутила меня такая трактовка
с этим
я согласен, закодировал проверку на дату и поигрался датой документа установки цен (скрины прикрепил)
но, с этим
во первых, у меня это не работает, неважно какая дата прайса, цена с установки такая как в документе Установки цен
Здравствуйте, не понимаю как работают стандартные СКД при способе задания цены «Произвольный запрос к данным ИБ». Выбираю, например, «минимальные цены поставщиков», нажимаю «редактировать». Добавляю в отбор «виды цены поставщика», выбираю конкретную цену поставщика, сохраняюсь. В Прайс-листе рассчитываю вычисляемые. Что за цена выскакивает, непонятно. На данный товар единожды устанавливалась цена поставщика. Оптовая -27290 и розничная — 34110, но в прайсе появляется 28425., что это за цифра, это и не средняя, ни минимальная, почему не работает отбор? Какую бы я ни использовал стандартную СКД использующую цену поставщика появляется -28425.Они, что не настроены на самом деле?
Разобрался, НДС надо было проставить во всех ценах, и в ценах поставщиков и в настраиваемых.