<?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='\
хорошая идея, молодец!
плюсую за идею
Шаг 4: во втором случае если не было предыдущих пром.итогов, то от начала
(3) Спасибо, поправил.
Небольшое дополнение:
Название «Помощник ввода приходных накладных» выбрано для того, чтобы привлечь внимание простых пользователей 1С:Предприятие. Однако, следует понимать, что обработка может быть подключена к любой табличной части в рамках использования механизма внешних обработок заполнения табличных частей.
Например, можно подключиться к табличной части «Товары» документа «Реализация товаров и услуг» если нужно определить итоговое количество по нескольким позициям или сумму по характеристикам определнного товара. Можно помочь покупателю оставить товары на определенную сумму, объем, вес. Вариантов море!
Если Вы нашли какое-либо оригинальное применение обработке — сообщите об этом в комментариях!
БП 1.6, простой пользователь.
Скажите, пожалуйста, к документу «Отчёт производства за смену» табличная часть «Материалы» также можно подключить ?
Идея интересная!
(5) Конечно можно!
Протестировал на УПП, скриншот в файле.
Обнаружен небольшой баг при инициализации обработки, просьба скачать новую версию 1.01.
В сильно переделанной УПП в «Отчёте производства за смену» таб. часть «Материалы» подключилась, но выдаёт ошибку:
«Заполнение ТЧ не произведено! Поле объекта не обнаружено (Товары)»
В БП не подключается. Попробую новую версию.
Результат по обновлённой версии.
«Отчёт производства за смену» таб. часть «Материалы»:
-В УПП работает. Классно.
-В БП не подключается. Зато к таб. части «Продукция» подключилась.
(9) А в БП при подключении ошибку выдает? Может путаница с версиями?
Если к табличной части «Продукция» подключилась, то в форме регистрации внешней обработки достаточно добавить вторую строку принадлежности, где указать тот же объект и табличную часть «Материалы»
Скачать и посмотреть, к сожалению , не имею возможности.
Ориентируюсь По скриншоту. Никак не ожидал такого простого варианта использования строки — «заголовка». Спасибо.
А может быть добавить вариант с деревом значений ?
Тогда бы пользователь получил возможность сворачивать и разворачивать нужные строки. Добавить возможность перетаскивания строк из одной ветки дерева в другую. В дереве проще реализовать и автоматический расчет итогов по ветке .
(11) Креатив прет! 🙂 Возьму на заметку.
полезно! хорошая работа!
(10) Путаницы с версиями нет.
Проверила в ДЕМО (1.6.14.4) – не работает.
В форме регистрации внешней обработки добавила вторую строку с ТЧ «Материалы».
Всё правильно.
В БП (1.6.20.6) при подключении ошибку не выдаёт. Смотрите:
— в ТЧ «Продукция» по кнопке «Заполнить» предлагается стандартное «Установить значение» и «Промежуточные итоги табличных частей».
— в ТЧ «Материалы» по кнопке «Заполнить» стандартное «Табличное поле «Материалы» будет очищено. Продолжить?»
Интересно, что в ТЧ «Услуги» и «Возвратные отходы» при отсутствии данных есть возможность вывода «Промежуточные итоги табличных частей».
(14) К сожалению нет возможности проверить работу в БП. Из комментария и скриншотов делаю вывод, что для табличной части «Материалы» не реализован механизм внешних обработок заполнения ТЧ — нужна доработка конфигурации. Могу взяться.
(12) Не бросайте доработку, Сергей.
Сворачивать и разворачивать нужные строки (11) — класс!
Проверить страницу приходной накладной — свернуть.
И не «ползать» по всему полю.
(16) посмотрю насколько востребованной будет обработка на следующей неделе и решу с доработками. Просто на подходе другое «концептуальное решение» 🙂
обработку не смотрел, но идея хорошая, зачёт 😉
смысл обработки если можно просто вывести список и по кнопке М и М+ смотреть все итоги?
(19) да вариантов подсчетов итогов масса… Можно и одноэску не ставить, все данные держать в амбарной книге и тыкать на калькуляторе М и М+.
Цель не просто посчитать итоги. Цель — отображать их пользователю постоянно, динамически перерасчитывать при изменении данных в табличной части. Ну и сравни дружелюбность подхода своего и предоставленного при наборе документа, скажем в 1000 строк: в обработке нашел нужную строку, нажал Ctrl+Space, посмотрел… сходится? пошел к следующей строке. Удобно? Или лучше 1000 раз нажать кнопку М+, 1000 раз спозиционироваться на очередной ячейке (а если данные сверяем по двум колонкам, то 2000(!) раз на каждую из кнопок), ну и никто не даст горантии, что при подсчете итогов ты не пропустишь каку-нибудь строку…
Тогда уж проще вывести список, сохранить в Excel’е и там подвести итоги.
Ну и напоследок: обработка — демонстрация механизма, наибольший эффект наблюдается при встраивании механизма в конфигурацию и отображении итогов непосредственно в форме документа.
1000 раз нажимать не нужно, если в списке выделить значения в колонке с 1й строки по N (типа первая страница) нужно нажать один раз M и все значения сложатся в буфер, дальше М+ для каждой последующей страницы
тоже самое что и ctrl+space
цель сверить с пф, так вроде для этого постоянно отображать итоги не нужно.
1. Для множественного выделения строк в типовых конфигурациях требуется их изменение;
2. При изменении данных требуется пересчет итогов;
3. Воспользуемся обработкой в документе «Реализация товаров и услуг»: к нам пришел клиент и набрал товаров по четырем группам номенклатуры. При оплате выясняется, что у него не хватает денег и он просит изменить документ, чтобы по первой группе было не более такой-то сумы, по второй — лругая сумма и т.д. Если использовать обработку — задача решается очень просто, повышается оперативность. Повышается оперативность — повышается конкурентоспособность 🙂
К плюсам твоего подхода могу отнести:
1. Использование встроенных возможностей;
2. Тренируется память 🙂
1. нет, для множественного выделения строк достаточно нажать правой кнопкой и вывести список в табличный документ
2. подразумевается что ввел и сверил один раз. второй раз только при наличии ошибки
3. надуманная ситуация
тем не менее судя по комментариям обработка кому то может пригодиться, просто у меня ощущение что только тем кто не до конца понимает встроенные возможности.
в конторе, где накладные больших размеров вбиваются вручную, особенно радует это в УПП — упоминалось выше — надо кого-то сменить — или дирижера или режиссера… хотя, конечно, на общий конечный результат это практически никак не повлияет… закон такой практически выведенный — результат работы не меняется от количества вложенных вусилий…
(24) Ты клонишь к этомуЗагрузка приходных накладных, заказов, прайсов из Excell ? 🙂
однако забивать накладные за оператора нах надо, так и на голову сядут свесив ножки
идея хорошая, плюсую
(20) Сергей, а для 7.7 такой подарок сделать можно? Очень нужная вещь! Или этот столик (7.7) уже не обслуживается?
По 7.7 работаю, но от OpenConf’а два года как отошел и вспоминать не очень охото 🙂
Могу перевести Вас на восьмерку, думаю это проще.
Здорово!. «+».