<?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='\
Особо достали продавцы подобных тучек… 👿
идея и в правду не претендует на гинеальность -))
к практике : 2 фирмы одна чаше всего опт другая розница
с оптом все понятно , розница торует , дадо продавать потом самому себе
Да я увидел что можно заполнить дифицитом , но рекомендую добавить заполниь по документу ОтчетоРозничныхПродажах -))
да и зачем СводНажатие ?
да но однозначно +
… но рекомендую добавить заполниь по документу ОтчетоРозничныхПродажах
Данный вариант требует предварительно передавать товар на Розничный склад, т.е. до факта продажи регистрируемым ОтчетОРозничныхПродажах требуется формировать перемещение с ценами. В моей практике попадались в основном случаи, когда наличие двух Организаций определялись типом клиентов (одна Организация продаёт с НДС, а другая без НДС), и соответственно видами оформляемых документов. Никто из Заказчиков не хотел формировать полноценный Розничный склад.
Хотя, если считать Ваш вариант достаточно распространённым (я лично не знаю примеров), то по просьбе конкретного заказчика можно подправить.
Поставил + за возможность скачать бесплатно.
Посмотрел — прекрасная обработка .Есть все что надо. В УТ 10.3.13.2 — работает.
Единственный недочет не отрабатывает учет по сериям номенклатуры.
(6) 1C82,
В моём случае учёт по серия не прижился. Однако, по просьбам заказчика могу дорисовать. Или, в связи с открытостью кода, это могут сделать другие…
В частности, похоже мне придётся дописывать обработку, для формирования комплекта перебросочных накладных к отдельным Расходным накладным (т.е. восстановление Цепочки Фискальных документов)…
Здорово!!! Просто отлично! Сэкономлено куча времени, осталось только допилить под свои нужды
+ код открыт!
Спасибо, коллега!
(2) Tarlich, Возвращаясь к обсуждению алгоритмов заполнения…
С юридической точки зрения, при передаче товара в Розничный магазин (Склад НТТ) уже требуется обормлять продажу! Соответственно, если осуществлять перемещение по Организации собственнику Розничной точки, возникает дефицит Розничной Организации. Соответственно по остаткам Организации можно заполнять фискальные документы перепродажи.
Теперь о Перебросе под отдельную накладную…
Качественная структура переброса потребовала введение доп Реквизита в документ РеализацияТоваровУслуг, пришлось для удобства (заодно и др.целей) ввести реквизит «ДокументОснование». Через него полностью строится цепочка перепродажи. В результате быстро вносятся исправления в фискальную часть Реализации (Перевод собственности).
Я заменю обработку, как только отлажу код под УТ_10.3…
Спасибо1 Лично меня особо порадовала возможность пересчета по складу! Ну и открытый код!!!!! пригодится:)
у меня на 10.3 (10.3.14.5) почемуто не захотела запустится
приблуда
для клиентов 105-й статьи НК
V.Nikonov, спасибо!!
Обработка нужной оказалось, правда пришлось немного переделать под себя, под измененную УТ 10.3. Спасибо.
(1) обработка хороша, но для взлета не хватает функций общего модуля «ОбщийЮнион» — таких как ДвиженияПродажиПроизводителям , УстановитьСвойствоОбъекта , НайтиПодчиненныйДокумент , ПолучитьСобственнуюОрганизацию , ПолучитьСобственногоКонтрагента
Может автор выложит в общий доступ?
(16) Одинец, Есть другой вариант (без признака НеТиповая).
Вариант для нетиповой придется допиливать под свою конфу и частично исправлять свою Конфу УТ10.3.
1) ПродажиПроизводителям — нетиповая фишка нашей конфы (Формирует регистр похожий на регистр «Продажи», но содержащий данные для отчетности Производителям). Рекомендую удалить.
2) УстановитьСвойствоОбъекта — выложено в других моих наработках (см.
3) Прочие функции выложу позже…
Добрый день.
Данная обработка для 1С 8.2 УТП для Украины будет работать? Как купить?
(18) kachmar06, Не имею возможности проверить… т.к. нет образца конфигурации. Но подозреваю, что метаданные существенно совпадают с УТ10, и следовательно должна работать.
Если хотите гарантий, то высылайте образец конфигурации и желаемую методику. Посмотрю и скажу стоимость отладки под Вашу конфигурацию.