<?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='\
(0) Посмотрите эту работуот Поручика
(1) kompas-dm, такая тоже есть. Но простые пользователи ее не воспринимают обычно.
(1)(2) Эта обработка немного другого назначения и организации, дляобычных пользователей не предназначена.
(2) Отбор по дополнительным свойствам и реквизитам в СКД происходит через ссылку на объект.
Простите, не подскажете где можно взять обработку «Изменение выделенных объектов».
(5) Нигде. Это принадлежность конфигураций на БСП (Управление торговлей 11, Розница 2, УНФ). Копай типовые
(5) petrov_al, Обработка называется «ГрупповоеИзменениеОбъектов». У нее есть один большой недостаток: для того, чтобы добавить ее к нужному объекту, нужно менять конфигурацию.
(4) Поручик, Насколько я знаю, это происходит в том случае, если у объекта в Конфигураторе указана таблица характеристик. Вкладка «данные»- кнопка «Характеристики». Иначе их приходится указывать на вкладке «характеристики» в конструкторе запроса СКД.
Спасибо за работу! Давно искал.
А как настроить отбор, чтобы туда не попали группы, а только входящие в их состав элементы?
(9) chum, поставить отбор по полю родитель. Или поставить отбор по полю «ссылка», вид сравнения = «В группе»
(10) не получилось. В номенклатуре группы, подгруппы и т.п.
«Или поставить отбор по полю «ссылка», вид сравнения = «В группе» «, так в отбор попадают не только элементы, но и группы в которые они входят.
В номенклатуре глубокая иерархия и хочется обработать все элементы входящие в состав глобальной группы.
(11) chum, тогда ставьте еще условие ЭтоГруппа = Ложь;
(12) получилось.
Большое человеческое спасибо!
Мало того что сделал, так ещё и пользоваться научил…
(13) chum, Не за что, обращайтесь
А существует ли групповая обработка регистров сведений??
(15) s_uu, для обычного приложения разработано много обработок.
Нужная вещь.
Сейчас постоянно приходится заходить в режиме обычного приложения, чтобы изменить много реквизитов за раз.
Подскажите какая обработка лучше ваша или Поручика? а то ограничен в средствах для скачивания.
(18) DimanYa, Если вы специалист по 1С, то качайте конечно у Поручика. Она сложнее для понимания, но функций у нее значительно больше.
(2)такое простым пользователям вообще давать нельзя. мало того что «с шашкой на голо…» та к еще и шашка тротиловая 🙂
(20) wunderland, но для спеца вещь незаменимая
Плюсую. Но не хватает в выборе типа объекта ПВХ, Планов видов расчета. Доделайте, если не трудно.
PS. Да и Планы счетов, Бизнес-процессы и Задачи до кучи можно добавить.
Не хватает обработки табличных частей документа, а так все хорошо!
(22) Йожкин Кот, сейчас в отпуске) выйду, добавлю ПВХ и План видов расчета. Бизнес-процессы и задачи потом тоже можно сделать. На счет Плана Счетов: сомневаюсь в необходимости. Что вы хотите там менять групповой обработкой?
(24) Это уже реализовано
Обработка помогла, спасибо!
(24) я ж написал «до кучи» 🙂
практически, в плане счетов групповой обработкой еще ничего не приходилось менять.
Спасибо! Пригодиться.
спс за ПВХ и ПВР!
(29) Йожкин Кот, будьте аккуратнее с ними.
Вещь нужная! Добавьте птичку «Отключить контроль записи».
(31) Alex_E, Что вы имеете в виду?
(32) Иногда надо например сделать групповое изменения в договорах контрагентов (после переноса из 7.7 итп), но изменить их не дает контроль. Если установить при обработке ОбменДанными = Истина — то изменения пройдут, но лучше это сделать отключаемой опцией, потому и написал
.
(33) Alex_E, Сделаю, спасибо за совет. Сам бы никогда не додумался до этого.
хорошая штука. спасибо автору!
в 11.1.2.10 не работает — что то там с правами доступа намудрили
(36) anado, расскажите подробнее: что такое «11.1.2.10». Если выдает ошибку, то копируйте текст ошибки.
(37) это конфигурация «Управление торговли» 11.1.2.10
Конфигурация: Управление торговлей, редакция 11.1 (11.1.2.10) (
Copyright © ООО «1C», 2003-2013. Все права защищены
(
Режим: Файловый (без сжатия)
Приложение: Тонкий клиент
Локализация: Информационная база: русский (Россия), Сеанс: русский (Россия)
Ошибки:
———————————————————————————
08.08.2013 23:02:52
{Форма.Форма.Форма(907)}: Ошибка при вызове метода контекста (ОтменитьТранзакцию)
ОтменитьТранзакцию();
по причине:
Транзакция не активна
Показать
(38) anado, ошибка с неактивной транзакцией моя скорее всего, а
вот про это ничего подсказать не смогу, к сожалению:
{Форма.Форма.Форма(901)}: Ошибка при вызове метода контекста (Записать): Нарушение прав доступа!
на всякий случай:
При двойной щелчке мыши по этому сообщению откроется объект, запись которого не удалась
(39) неактивная транзакция это следствие, ошибки нарушения прав доступа — а эта ошибка присуще всем внешним обработкам, которые изменяют данные (не только вашей) в УТ 11.1.2.10 видимо что-то с правами намутили. Ни одна обработка, которая адекватно работала с документами в УТ 11.1.2.9, теперь не пашет.
Автор а с табличними полями твоя обработка работает, по скриншотам не видно добав еще скринов.З труд спасибо так держать. Заслуженое 5+++++
(40) anado, объясняю ситуацию:
1) Обработка должна изменить 10 объектов в единой транзакции.
2) 7 успешно изменяются, а запись 8-го вызывает ошибку.
3) При этом вызывается метод «ОтменитьТранзакцию()», транзакция становится неактивной.
4) Но обработка продолжала пытаться изменить оставшиеся 2 объекта. Это и являлось ошибкой.
5) Запись 9-го объекта вызвала ошибку. Снова вызывается метод «ОтменитьТранзакцию()», но транзакция уже была неактивна после п.3. именно это и вызвало ошибку:
{Форма.Форма.Форма(907)}: Ошибка при вызове метода контекста (ОтменитьТранзакцию)
ОтменитьТранзакцию();
по причине:
Транзакция не активна
Я внес такую доработку: при выполнении обработки в единой транзакции, при появлении ошибки, обработка прерывается, а потом вызывается метод «ОтменитьТранзакцию()».
P.S. К сожалению, про косяки с правами ничего сказать не могу, т.к. с УТ не работаю.
(41) dyak84, Спасибо! Учту ваше замечание
Спасибо за обработку! Как раз то, что нужно!
(42) потестил 1.5 в УТ 11.1.2.10 при добавлении обработки штатными способами — вываливаются тежи ошибки, но если запускать обработку Файлоткрыть… то всё работает — непонятно, глюк какой то.
З.Ы. Да ещё нюанс при проведении документов надо включать сортировку по дате, по умолчанию стоит по виду документа. Я бы посоветовал исправить, что бы визуальная сортировка не влияла на последовательность проведения документов.
(45) anado, с первым попробую воспроизвести, может получиться разобраться.
второе доделаю, отличная идея. Вообще в последней версии есть сортировка, можете пока ей воспользоваться.
(46) ага я на эту сортировку на вторые сутки обратил внимание, сразу и не понял почему левые ошибки при проведении стали вываливаться.
(47) anado, ну для перепроведения документов лучше воспользоваться обработкой «Проведение документов» с ИТС
Для этого надо заходить под толстым клиентом в обычном приложении — что не всегда удобно, ещё как вариант есть типовое проведение в самой конфигурации. Но если уже отобраны документы по нужным параметрам и есть возможность с ними работать — то запускать какие то ещё обработки и их настраивать — как то не охота.
Не открывается почему то: файл—открыть—-и тишинааа…
1с 8.2 (8.2.18) УТ10.3 !
В чем может быть проблема.
В конфиге открывал там все норм….
(50) Ржачно. УТ 10.3 работает в управляемом режиме? Ваша проблема в незнании матчасти. Пользуйтесь обычной обработкой из комплекта УТ 10.3
Спасибо за обработку !!! очень нужная вещь,
Пофиксили падение на реквизите с типом значения «ХранилищеЗначений» (Форма строки 760-766)
(и 781-783)
Штука нужная в арсенале. +
Спасибо, все работает. Вещь нужная!
(0) Почему бы сразу не добавлять отбор и сортировку по всем полям объекта, только по умолчанию с отключенным использованием? Посмотри, как у меня по ссылке в первом посте сделано. Если лень скачивать, то я сделал заполнение отбора, сортировки при первом выборе объекта метаданных. Так удобнее.
хорошая штука, потестим!
Замечательная обработка.
Спасибо автору.
Добавить бы еще возможность сохранения нескольких вариантов настроек.
Работает, плюсанул.
(0) Добавьте фикс из поста (52) . Иначе ошибка.
(60) Поручик, есть такой! поправлю в ближайшее время
(55) Поручик, Потому, что полей может быть очень много и искать нужный элемент будет неудобно.
Спасибо за обработку, очень помогла. Только не понравилось, что при снятии флажка у одного из видов документов полностью очистились элементы отбора, пришлось их заполнять заново, ИМХО это не очень удобно.
Еще было бы не плохо сделать обработку ошибок проведения, чтобы пропускать документы с ошибками.
(63) Alister, действительно. Что-нибудь придумаю
Еще одни косяк: выбираю вид «Документы», выбираю кнопкой «все», галки проставляются у всех видов документов, но при отборе пишет сообщение, что надо выбрать хотя бы один объект метаданных, вручную снимаюставлю галку — начинает работать.
(65) Alister, поправлю
(65)(63) внес поправки в код обработки.
По поводу отбора: сохраняются только доступные всем выбранным объектам поля отбора.
Я имел в виду не поля отбора, а отбор в таблицу документов, т.е. я через кнопку установил галки для всех видов документов (надо было всем существующим в базе документам установить пометку удаления), а потом кнопкой «Отобрать» хотел заполнить нижнюю таблицу.
п.с. можно уже скачивать ?
(68) Alister, был ответ на сообщение(63). Можно качать
(69) спасибо — все получилось.
Обработка объектов производится на клиенте или на сервере?
(72) mikeA, конечно на сервере.
(73)
ну да, понятно что на сервере, не так выразился )))
у тебя каждая ссылка передаётся на сервер, все ссылки сразу или частями, чтобы периодически обновлять индикатор выполнения?
и вообще, с точки зрения производительности имеет смысл передавать на сервер сразу все ссылки или можно и по одной?
(74) mikeA, все сразу передается на сервер, индикатора нет. С точки зрения производительности передавать по одной вообще не имеет смысла
(75) спасибо, тогда качаю. что-то подобное и искал.
может прикрутить к ней индикатор? указывать по сколько ссылок обрабатывать и это количество передавать за раз.
можно объединить с количеством элементов в транзакции. а то когда ссылок тысяч десять и оно ушло с ними на сервер, хз умерло оно там уже или ещё шевелится. по 500 элементов в транзакции например это 20 лишних серверных вызовов, думаю при проведении тех же реализаций в типовых будет незаметно.
(76) mikeA, попробую
Спасибо за обработку. Добавлял возможность корректировки в режиме обмена.
Не из-за увеличения скорости, а чтоб обойти запрет при проверке.
Однако не сразу заметил «уход» на функционал типовой конфигурации, попотел ))))
(78) rokhin, честно говоря, не очень понял фразу. Вы сами добавляли возможность обработки в режиме «ОбменДанными.Загрузка = Истина»?
да. Вы точно сформулировали.
Спасибо за старую-добрую обработку теперь для управляемых форм.
Спасибо, пригодилось. 🙂 Странно, что в типовой такую нужную вещь убрали.
(82) ejka, пожалуйста! В типовой есть альтернатива: «Групповое изменение объектов». Она не слишком удачная)
А в типовых на БСП хоть что-то удачное есть? Универсальный обмен XML и тот сделан фактически на отъеппитесь.
(84) Поручик, не будьте так жестоки. Есть и удачные вещи. Мне очень пригодилась подсистема «Варианты отчетов». «Дополнительные свойства» интересно сделаны.
Спасибо!Искал для управляемых форм
Безумно нужная вещь, и сделана с тщанием. Один косяк — не работает.
Точнее, работает, но в Бухгалтерия предприятия, редакция 3.0 (3.0.28.7) в поле «Тип объекта» пишет только Справочник, а переключателя типов — нет.
Проверил на древней 3.0.23.9 — там все в порядке.
Автор, поправь пожалуйста, а то страсть как Документы поправить хочется.
Если речь идёт об 1С:Предприятии 8.3 (8.3.4.389), то работает.
(87) Хегга, если это в «Такси», то нужно просто кликнуть левой кнопкой мыши по полю с выбором типа. Тогда вывалится список
(87) Хегга, добавил в 8.3 привычную кнопку списка в поле выбора типа. Попробуйте
Проверил. Версия 2.3 работает на «отлично». Большое спасибо за молниеносную оперативность.
(91) Хегга, не за что. Спасибо за активную пользовательскую позицию)
В Вашей обработке явно!!! не хватает отбора и установки общих реквизитов.
А изменение реквизитов объектов в ней предусмотрено? Задача, все товары из выбранного документа «Установка Цен Номенклатуры» перекинуть в другую ценовую группу.
(93) vbuots, постараюсь сделать
(94) BodunOff, изменение реквизитов — это основное назначение обработки.
Ценовая группа — это что? Реквизит товара?
(95) Да, это реквизит номенклатуры.
(97) BodunOff, понял, что вы хотите сделать. К сожалению, моя обработка вам не поможет. Если вы владеете встроенным языком 1С, то воспользуйтесь этим: (1)
(98) Смотрел её, к сожалению мозга недостаточно чтобы реализовать произвольный запрос. Стандартом там также до этого реквизита не добраться((( Спасибо, Ваша обработка всё равно легла в коллекцию «Must have»!
(99) Триста рублей и напишу вам код для произвольного алгоритма для изменения реквизита реквизита.