<?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='\
Мне пришлось это делать. Взял в качестве основы пример из книги, кажется, Митичкина и помощь на форуме, отображал остатки в форме справочника.
А вот использовать готовую обработку — это остроумно.
Я с ней возился, но вот не догадался запускать отдельно, пытался взять часть кода и подставить в модуль формы списка Номенклатура.
Расскажите, плз, как Вы вызывали эту обработку.
Хорошее решение. Наглядно и удобно.
(1)Я ее не вызвал, а сделал свою внешнюю и ее просто запускаешь и видишь остатки и цены, она сворачивается в правую панель и не мешает работать и всегда под рукой.
Бух на складе ей не нравится 8 ка, привыкла к 7 ке вот и пришлось придумать инструмент чтобы оперативно видеть остатки и цены
(3) Я имел в виду, какие нужно переделки сделать по сравнению с модулем внешней обработки, чтобы ее можно было штатно запустить как внешнюю обработку.
Какие параметры передаете?
(3) перечитал (4), поправляю:
Я имел в виду, какие нужно переделки сделать в существующем модуле обработки подбора.
Если этот модуль попросту перенести во внешнюю обработку, наверное, будут ошибки?
Какие параметры и как передаются в сделанный Вами модуль внешней обработки?
Где описаны принципы построения внешних обработок, желательно с примерами?
(5)конечно будут ошибки вот задача и была переделать так чтобы все работало чтобы все запросы выполнялись в кратце описать сложно
Берете сравниваете с типовой и все отличия будут видны в отчете
Для УТ неплохо бы такую же.
(6) Спасибо!
В какой конфигурации делали?
Сложно было разобраться, как подставить свои параметры?
Как разбирались (отладчиком, читали вызов из Счета или Накладной и т.п.)
(7) В УТ это — стандартная форма подбора.
(6) Номер релиза, пожалуйста!
(10) В описании указано
1С:Предприятие 8.1 (8.1.12.101) Бухгалтерия предприятия, редакция 1.6 (1.6.13.3)
(9) В УТ и УБ одинаково есть форма подбора, просто не удобно ее вызывать, обязательно из документа надо, а здесь запуск обработки она задает параметры для запросов в форме.
(8) я когда делаю не думаю сложно это или нет, просто делаю все последовательно у каждого запроса параметры должны быть определены, а какие значения в них передать это дело техники.
(11) — (10), извините, был невнимателен, спасибо.
Хорошо, я сравнивал модули объекта стандартной ОбработкиПодбора и Вашей обработки.
Модуль объекта почти не изменялись, менялись только модули формы?
Был вопрос, где Вы брали Организацию, потом увидел, что она и др. параметры выбираются в форме. Это очень удобно.
У меня маленький вопрос, если можно.
Я сохранил обработку подбора как внешнюю обработку, потом попытался ее открыть. Получил сообщение об ошибке.
Какая функция Вашей обработки вызывается первой? Модуля объекта или формы?
(Просто немного неясно, каким образом происходит вызов внешник обработок, какие передаются параметры, где почитать о написании внешних обработок).
Спасибо! Очень красивое решение!
(12) на диске ИТС есть описания создания внешних обработок
удобно, а это уже не мало
Kak-to ne pošlo versija 10.3 ,pišet:
{Форма.ОсновнаяФорма(673,22)}: Переменная не определена (УправлениеПроизводством)
Спецификация = <<?>>УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(ВыбСтрока, ДатаРасчетов);
{Форма.ОсновнаяФорма(703,22)}: Переменная не определена (УправлениеПроизводством)
Спецификация = <<?>>УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(Номенклатура, ДатаРасчетов);
Эта обработка для БП, а не для УТ!
Удобно та быстро .)
А у меня вот такая ошибка возникла….
{Форма.ОсновнаяФорма(680,12)}: Переменная не определена (Ценообразование)
Цена = <<?>>Ценообразование.ПолучитьЦенуНоменклатуры(Номенклатура,СтруктураИсходныхПараметров.ТипЦен, ДатаРасчетов, ВалютаЦены);
{Форма.ОсновнаяФорма(707,12)}: Переменная не определена (Ценообразование)
Цена = <<?>>Ценообразование.ПолучитьЦенуНоменклатуры(Номенклатура,СтруктураИсходныхПараметров.ТипЦен, ДатаРасчетов, ВалютаЦены);
(18) какая конфигурация у вас?
1С:Предприятие 8.1 (8.1.12.101) Бухгалтерия для Казахстана, редакция 1.5, (1.5.8.12)
(20) Тестировалось на обычной 1С:Предприятие 8.1 (8.1.12.101) Бухгалтерия предприятия, редакция 1.6 (1.6.13.3) все работает
для казахстана у меня нет такой конфы
Жалко,а так нужно…плохо(((
Очень удобно! Спасибо! Плюс!
(20) У меня такой нет так что ни чем помочь не могу
Очень удобно, то что нужно было
Отличная обработка! Спасибо!
Здорово!Спасибо! очень облегчило работу!
Очень удобно!!!!Замечательно! Спасибо большущее, что поделились :)!!!
А для 1С упрощенки 8.1 подходит? А то запускаю — выдает показанную на скриншоте табличку, а ни товарного остатка, ни цены- нет…
В Предприятие 8.1 этого так не хватает…
Огромное спасибо!
Так данная информация же по остаткам отражается при оформлении реализации или перемещения
{Форма.ОсновнаяФорма(680,12)}: Переменная не определена (Ценообразование)
Цена = <<?>>Ценообразование.ПолучитьЦенуНоменклатуры(Номенклатура,СтруктураИсходныхПараметров.ТипЦен, ДатаРасчетов, ВалютаЦены);
{Форма.ОсновнаяФорма(707,12)}: Переменная не определена (Ценообразование)
Цена = <<?>>Ценообразование.ПолучитьЦенуНоменклатуры(Номенклатура,СтруктураИсходныхПараметров.ТипЦен, ДатаРасчетов, ВалютаЦены);
вот такая вот ошибка вылезает
(33) А конфигурация какая у вас?
8.2 комплексная — не работает. Ни одного остатка…
(35) ну ведь написано же в описании для Конфигурации: 1С:Бухгалтерия 8
зачем писать что не работатет там где не должно работать
Спасибо, удобно и быстро
Спасибо, полезная обработка
В 2.0 работает, СПАСИБО!!!
Спасибо.