<?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='\
{Форма.Форма(15,9)}: Процедура или функция с указанным именем уже определена (ОписаниеПериода)
Функция <<?>>ОписаниеПериода()
{Форма.Форма(41,20)}: Недостаточно фактических параметров (ОписаниеПериода)
ОписаниеПериода = <<?>>ОписаниеПериода();
Выдает при старте в УПП 1.2.3.1
Поменял имя функции на ПолучитьОписаниеПериода()
Спасибо, все работает. В нашей базе таких вещей не обнаружено!
Везет вам, а я в месяц 5-20 случаев таких имею.
Скриншоты были бы полезны.
У нас РИБ с миграцией наборов записей регистров, подчиненных регистраторам, без миграции самих регистраторов. Так что не всегда нужно удалять такие записи.
У меня пишет «ничего не нашли», хотя биты ссылок куча, открывая регистр их вижу…
Так может битые справочники?
(7) нет, именно регистраторы… косяк был из-за того, что я дату окончания в обработке не задал… теперь показывает…
{Форма.Форма(186)}: Ошибка при вызове метода контекста (Выполнить): {(6244, 63)}: Синтаксическая ошибка «)»
РПриходПерсоналаПоИсточникам.Период МЕЖДУ &НачДата И &КонДата<<?>>)
Результат=Запрос.Выполнить();
по причине:
{(6244, 63)}: Синтаксическая ошибка «)»
РПриходПерсоналаПоИсточникам.Период МЕЖДУ &НачДата И &КонДата<<?>>)
1C УСО 1.2.19.3
Спасибо вам, используем в УТ 8.1. уже год, просто спасает, так как иначе проведение по партиям просто не проходит.
Процедура КоманднаяПанель2ДействиеСнятьФлажки(Кнопка)
СписокРегистров.ЗаполнитьПометки(Ложь);
КонецПроцедуры
строка (100)
Если ТекстИЗ=»» Тогда
Сообщить(«У регистра <«+Регистр+»> пустой список регистраторов. Пропускаем.»);
Продолжить;
КонецЕсли;
Для какой версии платформы написана?
Для 8.0, но работает и на 8.1
в 8.1 надо сделать переконвертацию обработки, затем подправить
….Если ТипЗнч(Выборка.Регистратор) = Тип(«ДокументСсылка.КорректировкаЗаписейРегистровНакопления») Тогда…..
на
….Если ТипЗнч(Выборка.Регистратор) = Тип(«ДокументСсылка.КорректировкаЗаписейРегистров») Тогда…..
очень помогла!
Офигеть условие : «Если НЕ (НеЗаполнятьНастройкиПриОткрытии = Истина) Тогда» мозг сломаешь…
слабо было написать «НеЗаполнятьНастройкиПриОткрытии = Ложь» или просто
«НЕ НеЗаполнятьНастройкиПриОткрытии»?
А еще лучше переменную изначально назвать «ЗаполнятьНастройкиПриОткрытии»
(15) а в чем проблема? Нормальное условие.
Условие «Если НЕ <ВозможноБулево> Тогда…»
вызовет исключение при несоответствии типа
Условие «Если НЕ <ВозможноБулево> = Истина Тогда…»
будет работать при любых типах «ВозможноБулево»
У меня тоже так сложилось — использую только «=» и условия на истину.
Все остальное в иначе.
Как по мне — так «читать» легче 🙂
Не хватает поиск по РБ и поиск по измерениям и субконтам
Не смог при запуске выбрать «Регистр сведений: Расчет списания расходов будущих периодов» — нет в списке регистров.
И мне пригодилось спустя пять лет..
спасибо))
мега крутая обработка)))
ооочень помогла)))
Классная штука! У нас распределенная база данных и соответствующий обмен… Косяки всегда есть… А это обработка здорово все подчищает… Нам помогает ))))
Полезная вещь. разобрал как работает кое-что для себя понял.
Спасибо! Внедрение системы. Приходится перезаливать данные . Здорово помогает, подчищает разные косяки.
спасибо, очень помогло
Спасибо… очень полезная штука )
Подскажите как ее запустить чтоб она сделала обработку, ни как не могу понять.
(26) yzk-almaz, В чем именно проблема?
При снятии пометок ошибка
{Форма.Форма.Форма(275)}: Поле объекта не обнаружено (Значение)
СписокРегистров.Значение.ЗаполнитьПометки(Ложь);
спасибо за сэкономленное время =)
Интересная штука нужно попробовать поискать в своей базе
Обработчик прерывания было бы неплохо поставить
Хватай + за труд. всё работает. Спасибо
Всё работает! Красивый запрос.. спасибо
Проверю. Похоже, то что нужно, ибо объекты восстанавливать на надо, а движения болтаются)
Спасибо! Вовремя нашлась эта обработка! Сэкономило кучу времени!
На не типовых конфигурациях вываливается в ошибку, когда пытается проверить на тип документа «КорректировкаДвижений» как-то так называется. Возможно, эту проверку стоит включить в Попытка Исключение.
(36) mr.Kot, Ругается так же на тип документа «КорректировкаЗаписейРегистровНакопления» (или сведений) в типовой УТ 10.3. Просто раньше такие документы были, а теперь один единый — «КорректировкаЗаписейРегистров». Просто исправить надо имя регистратора в тексте и никаких попыток.
Спасибо, пригодилась!
Отдельное спасибо за бесплатность )
В регистрах, в регистрах.. Скачал, но регистров БУХГАЛТЕРИИ там и в помине нет. А жаль. Нужно писать конретнее дабы люди не тратили время впустую и стартмани.
Спасибо, обработка пригодилась.
Автору: будете ли обновлять обработку?
В наличии минимум 2 проблемы:
— при незаполненном периоде отчет всегда выдает пустой результат (переработать условия в запросе)
— необходимо добавить проверку на наличие документа КорректировкаРегистров. Например так:
И одно пожелание
— добавить в обработку регистры бухгалтерии и регистры расчетов
Качественно
А как насчет записей у которых регистратор не «Объект не найден», а вообще пусто?
Спасибо, помогло!
(43) alexnecro, такое возможно? Если регистр подчинен регистратору, то такого по-идее не должно быть.
А вообще у меня вопрос, ТиИ базы разве не дает тот же эффект с правильно выбранными настройками? Или в 2009 году платформа такого не умела? =/
Спасибо огромное. Очень помогло.
Спасибо!
а на 8,2 такое есть?
В подсистеме «Инструменты разработчика»
1. Есть инструмент «Подбор и обработка объектов», который позволяет отобрать и удалить строки выбранного регистра по всем битым ссылкам регистраторов.
2. Есть инструмент «Поиск битых ссылок», позволяющий найти все битые ссылки нужных типов во всех таблицах, а затем передать для обработки строки выбранной таблицы с битыми ссылками в инструмент «Подбор и обработка объектов».
Слишком сложный итоговый запрос, если сделать поиск по всем регистрам. СУБД не может выполнить такой запрос.
(50) Да, многие забивают на эту проблему, но не (49). Там работает без проблем на огромных конфигурациях.
Добрый день! Подскажите обработка не работает на конфигурации 1С Розница ?!
(52)эта должна подойти
Хозяйке на заметку: В ЗУП2 не сработало удаление записей из РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций так как срабатывает какая-то подписка на событие и валится в ошибку.
Имеет смысл добавить конструкцию «НаборЗаписей.ОбменДанными.Загрузка=Истина;» или возможность включать её с формы.
На свой страх и риск. Тогда подписки не срабатывают и запись удаляется.
Выдает ошибку
«Тип не определен (ДокументСылка.КорректировкаЗаписейРегистровНакопления)»
Как исправить
При попытке запустить обработку выдается сообщение «Нарушена целостность структуры конфигурации». Сделала ТиИ и проверила chdbfl.exe ошибок нет, а запустить обработку не могу… А очень надо почистить один регистр…
(57)
Аналогичная проблема. Как исправить?
Спасибо!!! Выручила очень. Немного поправил для Розницы и взлетела ))).