В помощь товароведу. Простые отчеты для 1С:Торговля и склад 7.7




Принцип обмена данными из 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='\

36 Comments

  1. cs25

    В своё время скачал «Простые отчеты для бухгалтера» непосредственно с сайта. Очень понравилось — простота и наглядность выводимых данных. Теперь плюсую «В помощь товароведу» !!!

    Reply
  2. Abadonna

    >Впрочем, посмотрю… 🙂

    Сладкого лишу! :)))

    Reply
  3. O-Planet

    Ни кто не заметил, что я забыл выложить «Прайс в две колонки». Исправил…

    Reply
  4. sirius77

    А какая «фенька» в товарном чеке?

    Reply
  5. O-Planet

    А она там нужна? 🙂

    Reply
  6. Brainman

    Просто он, наверное, имеет в виду чем стандартный товарный чек не устраивает? 🙂

    Reply
  7. O-Planet

    Ы!!! А я чой-то и не знаю, где есть стандартная форма. =) В чеке ККМ видел. А вот что б прицепить к через регистрацию внешних печатных форм — не видел. К тому же у меня форма поцивильнее кажется, чем стандартная. И есть колонка «Скидка»

    Reply
  8. ineoosaki

    >Ни кто не заметил, что я забыл выложить «Прайс в две колонки». Исправил…

    Да вроде ты его раньше выкладывал. 🙂

    Reply
  9. ineoosaki

    Кстати в твоем прайсе цены выводяться за единицу, заданную в справочнике «Цены».

    А остатки показываются за базовую единицу. Это не есть гут. Необходима синхронизация по единице.

    Reply
  10. O-Planet

    Я прайс раньше для бухии выкладывал. А сиххронизация быть должна, это точно.

    Reply
  11. CheBurator

    ..глаз да глаз нужен…

    Reply
  12. O-Planet

    Добавил обработку 8

    Reply
  13. rka

    Альтернативная установка цен номенклатуры.

    Необходимо добавить проверку на приходные документы. Если прих. документ ВводОстатковТМЦ то выдается ошибка, т.к. у него нет поля ТипЦены.

    Reply
  14. O-Planet

    Ок. Будет время — сделаю. У нас там база переделана немного, и во вводе остатков есть тип цен 🙂 Поэтому не наткнулся.

    Reply
  15. reel

    За «Альтернативную установку цен номенклатуры» +1. Дешево и сердито 🙂

    Reply
  16. Gendalf

    Прайс для Торговли.. проверку измени при фильтре (Без нулевого кол-ва)… в прайсе не должно показываться остаток со знаком «-«…. 😉 всякое бывает в торговле

    Reply
  17. homkadron

    Очень нужные вещи

    Reply
  18. Khaliff

    при запуске:

    ОШИБКА! В справочнике типов цен некорректное наименование: «Закупочные до августа»!

    Reply
  19. Khaliff

    это насчет Установка_цен_на_товары.ert

    Reply
  20. DenisPDN

    Пытаюсь использовать «Быстрый ввод товаров». Вроде, сделал всё, как написано.

    При попытке использовать выдает:

    ОбработкаПодбора<<?>>(Параметры,»»);

    {Документ.ПоступлениеТМЦ.Форма.Модуль(618)}: Процедура не обнаружена (ОбработкаПодбора)

    Помогите, пожалуйста, разобраться.

    Reply
  21. O-Planet

    (20) А какая версия ТиС? Может, именена просто?

    Reply
  22. DenisPDN

    (21) Платформа 027, ТиС 7.70.958. Пробовал в Demo-базе.

    При запуске «Поступление ТМЦ» сразу вылазит данная ошибка.

    Если в добавленном коде закомментировать строки:

    // Если Параметры.Получить(«Готово»)=»Ок» тогда

    // ОбработкаПодбора(Параметры,»»);

    // КонецЕсли;

    то документ запускается и обработка, вроде, работает. Но все товары, набранные в данной обработке не появляются в самом документе «Поступление ТМЦ».

    Reply
  23. DenisPDN

    (21) Да, забыл написать, всё это работает в Vista (если это может повлиять).

    Reply
  24. tria_com

    у меня та же ошибка, W-XP

    Reply
  25. CheBurator

    (2) обработкаподбора() в типовой ТиС в ПоступленииТМЦ() находится в районе 1500 строки.. так что попытка сослаться на эту процедуру в 618 строке — совершенно оправданно вызывает ошибку…

    Reply
  26. CheBurator

    для исправления данной ошибки процедуру поКнопкеТовары() следует разместить сразу после штатной процедуры ОбработкаПодбора() — почти в самом конце модуля формы документа ПоступлениеТМЦ

    Reply
  27. O-Planet

    (26) Спасибо!

    Reply
  28. DenisPDN

    (26) Большое спасибо!

    Reply
  29. CheBurator

    (27) ну у меня в профиле спасибочный кошелек присутствует 😉

    Reply
  30. platinum

    По обработке «Установка цен на товары» хорошая обработка,даже бухам показал,но один вопрос,а как им изменить округление цен до десятых или сотых вынудил на тот момент отказаться от этой обработки и работать с типовой. Не знаю,возможно, ли еще вам доработать ее с округлениями, как это сделано в типовой,то и ваша бы обработка пригодилась.

    И неплохо было видеть сразу в обработке какие цены были и какие стали,например, если розничная=закупочная+5% то видеть и закупочную,т.е. базовую цену от которой происходит расчет.

    Reply
  31. kalitwa

    (27) Доброго Вам дня. У меня вопрос автору. Мне необходима ИНВ-3 для ТИС. Но только есть малюсенькая проблема. Мы на точки товар отпускаем в коробках, а инв-3 нужна в килограммах, на конец месяца. Вообщем остаток д.б. пропорционально сданной выручке. Или в инв-3 д.б возможность ставить количественный остаток вручную, а цена, и отстаток суммовой должен считаться, ну и соответсенносо сумма прописью и кол-во товара тожеть автоматом прописываться. Вы можете такое сотворить и, я понимаю, что это небесплатно. Сколько это будет стоить :-). заранее благодарна.

    Reply
  32. bes-kkm

    Кто-нибудь прбовал альтернативную установку цен? Работает в Торговле и склад?

    Reply
  33. Dinkin

    Мною лично использовалось несколько обработок скаченных либо здесь либо с сайта. Все отлично работает. Бесмысленной обработки здесь нет вообще. Автору спасибо, за то что выложил. Будем ждать новых идей.

    Reply
  34. alexism

    Автору спасибо! Думаю, что пригодится в повседневной работе.

    Reply
  35. dimonsky

    Спасибо за обработку! Может пригодится в работе.

    Reply
  36. denn15

    Спасибо, пригодилась.

    Reply

Leave a Comment

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