<?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='\
Хорошо, но если бы еще и для бухгалтерии подходило, то цены бы не было!
К сожалению в типовой бухгалтерии не реализован механизм обработок табличных частей. Но есть выход из этой ситуации. Эту обработку можно запустить как обычную внешнюю обработку и в открывшейся форме выбрать уже созданный документ установки цен.
Спасибо.
Скажите, как происходит синхронизация номенклатуры? Можно ли загружать из произвольных Excel-файлов (прайс-листы поставщиков)?
(4) Rom_Kat,
В текущем варианте обработки загрузка новой номенклатуры не производится, только поиск по коду справочника.
Как правило, эта обработка используется следующим образом:
1. Выгружаем из программы уже существующую номенклатуру любым доступным способом в Excel. Единственное условие: обязательно наличие трех колонок «Код»,»Наименование»,»Цена» для варианта загрузки без характеристик номенклатуры и четырех колонок «Код»,»Наименование»,»Характеристика»,»Цена» для варианта загрузки с характеристиками. Часто выгрузка осуществляется через контекстное меню «Вывести список» табличной части уже существующего документа установки цен.
2. Выгруженная таблица редактируется менеджером по ценообразованию, проставляются нужные цены.
3. Производится обратная загрузка отредактированного списка в новый документ установки цен.
Спасибо. Подскажите как корректно отключить контроль уникальности по коду при загрузки файла в табличную часть, мне нужно только по наименованию.
Похоже получилось
для Процедура ЗагрузитьCХарактеристиками(Парам) закоментировал:
//КодТОвара = Сокрлп(Строка(Лист.UsedRange.Cells(Ном,1).Value));
//ЕСли КодТОвара=»» или ИмяТовара=»» или ЦенаТовара=»» тогда
// Сообщить(«Не заполнены обязательные параметры в строке » + Строка(Ном) + «, код товара:» + СокрЛП(КодТовара) + «, имя товара:» + СокрЛП(ИмяТовара) + «, цена:» + СокрЛП(ЦенаТовара));
// Продолжить;
//КонецЕСлИ;
//КодТовара=СтрЗаменить(КодТовара,» «,»»);
//Пока СтрДлина(КодТовара)<11 Цикл
// КодТовара=»0″+КодТовара;
//КонецЦикла;
//| И Номенклатура.Код = &Код
//Запрос.УстановитьПараметр(«Код»,КодТОвара);
И для Процедура Загрузить(Парам) Закомментировал:
//КодТОвара = Сокрлп(Строка(Лист.UsedRange.Cells(Ном,1).Value));
//Если КодТОвара=»» или ИмяТовара=»» или ЦенаТовара=»» тогда
// Сообщить(«Не заполнены обязательные параметры в строке » + Строка(Ном) + «, код товара:» + СокрЛП(КодТовара) + «, имя товара:» + СокрЛП(ИмяТовара) + «, цена:» + СокрЛП(ЦенаТовара));
// Продолжить;
//КонецЕсли;
//КодТовара=СтрЗаменить(КодТовара,» «,»»);
//Пока СтрДлина(КодТовара)<11 Цикл
// КодТовара=»0″+КодТовара;
//КонецЦикла;
//| И Номенклатура.Код = &Код
//Запрос.УстановитьПараметр(«Код»,КодТОвара);
Есть еще одна просьба, как бы доработать обработку чтобы при наличии нескольких столбцов в Excel с ценами, они загружались в табличную часть документа «установка цен номенклатуры» при выборе более одного типа цен.
К сожалению обнаружилось следующее в 1с8.2 УТ :
в документе установка цен номеклатуры, выбрав тип цен, загружаю таблицу из файла EXcel, сохраняю, после этого в этом документе не возможно загрузить тот же файл, выбрав друго тип цен, а загружает только на первый выбранный.
(9) AlexxxMksv, данная обработка рассчитана на загрузку только первого в списке типа цен. В принципе, не вижу большой сложности доработать ее так, чтобы можно было загружать произвольное количество колонок с ценами. Единственная проблема, это синхронизировать выбранный список типов цен в документе установки цен и колонки с ценами из файла Excel. Думаю это вполне возможно, если колонки с ценами озаглавить наименованиями типов цен и при загрузке из файла соотвествующим образом заполнять колонки цен в табличной части.
Да спасибо, я как раз собираюсь это сделать, нашел где регулируется номер столбца:
СтрокаТабличнойЧасти[«валюта»+»0»] = РУбли;
СтрокаТабличнойЧасти[«валюта»+»1»] = РУбли;
Надеюсь вы не против если я возьму вашу обработку за основу?
(11) AlexxxMksv, буду рад, если моя обработка поможет вам в работе.
Хорошая обработка, спасибо! очень выручили!
Удобно использовать, для записи себестоимости, в КА, после загрузки документов оприходования.
(13) Psiheya, рад, что обработка вам пригодилась.
(14) Можете отправит мне на почту а то у меня на счету не хватает баллов для скачивания!
(5) Здравствуйте! Подскажите как настроить обработку, чтобы во вкладке «заполнить» в «установке цен номенклатуры» появились строки «заполнить из файла…». У меня не получается. 1С 8.2 УТ 10.3
Обработку необходимо сначала сконвертировать из 8.1 в 8.2, а потом добавить в справочник Внешние обработки с типом «Обработка табличной части», в табличной части указать принадлежность к типу документа «Установка цен номенклатуры».
будет ли работать на платформе 8.1 конфигурация управление торговлей «Управление торговлей», редакция 10.3 (10.3.13.2)?
(18) bes-kkm, Именно для этой конфигурации и создавалась эта обработка
(19) Доброго времени суток!
Я так понимаю данная обработка подходит для КА редакции 1.1? Ваша обработка загружает один тип цен? Как должны быть расположены колонки,чтобы все прошло удачно?
Заранее спасибо!
(20) MyPuK_OLD, Да эта обработка загружает один тип цен. Выше я уже писал, что не вижу проблем доработать ее так, чтобы можно было загружать их Экселя сразу несколько столбцов с ценами. В коде даже есть некоторые заготовки под это.
Для успешной загрузки, экселевская таблица должна содержать 3 колонки: код товара из 1С, наименование товара, цена. Загрузка начинается со второй строки.