<?php // Полная загрузка сервисных книжек, создан 2025-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='\
«(т.е. каждый используемый элемент справочника «Типы номенклатура» следует повторить в справочнике «Виды номенклатуры»).» Типы номенклатуры — это перечисление.
Открываем элемент справочника «Виды номенклатуры» читаем внимательно название закладки «Значения по умолчанию», делаем выводы, на всякий случай подсказываю под разные номенклатуру с разными ставками НДС, учетом ГТД и т.п. вовсе не обязательно создавать различные виды номенклатуры.
Надеялся что в статье будет описано, где используется различная НСИ, т.е. — ввели мы «Вид номенклатуры», а дальше этот вид будет использован в качестве субконто, в каких-то отчетах и т.д. и т.п.
разбавить картинками не помешало бы
я правильно вас понял, что холодильники и пылесосы по вашим правилам будут разными видами номенклатуры ?
(1) Спасибо, поправил )
(2) Весьма желательно давать отдельный вид. Но никак не обязательно, каждый решает сам, в зависимости от условий проекта. Но отдельный вид под разные ставки НДС — ну, на мой взгляд, маст хэв.
«где используется различная НСИ» — ответ «везде». Как ещё ответить? Или конкретизируйте вопрос, если не сложно.
(3) картинки места много съедят, а смысл не в них, а в тексте. Я даже не смог придумать что тут проиллюстрировать. И то Инфостарт заставил картинку справа вверху вставить.
(4) Да, правильно. 1С сама в своей демо-конфигурации так справочник и конструирует.
(8)
т.е. если компания занимается бытовой техникой, то в видах номенклатуры будет полное дублирование иерархии справочника номенклатура ?
(9) Вовсе нет. Никто не запрещает дублировать, но лучше этого не делать. «Виды номенклатуры» и Группы справочника «Номенклатура»» — это два разных ресурса для классификации (двух разных классификаций). Разумнее их не сливать дубляжом в один ресурс, а продумать иную классификацию групп справочника «Номенклатура» отличную от видов номенклатуры. например, поскольку пользователи делают выборку из справочника «Номенклатура», а справочник «виды номенклатуры» большинство даже и не видит, то группы номенклатуры можно заточить под быстроту и удобство отбора номенклатуры пользователем.
Немного о практике применения.
При занесении номенклатуры в справочник по «фэншую» подразумевается что пользователи обязаны следовать определенным жестко прописанным правилам. При этом данный пользователь должен обладать очень высокой квалификацией в предметной области. (а если лранизация не узкоспециализированная, то и в нескольких областях). И вот тут начинаются интересные моменты. Во-первых, занесение номенклатуры в принципе примитивная работа и в подавляющем большинстве случаев на эту операцию не будет выделен высококвалифицированный специалист. А если и будет выделен, то для него это будет побочной (и весьма скучной) работой (все равно что программисту писать хелпер — да нужно, но многие ли пишут и какое качество этих хелперов). Во-вторых, руководство должно мотивировать и нещадно карать чтобы эти правила занесения неукоснительно выполнялись. Будет ли делать это руководитель — не факт. Если руководитель префекционист или служака — скорее да, если относительно адекватен — скорее нет. Потому что ведение справочника номенклатуры в идеальном порядке это затраты времени работника (а следовательно и денег). И ради чего эти затраты? Опять же, в подавляющем большинстве случаев, затраты не стоят результата.
зы. торопыжкам которые начнут приводить примеры — а вот у нас на предприятии…
на конкретных предприятиях возможно все, но в целом примерно описанная ситуация — в номенклатуре и не полный бардак, но и не идеальная ситуация. Потому как прикладывать ОЧЕНЬ БОЛЬШИЕ усилия по «правильности» занесения просто не рентабельно.
(11)
Как только начинается товарное планирование, автоматизация товарного обеспечения, анализ продаж, то «ОЧЕНЬ БОЛЬШИЕ» усилия окупаются сторицей. Те, кто не позаботился о правильном ведении номенклатуры начинают нести убытки от нерационального планирования и неправильных решений на основе анализа или узнают о том, что приведение справочника номенклатуры в порядок дело затратное и требует очень высококвалифицированного персонала по вашей тематике.
Хорошо бы упомянуть системы MDM для ведения НСИ в рамках множества систем.
(13) теории по MDM полно в интернете, а в статью всё ж не впихнёшь. Я старался изложить просто и практично доступный всем метод работы со справочниками..
Прошу Совета, где хранить в базе 1с кода производителя товара. У нескольких производителей, код может быть одинаковым. Артикул уникальный.
(15) Уточните, плиз, чем в вашей системе отличается код поставщика от артикула (поставщика)?
В 1C ERP в карточке контрагента — поставщика на закладке «Номенклатура поставщика» в строках соответствия есть поле «Артикул» (поставщика).
Поскольку устанавливается соответствие одна (наша номенклатура)-к-нескольким (номенклатурам поставщиков), то получается соответствие на один наш артикул — несколько артикулов (кодов) поставщиков.
Производитель=поставщик.
Подходит вам такой расклад?
Или разговор об ещё одной аналитике «код производителя», который «может быть одинаковым у разных поставщиков»?
Уточните, плиз, чем в вашей системе отличается код поставщика от артикула (поставщика)?
У поставщика может быть свой артикул. Который не совпадает с артикулом нашем.
Поскольку устанавливается соответствие одна (наша номенклатура)-к-нескольким (номенклатурам поставщиков), то получается соответствие на один наш артикул — несколько артикулов (кодов) поставщиков.
Производитель=поставщик.
Подходит вам такой расклад?
Согласен.
Или разговор об ещё одной аналитике «код производителя», который «может быть одинаковым у разных поставщиков»?
Да, «код производителя» может быть у разных поставщиков.
Роман, добрый день, не могу понять, как на этом сайте отправить личное сообщение, Вы не могли бы дать какой-либо контакт, хотелось бы задать пару вопросов, спасибо!
(18) Я написал вам контакт в личку. Видите его там?
Добрый день! А может есть у кого мысли, как лучше организовать номенклатуру? У меня коммерческое предложение считается в одной единице измерения (м2), а производится просто как комплект 1 штука. То есть я КП заказчику выставляю так: кол-во м2 * цену за м2, а в производство у меня уходит задание в количестве одной штуки. А объём работы я закрываю долями — допустим, в этом месяце я сделала 30% процентов от заказа. То есть закрываю 0,3 комплекта. Мне на это обязательно нужно заводить две разные номенклатуры? Ну чтобы завести их с разными единицами измерения?
Добрый день!
По использованию характеристик номенклатуры. «Товарными характеристиками могут быть размер одежды, длина заготовки…»
1. Представим что длина заготовки может варьироваться от 1 м. до 6 м. с шагом 10 см. Тогда получается очень большой список характеристик и установка цен становится на такой быстрой. Но как-то где-то мы должны фиксировать длину заготовки. Есть варианты как это сделать? Желательно типовыми средствами.
2. Характеристика (не знаю как правильно сказать) отражает количество товара. Например товар учитываем в тоннах, а хотим продать поштучно. Каждая характеристика в зависимости от длины заготовки имеет разный вес. Тогда не работает типовой механизм пересчета товара из одной единицы в другую т.к. коэфф. пересчета задается для номенклатуры а не для характеристики. Как быть в этом случае?
(20) С чем связана передача в производство в штуках? Почему не в тех же метрах?
(21) Товарные характеристики содержат разрез, который интересен для вашего клиента. Если ему интересны длины заготовок — значит длины должны быть в характеристиках. Такова «идеология» товарных характеристик.
Долгое назначение цен — совсем другая проблема и она решаема техническими мерами, а не адаптацией справочника.