<?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='\
…А если мне нужна пустая база(для новой организации) с настройками и справочниками какие были в удаляемой организации, то как тогда быть? :-/
А справочники, которые никак на организацию не ссылаются никак и не затрагиваются.
А из тех, что имеют привзки к организациям, допустим, в БП я знаю только договора контрагентов. А они для новой организации Вам вряд ли пригодятся.
Оффтоп — а как пароль на код поставить?
а зачем?
1 фирму обслуживает 2 фирмы. Я пишу обработку от которой отказалась 1-я фирма. И как то не хочется что бы она туда ползала…
изhttp://infostart.ru/blogs/306/:
В: Как установить пароль на обработку/конфигурацию?
О: В 1С v 8 пароли можно устанавливать только на модули объектов. Что бы установить пароль необходимо открыть модуль объекта и выбрать пункт меню «Текст > Установить пароль». Так же существует возможность поставки конфигурации без исходных текстов модулей объектов (настраивается «Конфигурация > Поставка конфигурации > Настройка поставки»). Хочется заметить, что на данный момент, ни один из этих способов не является надежной защитой от просмотра исходного текста модуля.
но это защита от чайников
У меня почему то не удаляются РС, хотя должны
«- удаление записей из РС,которые не удалятся автоматически сами »
А так прикольная вещь
(7) если на организацию есть ссылки в РС, то удалаются только те записи, для которых эта организация не является ведущим измерением. Записи, где организация является одним из ведущих измерений автоматически удалятся, когда будете удалять саму организацию
Вот это как раз и не получается. Например, РС Счетчики выгрузок. Организация — это измерения, и не ведущая. Но обработка пропускает их, приходиться удалять руками
а галка очистики ригистров сведений стоит?
Да стоят все галки
тогда возможные варианты:
— нет прав на запись в этот РС (или удаление записей)
— возможно есть событие при записи, которое не позволяет удалять записи
— возможно организация присутствует в разных измерениях (тогда оптимизация глючит)
— какая-то другая ошибка
Процесс в обработке идет так:
когда доходит до записи РС, она анализирует этот РС. Если организация в ведущем измерении, то запись пропускается (такие записи удалятся, когда будет физическое удаление организации). Если измерение не ведущее, создается набор записей, устанавливается отбор на реквизит, содержащий организацию и производится запись пустого набора с таким фильтром. Для ускорения имя этого РС заносится в кэш (чтобы для каждой записи одно и то же не делать, поскольку одного раза достаточно)
Запись производится в Попытка/Исключение. Т.е. если возникла какая-то ошибка при записи пустого набора — она игнорируется.
если организация не в измерениях, то удаляется каждая запись по ключу.
Валерыч, а для 8.0 такая обработка есть? Ту, что скачал не в 8.0 не открывается. Нужно срочно. Спасибо.
Привет Валерич, давно хотел написать комментарий, да руки не доходили. Прежде всего спасибо за оперативное реагирование на просьбу об обработки для версии 8.0, очень помогла. Правда честно сказать я не смог воспользоваться твоей обработкой так как организации не удалялись: — Прежде всего не работала фуникция «ОчиститьРСПоКлючуЗаписи», так как в 8.0 нет метода «УстановитьЗначение», к тому же не все объекты, которые имеют ссылки на органиацию были найдены. Пришлось писать свою обработку. Я выложил ее под названием «Полное удаление органицаций» — посмотри может пригодиться.
Так же я хотел сказать, что простое ингорирование ошибок не очень-то хорошая идея — вроде бы все работает я на деле это не так, желательно хотябы сообщение выдавать, что не удалось что-то сделать.
В любом случае еще раз хочу сказать тебе Спасибо.
У меня в одной базе 8 организаций, пробовала удалять одну из них. Пишет что не может из-за даты запрета редактирования. Меняла дату, все бесполезно. Обработка то полезная, если работала…
(11), (15), (16) ошибки подправил. Спасибо за замечания.
кстати сам с ее помощью удалил 17 организаций из общей базы
сильная штука!
Хорошая вещь)))
Это класс! Даже в 8.2.
(19), (20), (21) спасибо за отклики
Большое спасибо!
Спасибо!
Супер!!! Очень помогло, большое спасибо!!!
помогает согласен, но
в УПП 1.2.29 и 1.2.30 при поиске ссылок выдается суровая ошибка и закрывается 1С Предприятие. для УПП 1.2.26 работает
С чем это может быть связано? можно ли поправить?
(26) а подробнее можно про «суровую ошибку»?
Конечно, прикрепил картинку с ошибкой.
вылетает при выполнении:
ТаблицаСсылок = НайтиПоСсылкам(МассивКУдалению);
(28) эта ошибка не зависит от конфигурации.. Скорее всего какая-то проблема с самой БД. Сделайте тестирование и исправление через конфигуратор. Если БД в файловом варианте, возможны даже более глубокие проблемы….
супер! спасибо 🙂
(25), (30) и Вам спасибо за отклики и высокую оценку
Платформа 8.2.12.92, Конфигурация Комплексная автоматизация, редакция 1.1 (1.1.3.1) Демо.
Вылетает при нажатии на кнопку «Поиск ссылок»
(32) не знаю… под 8.2 не затачивал. Возможно не хочет работать в режиме управляемых форм
Хорошо бы добавить ОбработкаПрерыванияПользователя().
Бухгалтерия 1.6.30.7, полет нормальный! Спасибо огромное! ❗
В древней базе «УПП для Украины» почему-то попадают ссылки на последовательности, и при попытке обработки удалить строку ругается, что объекта нет или невозможно поставить пометку удаления? Так и должно быть или это недоработка алгоритма?
А по 1С 8.2 есть такая обработка? Или можно как-то эту запустить в 8.2?
Очень полезно! Спасибо автору!
удобно в использовании, спасибо.
(38), (39) и Вам спасибо за отзыв
(37) откройте ее сначала в конфигураторе, она сконвертируется под 8.2. Потом можно использовать в режиме предприятия.
Спасибо! Протестировали, все отлично сработало. Жалко, что обработка не сразу удаляет все данные, а только помечает на удаление. А так по работе самой обработки никаких замечаний нет! Ошибок не возникало.
Спасибо, очень помогло. Много времени сэкономил. Только с обменом мне опять организацию занесли, но это уже другая история.
(41) Спасибо Вам. Не стал делать удаление, поскольку бывают связи не однозначные, например, в бухгалтерии справочник подразделения организаций (владелец которого справочник организаций) используется в настройках шаблонов проводок, настройках амортизации ОС и т.п. А это можно выловить при попытке удалить помеченные на удаление данные.
Подскажите, а обьекты которые помятятся на удаление, как их то удалить??? Только рубками перебирать все документы?
Спасибо! очень пригодилась
(44) пункт меню «Операции — удаление помеченных объектов». Все что сможет, удалит, что не сможет — покажет ссылки.
Либо есть аналогичная обработка на диске ИТС в разделе универсальных обработок.
А можно мне на mail sotikom@bk.ru отправить? а то не хватает плюсиков для скачивания. ( Буду очень признателен!!
Блииин, это ж именно то что я ищу. Надо позарез ! Почитал, вижу не кислая обработка, кому не жалко, пожалуйста, дайте знать.. или на мыло old-daemon@mail.ru
И вопрос вдогонку, организация может удалиться до удаления из справочника организаций ?
Кто-то конвертил обработку под 8.2 ? Она нормально отрабатывает ?
(49) не понял смысла вопроса. Попробую догадаться….
обработка безвозвратно удаляет только записи регистров сведений, в которых есть ссылки на указанную организации (при установленном соответствующем флажке). Документы, элементы справочников и другие объекты она просто помечает на удаление. Удалить Вы их сможете запустив удаление помеченных объектов. При этом, естественно, выполняется проверка ссылочной целостности. Так что удалить организацию Вы не сможете, пока не удалите все объекты, которые на нее ссылаются.
Отработало. остались ошибки типа:
1.Вид договора «С поставщиком» может устанавливаться только когда у контрагента указано что он является поставщиком.
Ошибка удаления объекта Основной: {Форма.Форма.Форма(119)}: Ошибка при вызове метода контекста (УстановитьПометкуУдаления): Не удалось записать «Основной (Договор контрагента)»!
(куда копать, что за док-непонятно и таких несколько)
2.Ошибка удаления объекта Опись сведений АДВ-6-2 (до 2010 года — Ведомость уплаты АДВ-11) СТС00000003 от 21.01.2011 0:00:02: {Форма.Форма.Форма(119)}: Ошибка при вызове метода контекста (УстановитьПометкуУдаления): Не удалось сделать непроведенным «Опись сведений АДВ-6-2 (до 2010 года — Ведомость уплаты АДВ-11) СТС00000003 от 21.01.2011 0:00:02»!
тоже хз почему не удалось и что с этим делать..
и в конце 3 ошибки таких:
Процедура закрытия месяца запущена. Перед пометкой на удаление необходимо отменить запуск процедуры
Ошибка удаления объекта Закрытие месяца 000000042 от 28.02.2011 0:00:00: {Форма.Форма.Форма(119)}: Ошибка при вызове метода контекста (УстановитьПометкуУдаления): Не удалось записать «Закрытие месяца 000000042 от 28.02.2011 0:00:00»!
Как с ними бороться, не подскажите ?
Сам примерно такую штуку писал.
Я сделал следующую вещь, после очистки сведений по лишним организациям, добавил следующие пункты.
1) Установка пометки удаления у всех справочников.
2) Потом программное удаление с контролем ссылочной целостности
3) Снятие пометки удаления в справочниках.
Такая схема позволит почистить и лишние элементы справочников, которые могли использоваться только в удаляемых организациях…
(52)
1. скорее всего у вас что-то вроде УТ или УПП. Там возможный вид договора ограничен настройками контрагента. При попытке пометить на удаление договор, срабатывает проверка перед записью, в которой проверяется корректность вида договора. Проверка не проходит поэтому и ошибка. Включите у контрагента галку «Поставщик» и удалите этот договор руками.
2. Попробуйте пометить на удаление эти документы вручную и посмотрите в чем ошибка. То ли проблема в данных то ли в конфигурации…
Спасибо, очень удобно
Спасибо за обработку) Протестирую, отпишусь) За ранее плюсую.
А эта обработка может удалять организации из конфигурации Зарплата и Управление персоналом?
Да, удобная обработочка
(57) обработка не привязана к какой-то конфигурации. Так что все должно быть хорошо.
Обработка выручила уже несколько раз, спасибо автору!
спасибо, вроде как работает
Часто у клиентов в одной базе ведется несколько организаций, и когда одна отваливается или необходимо перенести её в отдельную базу, а в общей удалить. Обработка выручала не раз, лови +!
просто и функциолнально 5+
Очень просто и интуитивно понятно. Спасибо
у меня была другая задача — удалить все данные кроме одной организации. пришлось немножко подкорректировать. спасибо!
Доброе время суток!
Спасибо за труд, актуально в наше непростое беспокойное время!!!
Насколько ваша обработка универсальна и
разруливает ли она как-нибудь ситуацию с перекрестными ссылками между организациями,
когда в одном объекте могут быть ссылки на несколько организаций?
(66) обработка помечает на удаление все объекты, которые имеют ссылки на указанную организацию. Единственно, что она не делает, так это рекурсивный поиск ссылок дальше (на объекты, помечаемые на удаление), поскольку это может занимать очень много времени.
Спасиббо!!! Помогло!!!
Не знаю, меня очень выручила эта обработка! УТ, БП, ЗУП.
надеюсь под 2.0 тоже работает…
(71) а почему нет ? 🙂
Спасибо, очень выручила! Из 6 организаций оставил 2. На все про все ушло пару часов. Немного шаманил с бубном, например вручную пришлось удалить из ЗУП записи в регистре ШтатноеРасписание, а в остальном все супер. Да, и еще есть в ЗУП ряд документов по сдаче в пенсионный фонд, так вот если у них стоит галочка «Принят» они тоже не помечаются автоматически на удаление
(72) спасибо за добрые слова.
Интересно, почему не отработало удаление записей в штатном расписании.
По поводу документов по ПФР… думаю, есть много нюансов в каждой конфигурации… Все нюансы не предусмотришь заранее. Надеюсь только, что таких нюансов немного.
да в ЗУПе пришлось руками удалять регистры сведений, а в остальном нормально.
спб
Как раз то, что нужно. Рада, что для 8.1 Большой + автору
спасибо за обработку буду смотреть на упп 1.3
Очень искала такую обработку! В базе несколько ненужных организаций.
У меня 8.2. Оттестирую — отпишусь, а пока сразу +
Выложите, пожалуйста свою обработку. Или она где то есть — дайте ссылочку пожалуйста. Заранее благодарю.
Открыла сначала в конфигураторе — конвертировала. Запустила, выбрала организацию, есть три окошка для без коментариев для флажков, кликнула все 3. Вторая закладка тоже без названия… Запустила удаление. моментально выполнилось. Пометило на удаление 535 док — удалило 3 и все, дальше удаление не разрешено Пишет что не может из-за даты запрета редактирования. Что не так, ведь эта ошибка уже испралена Вами (:?
Полезная штука спасибо,
можно еще слегка улучшить — сделать по списку организаций
(80)
Возможно какие-то проблемы с конвертацией, либо открываете обработку в режиме управляемых форм, а она для этого не заточена.
Я добавил в список скачивания файл для 8.2 (обычный режим). Попробуйте его.
Дату запрета редактирования обязательно надо сдвинуть в давние времена или убрать вообще для удаляемой организации. То, что обработка не удаляет ранее этой даты ошибкой не считаю, вдруг Вам доступ специально ограничен. Было бы глупо обходить все запреты, установленные администратором системы. Если же Вы сами являетесь администратором, то убрать ограничение не должно составить труда.
Во многих конфигурациях изменение даты запрета для редактирования применяется только после повторного входа в программу, поскольку считывается при старте. Опять же, при наличии нескольких дат (общей, для организации, для групп пользователей, индивидуальной) скорее всего будет самая поздняя дата, так что это тоже надо учесть.
Спасибо
(82) проблемы с датой возникли потому, что было установлено обновление которое запрещает внесение изменений в документах созданных до определенной даты, а документы помеченные на удаление, удалены не были.
Периодически возникающая задача, кстати.
Проверил на «Комплексной автоматизации» — отлично.
Добавил бантики — кнопку открытия объекта и колонки для ддокументов «Проведен» и «Отражать в управленческом учете». В КА это критично — если документы отражены в УУ, при удалении могут остатки съехать.
Спасибо за возможность удаления в 8.2.
Не удаляет мою организацию (:
(82) Периодически возвращаюсь к этой проблеме. Скачала обработку для 8.2 Запускаю — дает выбрать организацию и поставить три галочки — вслепую. Установила. Мгновенно обработка завершена. Иду в сервис — удаление, там ничего не отмечено, короче = ухожу в монастырь… а документов у меня там вагон 2008-2012года по этой организации.
Автору большущее спасибо, использовал, правда давно, сейчас случайно на публикацию наткнулся.
P.S.
Крестик в копилку!
Автор подскажите как со скоростю работы обработки в больших информационых базах, есть ли возможность остановки работы обработки после нажатия кнопки выполнить. Зарание спасибо за ответ
(91) Обработка выполняется в 2 этапа:
1. поиск всех ссылок на указанную организацию. Используется команда платформы. Прерывание при ее выполнении невозможна.
2. Непосредственная пометка на удаление объектов или очистка регистров сведений. Выполнение зависит от количества найденных на первом шаге объектов. Как-то забыл предусмотреть аварийное прерывание, но код открыт и вставить одну строчку несложно:
в процедуре ВыполнитьУдаление() сразу после начала цикла
Для каждого ЭлементТаблицыСсылок из ТаблицаСсылок Цикл
вставить строку
ОбработатьПрерываниеПользователя();
(89) не совсем понятна проблема. Можете выложить принтскрин тог, что у вас происходит?
интересно, это все та обработка с закрытым кодом которая полностью не удаляет данные из регистров сведений
(94)
1. нет ни одной строки закрытого кода
2. есть опция, которая отвечает за то — будудт ли удаляться записи из регистров сведений или нет
Здравствуйте, может кто-нибудь знает, документ «Корректировка записей регистров» эта обработка чистит?
(96) я знаю — в описании же написано. Не обрабатывает регистры, подчиненные регистратору.
А корректировка записей регистров работает именно с такими регистрами
(36) Аналогичная проблема в УПП! Ругается на последовательность.. не знаю что с ней делать
(36), (111) вроде как попытка удаления объекта отлавливается, просто выдается информационное сообщение о возникновении ошибки при попытке удаления.
Страшного ничего в этом нет. По идее, если конфигурация написана корректно, то ссылки из последовательности должны уйти при удалении документов, формирующих последовательность.
Если нет, надо разбираться с алгоритмами формирования последовательностей. Либо после пометки удаления всех документов запустить тестирование и исправление ИБ. При этом все ссылки в последовательностях на удаленные документы программа исправления должна убрать.
(66) yuraos,
Каким образом вы предлагаете найти взаимосвязи между организациями в автоматическом режиме, если:
— две организации взаимопродают друг другу товар. Одна из них удаляется.
Вот простой пример.
Попробуйте найти алгоритм решения.