<?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='\
Файлы прикрепи, потом публикуйся
название: продкутового — продуктового
А своя база — это хорошая идея…
Рязанский,
исправил 🙂
Ну как? Штрихкода то находятся?
В эту DBF-ку легко штрихкода из своей базы добавлять с помощью моих внешних обработок, так силами сообщества infostart.ru можно довести её до всеобъемлющих размеров 🙂
«Для того, чтобы «прикрутить» СоздатьНоменклатуруПоШК.epf к УТ надо добавить в модуль формы документа такой код»
Можно поконкретней? Модуль формы какого документа? И как это работает на примере ввода нового поступления.
FERMER111,
Я пробовал на «Управлении торглвей 10.3»
Конфигуратор, Документ «ПоступлениеТоваровУслуг», модуль формы «ФормаДокумента», там ищешь функцию «СШКНеизвестныйКод(Штрихкод, ТипКода, СШК)», существующий код функции комментишь и заменяешь на текст, приведенный мной в описании (ну или вносишь руками нужные изменения в существующий код). Сохраняешь изменения в конфигурации.
По адресу: «КаталогПрограммы()+»СоздатьНоменклатуруПоШК.epf»»(обычно C:Program Files1cv81in), кладешь мою обработку- «СоздатьНоменклатуруПоШК.epf».
В составе этой обработки есть экспортная процедура «ДобавитьНеизвестныйШтрихкод(ТипКода, Штрихкод, 1, Этаформа)», эта процедура вызвается конфигурацией при внешнем событии ввода штрихкода, если введенный штрихкод не найден в регистре сведений «Штрихкода». Только штатно это процедура вызвается из встроенной обработки «Обработки.ИдентификацияШтрихкодов», а её вызвыаю из моей внешней обработки. Кстати, можешь встроенную «заменить на внешний отчетобработки» из моего файла «СоздатьНоменклатуруПоШК.epf» и тогда не придется вносить изменения в текст функции «СШКНеизвестныйКод» в каждом документе, но мне кажется это извращение и сам я его не пробовал. По мне лучше в каждом документе внести изменения руками, чтобы понимать в каких документах мне нужен автоматический ввод штрихкода из моей DBF базы, а в каких луше оставить штатную обработку неизвестного штрихкода.
В обработке «СоздатьНоменклатуруПоШК.epf» надо зайти на вкладку «Настройки», заполнить соответствующие поля и «сохранить настройку», тогда вновь создаваемая номенклатура будет создавать в отдельно выделенной для этих целей группе, также там можно изменить лимит строк в документе (чтбы юзер не плодил документы по тысяче строк) и обязательно указать путь к DBF-кам, в которых нужно искать штрихкод. Количество DBF-ок не ограничено. Но обработка ищет сначала в тех DBF-ках, которые идут в начале списка, как только находит соответсвующий штрихкод, поиск прерывается. Если один и тот же штрихкод встречается в нескольких DBF-ках, его можно найти по кнопке «Найти похожие штрихкода», если нужный штрихкод не найдется, то моя обработка предложит для заполнения соседние штрихкода (это только по кнопке «Найти похожие штрихкода»).
Замечательно!! +++ Все получилось. Правда, пока еще нет возможности проверить в отделе, завтра обязательно пущу в дело. А как создавать свои DBF-ки, например от поставщика?
Если база работает на скуле, то ловчее и стороннюю базу сделать на SQL, а не на DBF.
Помню делал стороннюю, которая фиксировала все изменения в особо важных объектах (например, Справочник Контрагенты). Очень удобно, а чем лучше скуль — индексы у него не ломаются и можно напрямую из 1С через ADO подключиться
FERMER111,
Чтобы создать свою DBF-ку запусти внешнюю обработку ВыгрузкаШКвДБФизУТ.epf в 1С81 (или ВыгрузитьШКизТиС.ert для 1С77), там есть три кнопки: «выгрузить базу», «объединить с текущей базой», «тест чтения»
1. «выгрузить базу» — задаёшь имя файла выгрузки, нажимаешь кнопку «выгрузить базу» и все штрихкода сливаются в файл выгрузки — получаются два файла *.DBF, *.CDX
2. «объединить с текущей базой» — указываешь путь к существующему файлу DBF (в том же самом поле, что и в п.1 — т.е. имя файла выгрузки), нажимаешь «объединить с текущей базой». Штрихкод из 1С-ки сначала ищется в указанной DBF-ке, если не находит, то добавляет запись в эту же DBF-ку и соответствующую запись в индексный файл.
3. «тест чтения» — указываешь путь к существующему файлу DBF (или ничего не задаешь, если путь остался после п.1, или п.2), вводишь искомый штрихкод в поле слева от кнопки «тест чтения», нажимаешь кнопку «тест чтения». Тебе выдается сообщение с найденным названием товара, или предупреждение «штрихкод не найден».
Abadonna,
ну тем кто работает на SQL-е может быть и да.
Только современные одинэсники, творящие на 1С81 этот sql дяже и не нюхали 🙂
Вообще, идея моей базы — облегчить жизнь товароведу или кладовщику при приёмке большого количества НОВОГО товара, такое бывает, например, когда магазин только открывается. А когда магазин уже долго фунциклирует он, как правило, уже имеют свою внутреннюю базу штрихкодов и дополнительные внешние базы ему редко нужны. Пэтому ИМХО для моей внешней базы важнее быстрота подключения, простота переноса с одного компа на другой, универсальность обмена информации с другими базами. Для этих целей dbf-ки подходят больше, так как не требуют установки никакого дополнительного ПО и работают с любой базой.
Ну чё уж ты их так 😀
Если 1С-сервер, то, как правило, и SQL
(10) Правильно он их. Видел ты восьмерочника, пользующегося прямыми запросами?
(11) Видел… в зеркале 😉
(12) Это был не восьмерочник. Не примазывайся к младому поколению с девственными мозгами. 🙂
(13) Ну, если честно, это и не одноэсник был 😀
(5) Еще раз спасибо за подробные комментарии. Все работает.
(15) FERMER111,
🙂
Выкладывай прицепом DBF-ку со своими добавлениями, пусть растет и ширится.
Если будет слишком большая, можно будет разбить на несколько файлов по диапазонам штрихкодов.
Например:
DBF№1 содержить кода от 8000000000000 до 8100000000000
DBF№2 содержить кода от 8100000000001 до 8200000000000
и так далее…
После Ваших инструкций — выложу с удовольствием, правда у нас не так много, пытаемся все настроить. Переходим на автоматизацию поэтапно. Кстати, хозяйственная база тоже была бы очень кстати. Сейчас пытаюсь договориться с поставщиками о таком обмене.
(17) FERMER111,
Прицепляю к этому сообщению DBF-ку со штрихкодами хозяйственного магазина: 19785 записей.
Есть еще базы с одеждой и оптикой (очки, линзы).
И снова — СПАСИБО! За хозмаг. Может еще посоветуете что-нибудь в таком вопросе: существует магазин хоз-строй товары. Заведена номенклатура в УТ 10.3, но товар не отштрихован. Сейчас планируем автоматизацию. Как упростить ввод штрихов? У меня мелькает мысль о том, что плюнуть на старую базу (очень много ошибок в наименованиях, много задвоений и т.п.), взять, скажем, Вашу базу, может быть базы поставщиков и завести все сначала через ввод остатков. Или проще будет привязка штрихов к сущ. номенклатуре. Наименований около 2500 включая многое в ассортименте.
(19) FERMER111,
Может в твоей ситуации немного облегчит жизнь вариант, когда ты будешь вводить штрикода сразу в регистр, а не через справочник. Открываешь меню Операции/Регистры сведений/Штрихкоды.
Открывается регистр Штрихкодов, нажимаешь «добавить новый элемент», указываешь тип штрикода (обычно EAN13), вводишь сам штрикод, выбираешь номенклатуру и если нужно, то характеристику и серию.
Чтобы не вводить вручную с клавиатуры цифры штрихкода, можно настроить сканер штрихкода на режим работы «в разрыв клавитуры» (позволяют не все сканеры) и НЕ подключать его через Сервис/торговое оборудование. Тогда считанный штрихкод будет ввиде цифр вводится в то поле, которое ты предварительно выделишь мышкой.
Наверное, такое вариант будет пошустрее работать, чем через справочник Номенклатура, или стандартную обработку «Обработки.ИдентификацияШтрихкодов».
Да, попробовала, здорово. Век живи, век учись. Хочу сейчас приобрести терминал сбора данных, пока представляю только теоретически что это за штука такая. Но надо осваивать и это. С компом по магазину не побегаешь.
FERMER111,
Ну смотря какой магазин, я себе сделал удлинитель на 10 м., склад небольшой пока хватает.
Вопрос по поводу обработки, как ее закинуть в 7.7 ТиС 9.2 ?
Автору спасибо.
При попытке записать найденный элемент пишет
Перед записью в элементе справочника «Номенклатура» необходимо заполнить «вид номенклатуры»!
хотя вид номенклатуры выставлен правильно по справочнику единиц измерения (стоит шт)
(23) вид номенклатуры — это не единица измерения!!!
Да точно, спасибо.
Но номенклатуру все равно не добавляет.
Кроме того заменил в документе ПоставлениеТоваровУслуг функцию СШКНеизвестныйКод на предложеную автором, но все равно открывается обработка ИдентификацияШтрихкодов, наведите в правильное русло=)
И еше автор пишет Для 1С77 прилагаю фрагмент кода, по нахождению нужной записи в моей базе товаров:, если можно поподробней как эту обработку к 7.7 привязать?
в 8_2_14_439 можно внешние источники данных — типа этой автономной ДБФки подсоединять и отображать и прочее типа как штатно…
у меня стоит 8.1.15.14, может быть изза версии?
А можно файлики еще где-нибудь выложить, а то скачать не получается(
Здравствуйте.
А работает ли эта база на 8.2 ???
а если в SQL это залить?
Подскажите есть ли ветка в форуме по этой обработке и базе??
Добрый день, hrom.
У меня есть несколько вопросов по базе продуктов:
1. В базе данных содержатся розничные или оптовые товары?
2. Товары однозначно идентифицированы названием? То есть может быть товар «Кисель», но это может быть как напиток в жидком состояние, так и в порошкообразном.
3. Есть ли возможность получить хотя бы только штрих-коды, чтобы понять на сколько данная база мне подходит.
О! Ещё забыл вопрос задать.
В базе товары только Российского производства или импортного тоже?
Как скачать базу? За 50 рублей? Но какой смысл ложить сюда 500 стартмани если нужна только база. Как положить 500 стартмани????
Прошу прощение как положить 50!!!? стартмани.
Есть ли возможность выборочно проверить наличие штрих кодов в базе?
Здесь готовая базаEan-13 все о потребительских товарах штрих-кодов, с API, которое подходит для 1С. 10млн. записей.
Конечно база не плохая, но названия товаров как всегда хромает….
То кавычки с пробелами, то названия корявые…
Нет единого стиля написания названия товара.
Почему бы не взять и написать
1. Вид товара
2. Название товара
3. Упаковки и ед. измерения
4. Производитель
Получилось бы например Пиво Жигулевское 4% 0,5л Москва
И сразу и искать проще…
А то даже ж/б у Вас пишется и так и жб
Обновил базу супермакета до 290777 записей.
Написал пример обработки для УФ.
киньте пожалуйста обработку и базы на почту valikvv@rambler.ru
(39) привет, напиши мне на почту shadow.skens@hotmail.com
Как связаться с автором этой темы? Срочно!!!