Печать ценников в 1С:Торговля и Склад 7.7 (8 типов ценников)




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

43 Comments

  1. Арчибальд

    Что нового? Форматы ценников? Или отбор номенклатуры? Чем лучше/проще/быстрее, чем все предыдущие ценники?

    Reply
  2. host_kms

    (1) Форматы ценников, добавлен штрих-код

    Reply
  3. sCHTASS

    > Нажать кнопку Пуск -> Выполнить и ввести команду «regsvr32 D:BASE-1CBARCODE.OCX»

    > вместо «D:BASE-1CBARCODE.OCX», нужно указать ваш путь до компоненты «BARCODE.OCX».

    Не легче в обработке в процедуре ПриОткрытии() прописать нечто следующее:

    Попытка

    КомпонентABC = СоздатьОбъект(«BARCODE.BarcodeCtrl.1»);

    Исключение

    стрИмяФайлаКомпоненты = «BARCODE.OCX»;

    КомандаСистемы(«regsvr32 «»»+КаталогИБ()+стрИмяФайлаКомпоненты+»»»»);

    КонецПопытки;

    Reply
  4. CheBurator

    Проще всего — взять у Трактора алгоритм формирования/отображения ШК без шрифтов и ВК

    Reply
  5. CheBurator

    самый маленький ценник у меня не в пикселях, а вразмерах этикетки типа 32 на 19 мм

    Reply
  6. Tatar_Ed

    ПечНаименование = ТекЭлем.НаименованиеДляЦенника;

    {\SERVER1EXTFORMSPECHATCENNIKOV.ERT(271)}: Поле агрегатного объекта не обнаружено (НаименованиеДляЦенника)

    как быть?

    Reply
  7. host_kms

    (6) Обработка предназначена для 1С:Торговля и Склад 7.7 редакции 9.2, если вы используете отличную от заданной конфигурации, то обработка работать не будет. Проверьте в карточке номенклатуры поле «Наименование для ценника», если у Вас такого поля нет, обработка работать не будет.

    Reply
  8. Alex.Fox

    (7)»…Обработка предназначена для 1С:Торговля и Склад 7.7 редакции 9.2″

    — открваем типовую ТиС 9.2 — к примеру последний(!) релиз 960 — и где мы там найдем «Наименование для ценника»????

    Тогда хотя бы в описании обработки может быть стоит добавить — внесите реквизит в справочник, или другое нименование стоит использовать?

    Reply
  9. Tatar_Ed

    у мена 1С:Торговля и Склад 7.7 редакции 9.2, релиз я думаю не имеет значения. Нет такого поля (наименование для ценника) в наименовании товара.

    Reply
  10. host_kms

    (8)(9) Исправил «Наименование для ценника» на «Наименование»

    Reply
  11. Tatar_Ed

    Нужно добавить возможность выбора фирмы. И если мы выбираем тип цен, то для чего нам снова предлагать выбор справочника? Так же и при выборе ТМЦ. Нужно доделать, может многим пригодиться.

    Reply
  12. host_kms

    (11) Добавлена возможность выбора фирмы для печати на ценнике. Выбор справочника исправлено.

    Reply
  13. sss72

    Спасибо ВАМ большое!! перерыл тут все, корректно заработала только ваша компонента.

    Reply
  14. XYHXYZ

    😀 Спасибо БОЛЬШОЕ!!! Наконец-то получил то, что хотел.

    Reply
  15. arnage40

    Спасибо. То что надо.

    Reply
  16. ekater2003@yandex.ru

    Прошу помощи с установкой, ни хрена не получаеться, если можно пошагово кто-нибудь опишите. 😥 Спасибо!

    Reply
  17. chyxer

    Не выводит на печать, поле товарные ценники пустое, где допустил ошибку подскажите ❗

    Reply
  18. KereberoS

    Форма.Закладки.УстановитьЗначение(2, Врем,?(глМножественныйФильтрЗадан<<?>>(ТаблицаМФ)=1,»(!) «,»»)+»Множественный фильтр»);

    {E:MYDOCPECHATCENNIKOV.ERT(45)}: Функция не обнаружена (глМножественныйФильтрЗадан)

    Форма.Закладки.УстановитьЗначение(2, Врем,?(глМножественныйФильтрЗадан(ТаблицаМФ)<<?>>=1,»(!) «,»»)+»Множественный фильтр»);

    {E:MYDOCPECHATCENNIKOV.ERT(45)}: Неопознанный оператор

    ВыбФирма = глЗначениеПоУмолчанию<<?>>(«ОсновнаяФирма»);

    {E:MYDOCPECHATCENNIKOV.ERT(136)}: Функция не обнаружена (глЗначениеПоУмолчанию)

    глПриСменеСтрокиТаблицыМФ<<?>>(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были

    {E:MYDOCPECHATCENNIKOV.ERT(141)}: Процедура не обнаружена (глПриСменеСтрокиТаблицыМФ)

    НетОш = НетОш * глФильтрПоПеременнойЗапроса<<?>>(ТаблицаМФ, «Номенклатура», ВыбТМЦ, «ВыбТМЦ», ТекстЗапроса, , «СвойстваНоменклатуры»);

    {E:MYDOCPECHATCENNIKOV.ERT(248)}: Функция не обнаружена (глФильтрПоПеременнойЗапроса)

    ПечЦена = глФРМ(Запрос.Цена, ВыбТипЦен.Валюта<<?>>);

    {E:MYDOCPECHATCENNIKOV.ERT(272)}: Недостаточно фактических параметров

    глПриСменеСтрокиТаблицыМФ<<?>>( 0, 1, Контекст);

    {E:MYDOCPECHATCENNIKOV.ERT(403)}: Процедура не обнаружена (глПриСменеСтрокиТаблицыМФ)

    глПриСменеСтрокиТаблицыМФ<<?>>(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были

    {E:MYDOCPECHATCENNIKOV.ERT(417)}: Процедура не обнаружена (глПриСменеСтрокиТаблицыМФ)

    глДобавитьВТаблицуМФ<<?>>(ТаблицаМФ,»Справочник»,»Номенклатура», «Номенклатура», «По номенклатуре»);

    {E:MYDOCPECHATCENNIKOV.ERT(479)}: Процедура не обнаружена (глДобавитьВТаблицуМФ)

    глДобавитьВТаблицуМФ<<?>>(ТаблицаМФ,»Справочник»,»ЗначенияСвойств», «Номенклатура», «По свойствам номенклатуры»);

    {E:MYDOCPECHATCENNIKOV.ERT(480)}: Процедура не обнаружена (глДобавитьВТаблицуМФ)

    Видимо, не совсем уже и универсальная обработка.. 🙁

    Reply
  19. salichow

    Что ето он пишет

    Если глЕстьРеквизитМнЧ(«Номенклатура»,Докум.Вид()) = 0 Тогда

    {Обработка.ПечатьЦенников.Форма.Модуль(390)}: Значение не представляет агрегатный объект (Вид)

    Reply
  20. Толеген

    А можно сделать выбор товара в приходе?

    Reply
  21. ROOTOMSK

    Как вставить штрих код в ценник в 1С:Торговля и Склад 7.7 7.70.877

    помогите pci911@yandex.ru

    Reply
  22. CheBurator

    (21)

    1. цена вопроса?

    2. посмотри как сделано в типовой ТиС 9.2

    Reply
  23. Vadeus

    Опишите пожалуста по подробней как регистрировать BARCODE.OCX» а то у меня вобще пустой лист выходит если можно то на мыло 1c.ru@mail.ru

    Reply
  24. Vadeus
    Reply
  25. reshenie
    Vadeus пишет:

    Опишите пожалуста по подробней как регистрировать BARCODE.OCX» а то у меня вобще пустой лист выходит если можно то на мыло 1c.ru@mail.ru

    В командной строке запустить команду: regsvr32 BARCODE.OCX

    Путь к BARCODE.OCX надо прописать…

    Reply
  26. reshenie
    Vadeus пишет:

    Помогите пожалуста с обработкой никак не могу дать ей толк я не силён в програмировании

    Какая конфигурация используется?

    Reply
  27. shoa77

    все отлично работает.

    Reply
  28. LevSon

    Спасибо, клиентам очень понравился ценник со штрих-кодом среднего размера.

    Reply
  29. BurSer

    Спасибо, пригодится в хозяйстве.

    Reply
  30. AndreyMurom

    Спасибо, очень помогло

    Reply
  31. makkao

    блят!!! ебаные админы, жлобы , нах!!!! ввели какую то валюту сайта!!!! раньше хоть по одной разработке в сутки можно было взять… Пяздой не подавитесь ??? infostart.ru всегда уважал за доступность и помощь в вопросах 1С.

    А ща блеать аж противно заходить на страницу жлобов ! ЖАЛЬ… Ну оч. жаль расставаться с Вашим ресурсом. Удачи Вам и процветания !!! Счастье не всегда в бабле, на своем примере — я всегда делюсь инфой и разными полезностями с остальными юэерами бесплатно и только этому рад, что могу помочь хоть чем-то и хоть в каком-то вопросе…

    Пока ! С уважением Makkao.

    Reply
  32. tipik
    makkao пишет:

    блят!!! ебаные админы, жлобы , нах!!!! ввели какую то валюту сайта!!!! раньше хоть по одной разработке в сутки можно было взять… Пяздой не подавитесь ??? infostart.ru всегда уважал за доступность и помощь в вопросах 1С.

    А ща блеать аж противно заходить на страницу жлобов ! ЖАЛЬ… Ну оч. жаль расставаться с Вашим ресурсом. Удачи Вам и процветания !!! Счастье не всегда в бабле, на своем примере — я всегда делюсь инфой и разными полезностями с остальными юэерами бесплатно и только этому рад, что могу помочь хоть чем-то и хоть в каком-то вопросе…

    Пока ! С уважением Makkao.

    Я с тобой полностью согласен, жлобы

    Reply
  33. kovireshad

    Спасибо, понравились ценники и мне и руководству

    Reply
  34. shustrij74

    Печать ценников Торговля+Склад, редакция 9.2

    скачал файлик раз архивировал вставил

    c:Documents and SettingsUserXPРабочий столторговляDBExtForms\r

    потом в номенклатуре жму вн. ценники выходит тот же самый стандартный ценник

    в ценнике так и не магу разобраться который день сижу

    1 описание -есть

    2 розничная цена

    3 оптовая цена

    4 код товара

    5 дата

    6 штрихкод

    7 картиночка—тоже надо но не так критично

    этикетка штих кд и краткое название

    подскажите кто сможет

    Reply
  35. shustrij74

    спасибо кстати за работу а тут часто на вопросы отвечают ? или денюшку нужно платить

    Reply
  36. shustrij74

    ребяты может кто подскажет вроде не трудный вопрос но не выходит

    Reply
  37. alexk-is

    (34) Наверное, нужно положить в PrnForms

    Может быть это в чем-то поможет

    http://infostart.ru/public/67695/

    Reply
  38. shustrij74

    …ам спасибо за помощь—вроде разобрались запечатало,но

    не хватает одной вещи нужно чтобы в ценнике печаталось оптовая цена и розничная

    если есть кто умельцы добавить только код программный

    в модуле сами подрисуем формы

    спасибо за помощь тем кто откликнется

    и с праздниками 1с знатоки

    Reply
  39. esoldatov

    Спасибо за обработку, сделано отлично…

    Reply
  40. highlander

    Классная и удобная вещь — спасибо!

    Reply
  41. LevSon

    Спасибо, очень нужная вещь для нашей торговой организации оказалась.

    Reply
  42. LevSon

    Самый нужный ценник со штрих-кодами, было бы классно, если бы еще и шртих-код тут же автоматом проставлялся

    Reply
  43. atb123

    отлично

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *