<?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='\
Например, в автобизнесе, где все запчасти к автомобилям маркированы по артикулам (спец. кодам). Аналоги зависят от страны-изготовителя, например. Есть целые каталоги соответствий аналогов.
Я, конечно, в 8-ке нуль, но, по-моему, есть штатный справочник аналогов для номенклатуры в типовой УТ…? городить для этого спец.табличную часть..эээ.. как-то мне не комильфо..?
Штатного справочника аналогов для номенклатуры в типовой УТ, к сожалению, нет. Иначе именно с ним я бы и работал (это было бы значительно проще, чего уж там)… Кстати, почему обязательно пользователю самому надо заполнять аналоги? Это вполне может сделать небольшая обработка, нужен только исходный список (по автобизнесу например он есть и мы его-то и используем). Тестировался этот механизм на базе номенклатуры, имеющей около 50000 наименований, поэтому и реализован он только на запросах.
Каждому свое — в некоторых случаях (к примеру крупная огранизация поставщик) действительно покажется это не нужным, тем более у них наверняка есть УПП, в котором этот справочник есть (в УТ этого справочника нет, я его сам «перемещал» из УПП) — но в маленьких организациях номенклатуры немного, но за счет огромного числа поставщиков — количество аналогов не так уж мало — тем более не редки случаи, когда в интернет магазине одно, а в базе другое, так, что кому-то эта обработка может и понадобится.
автор пишет : «необходимо внести изменения (очень небольшие) в справочник Номенклатура. А именно — создать табличную часть Аналоги, внести туда реквизиты Артикул (как строка длины 25) и Номенклатура (как СправочникСсылка.Номенклатура). В справочнике создать вкладку Аналоги (см. изображение 2).» как это все сделать в конфигураторе?. помогите скринами.
(6) Прикладываю файл-инструкцию. Там сама инструкция и скрины.
Не открывается в 11.0.5.4
(8)Обработка сделана для УТ 10.3.
У нас на фирме тоже «рабочее место» переделали ( добавили возможность подбора номенклатуры в отдельное окно с последующей загрузкой в необходимый документ, а так же добавили возможность просмотра и подбора сопутствующей номенклатуры. Идея с аналогами понравилась,обязательно попробую скрестить с нашей обработкой.
(10) Бог в помощь. Если возникнут вопросы — обращайтесь.
Скажите а аналог видит другой аналог если он прописывался с одной стороны, т.е если мы прописали что что товар № 1 = товару № 2, будет ли видно при выборе товара № 2 что он аналог товара № 1, при этом отдельно не прописывали что товара № 2 = товару № 1.
подскажите а как правильно её запустить в базе.
(13)Инструкция уже изложена мною в (7). Отвечая на (12) скажу, что нет, не будет видно. Связано это с тем, что например для запчасти японского производства китайская является аналогом (дешевым), а вот для китайской японская — нет. Таким было требование заказчика. Если необходимо, можно в принципе сделать спец. обработку для того, чтобы аналоги учитывались с обеих сторон…
Спасибо за ответ
А как быстро можно сделать спец. обработку для того, чтобы аналоги учитывались с обеих сторон…
было бы очень хорошо если бы такая функция здесь присутствовала.
Еще интересует параллельно возможность залива аналогов из Эксель, конечно есть вероятность не схождения по названиям, но это уже отдельная тема.
(15) Для этого надо эту обработку повесить при вводе аналога в карточке. Т.е. как только вводится аналог в карточку по товару, программно сразу же вводится в карточку аналога обратный аналог. Да делается в-общем то достаточно быстро, в течение вечерка…
Было бы очень удобно если бы такая функция появилась, при этом если бы можно было бы её включать и выключать.
Спасибо за ответ.
Подскажите: при создании чека и добавлении в него номенклатуры через эту обработку не выставляется ед. хранения и цена, а при создании заказа не выставляется размещение товара. В чем может быть причина?
(18)Артем, я проверил обработку, реквизиты Единица измерения и Цена выставляются, причем не только при выборе основного товара, но и аналогов. Вам надо проверить такие моменты у себя: 1) В карточке выбранного товара должны быть проставлены единицы измерения, там их несколько. 2) Вы в самой обработке должны выставить цену (проставить галочку), по которой будете выбирать и заносить товар в документ. Список цен там в обработке внизу справа.
А вот размещение в заказе действительно не выставляется. Это было сделано по просьбе клиента. Если нужно, можно подправить.
(19) Спасибо за ответ. При добавлении товаров в чек еще почему-то пишет {Документ.ЧекККМ.Форма.ФормаДокумента(309)}: Значение не является значением объектного типа (Коэффициент)
СтрокаТабличнойЧасти.Коэффициент .
По коду вроде все Ок. Непойму пока.
Буду благодарен, если вы поделитесь кодом для автоматического размещения.
(20)Для автоматического внесения реквизита Размещение в Заказе покупателя необходимо скачать обновленную версию обработки, поскольку я там внес необходимые изменения, а также внести исправление в модуле документа Заказ покупателя в функции ЗаполнитьТабличнуюЧастьИзПодбора() так, как показано на рисунке (внести одну строчку, она выделена). Собственно, это все…
Не пойму цена и единица в чеке все равно не выставляется. А еще фильтр по наличию каждый раз приходится перещелкивать. Почему-то при изменении строки поиска фильтр не срабатывает. И в аналогах не показывается цена. Есть идеи?
(22) Идеи есть всегда, Артем.
Итак, цена и единица измерения у меня выставляется. Для того, чтобы понять, что у Вас не так, мне необходим Ваш файл конфигурации (формата CF).
По фильтру — не так часто им пользуемся, поэтому его сильно не шлифовал, но можно доработать.
А вот чтобы в аналогах показывалась цена, сделайте следующее. Зайдите в конфигуратор, откройте обработку, зайдите в модуль формы. Найдите в куске кода выделенную строчку. Так вот, Вам нужно заменить код типа цен, который там стоит, на свой код (например тот, который соответствует розничной цене). Сохраните обработку и пробуйте…
Спасибо. Завтра проверю. Я писать в 1С недавно только начал, пока не доходит быстро) Буду разбираться.
Здравствуйте очень понравилась Ваша обработка «Рабочее место менеджера по продажам с учетом аналогов»
Вы говорили что можно добавить функцию когда аналог видит другой аналог, т.е если он прописывался с одной стороны, то его видно сразу и с другой. Это делается на базе карточки товара и его закладок. Вы говорили что в некоторых случаях это не нужно потому что это не всегда используется. Но все же хотелось бы иметь такую возможность включать такую функцию и выключать. Готов обсудить добавление этой возможности на платной основе. Также интересно добавить фильтр поиска по товарам на основании их свойств.
Спасибо буду ждать Вашего ответа.
Александр
(25)Здравствуйте, Александр.
Если Вам это нужно не сильно срочно (в течение 2-х недель), тогда не вижу никаких причин Вам отказать. Мой почтовый адрес cxy_cxx@rambler.ru
Фильтр по товарам на основании их свойств — хотелось бы поподробнее, что именно Вы хотите.
Удобная вещь — наличие чека ККМ — очень нужно!
(23)Извините, вышла задержка. Получилось проверить только сегодня. Вывод цен в аналогах работает, большое спасибо. А вот вывод цены при подборе в чек найти так и не смог. Ссылку на полную конфигурацию высылаю вам на почту cxy_cxx@rambler.ru. Если у вас будет время посмотреть буду очень благодарен.
(28)Для того, чтобы выводилась цена, необходимо скорректировать процедуру ОбработкаПодбора в документе ЧекККМ в модуле ФормаДокумента таким образом, как это показано в прилагаемом мною файле. И тогда все будет хорошо 🙂
P.S. Файл открывайте в 1С — там текст процедуры…
(29)Огромное спасибо! Все работает.
(31)Для того, чтобы Вам помочь, мне нужен файл конфигурации формата CF. Мой ящик cxy_cxx@rambler.ru
Просто дело в том, что решение этой задачи может лежать не только в тех процедурах, которые Вы мне представили.
А с файлом *.cf мне гораздо быстрее получится разобраться…
(31)Отвечаю. Для того,чтобы решить проблему, надо вставить строчку, которую я выделил в тексте. Собственно, это как бы всё…
CXY СПАСИБО ВАМ ОГРОМНОЕ ЗА ПОМОЩЬ!
Как хорошо что есть такие люди как вы, которые берутся помочь новичкам! 🙂
Скажите на сколько Ваша обработка способна решать проблему скозных аналогов
Мне кажется что нет смысла обединять почти похожие аналоги, он либо является аналогом, либо нет
если у него есть схожие свойства то лучше при не нахождении аналога предложить поиск по похожим свойствам номенклотуры. Но важно что бы при прописывании А = Б и Б = С сразу прописывалось что и С = А
иначе возникает проблема надо повторно потом отыскивать связи и писать их дополнительно,
а это большой объем работ
Скажите у Вас реолезован такой функционал?
можноли увидеть при прописывании А = Б и Б = С что сразу прописывается и С = А
и если у Вас отбор по свойствам что бы найти схожие товары не являющиеся аналогами если нужного аналога нет.
(36)Функционал сквозного прописывания аналогов в разработке на сайте я не ставил, хотя понимал что рано или поздно такой вопрос будет стоять. Но реализовать его можно достаточно просто. Например, в карточке товара А ставим аналог А=Б. При нажатии кнопки Записать или ОК прорамма ОДНОВРЕМЕННО зайдет в карточку товара Б и поставит там аналог Б=А. Теперь далее, мы зашли в карточку товара Б и поставили там аналог Б=С. Тогда программа в момент сохранения карточки зайдет в карточку С и проставит С=Б, и также еще один аналог С=А, затем зайдет в карточку А и проставит аналог А=С.
Другими словами, этот механизм будет работать в момент непосредственного заполнения и сохранения аналогов. Тогда это не сильно заметно отразится на быстродействии системы… Другое дело, что не всегда этот механизм нужен, моему заказчику как раз он не понадобился. Например, для детали японского производства аналог корейский или китайский может быть, а вот для китайского товара деталь из Японии аналогом не является (оригиналом)…
Свойства товара это стандартный механизм УТ, и он должен работать, его функционал я не ограничивал.
Функционал сквозных аналогов есть в конфе Рарус Авто. Там реализовано на регистре сведений. Реализовали эту идею в УТ10 примерно за 4-5 часов, вкл. вычищение багов. Только в этом случае прописывание аналогов через загрузку не столь тривиально.
Хорошая обработка. Спасибо. Как раз то что я искал.
Правда я ее частично переделал. У меня аналоги хранятся в регистре сведений,
а не в табличной части элемента справочника.
Согласен с (39) менять справочники не хорошо. Уж лучше засунуть в регистр сведений. А еще у аналогов должны быть приоритеты продажи. (Я вот например не люблю продавать аналоги товаров взятые на комиссию, или просто некоторые бренды хочется продавать только как резерв). Короче нужен приоритет продажи.
А еще бывает что А заменяет Б, а наоборот нет….. это тоже как-то надо учитывать.
приобрел данную обработку, теперь вопрос как сделать в табличной части аналоги, если можно по шагово или могу дать доступ к своему компу, оч нужно пож. помогите
(41) смогу Вам помочь только с 22 апреля, сейчас пока в отпуске, пишу с планшета. Если же время не позволяет, то помочь Вам может любой сведущий в 1с, даже начального уровня…
(42)
так что на счет помощи? 319540205icq lexuslam skype
(43)Встретимся в скайпе.