<?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='\
А выход? Озаботиться, чтобы база до такого размера не распухала? Или PACK «снаружи» делать?
Странные ты таблички в посте написал, что табличка ссылок, что табличка отборов.. ну никак не огромных размеров..
(1)
Стараться не доводить до таких размеров.
А PACK не поможет, т.к. эти шустрые таблицы мало имеют «пустот» — новые записи занимают их место. Алгоритмы работы с ними таковы. Другое дело, если делать «свертку», то тогда обязательно потом PACK делать. Достаточно родного — из конфигуратора. Я не теряю надежды исправить эту ошибку. Вопросы мне по ошибке задают уже года три. А тестовую платформу, со 100% повторяемостью ошибки, удалось получить только вчера.
(2)
Две базы лежат у меня от других людей. И именно на этих таблицах система падает. Их размер больше 16777215 штук записей.
(3) А вдругих табличках, записей меньше ?
У меня, как правило, сымые большие таблички, это движуха в RA, тч в DT и файл проводок…. размер всех дбф 17 гигов.
Ошибки 310 не было..
(5)
И у меня ее никогда не было, пока на DBF-ах сидел. Правда у меня и регистров, и бух. не было… 😉
(6) мот поковыряешься и.. очередной патч dbeng32 готов ?
🙂
(7)
http://infostart.ru/forum/messages/forum9/topic36308/message398326/#message398326
Ковыряюсь.
Но без особого энтузиазма.
Проблема «больших баз» в родных DBF-ах бесконечна.
Вот, гляньте — очередная:
И это, далеко, не первая и не последняя бяка.
Мы от этого «движка» ушли и нормально всё (в)стало… 😉
cdx файлы удалить не пробовали? Должно помочь.
(9)
🙂 Вы мою статейку за вопрос принимаете?
(10) Да, извиняюсь. Я думал что это вопрос, чисто по диагонали прочитал.
(1) (2) (0)
Добавлен раздел «Временное решение проблемы в ручном режиме».
(0) Хорошая статья. +1
Я с надежной открыл статью, надеясь что появилась простая в использовании Dll, которая устранит проблемму #310, с которой я столкнулся на прошлой неделе! 😥
Но это оказался призыв извращаться или самому написать утилиту!!! 🙁
То что я нашел на infostart — сложны, Попробовал BIN_ADS_6040, но она отказалась даже делать конвертацию базы через ConvDbf , написав какие то глупости. Я с недоверием отнесся к разработке, которая даже на простейшую конвертацию пишет ошибки.
И использование ConvDbf, меняет структуру базы на нестандартную — тоже минус!
Спасибо за публикацию.
Но сейчас, грубо говоря, получается, что если возникла ошибка -310, то можно пошаманить и ненадолго база заработает… но не факт, что через неделю-другую она не упадет окончательно, т.к. это действительно временное решение… потом на нее можно будет только смотреть, но руками не трогать…
Мы тоже не смогли побороть эту ошибку, пришлось в срочном порядке сворачивать базу, а существующую с этой хитрой ошибкой — оставлять лишь для просмотра…
Кстати, в нашем случае, такое шаманство даже предпринимать не приходилось: ошибка вываливалась только при проведении документов, а при формировании отчетов все было нормально… Поэтому помогало простое удаление cdx’ов и индексация БД (правда индексация занимала что-то в районе 40 минут).
(15)
После появления ошибки -310, база «упадёт» обязательно.
И не только по этой ошибке.
Т.к. по реальной реализации 1С-а на DBF-ах:
1) Ограничение на таблицу 1 гигабайт.
2) Ограничение на количество записей в таблице 16 миллионов.
3) Ограничение на размер ключа в индексе 117 байт, для таблиц начиная с 30000 записей.
4) …
Но решения по снятию этих ограничений позволяет без суеты и, не прерывая промышленной эксплуатации, перейти на другую СУБД. Об этом я и написал… 😉
P.S. Наличие ошибки -310 может не позволить сделать, даже, «свёртку» БД.
Спасибо огромное! очень помогло)))) 😀
Вылетела ошибка -310 со ссылкой на 1SCONST. Наверное лучше чистить базу от помеченных на удаление элементов либо переходить на субд.
(18)
Это вопрос или утверждение?
(19) Теперь — утверждение))). ТиИ не помогает, объем базы 6.5 гиг, 27 релиз. Временное решение неприемлемо для нас. Либо резать базу, либо — в скул. Так что выбрали последнее
Скул дороговато выходит. — Шаманю раз в месяц при переносе точки актуальности. Автору — реально спасибо!
Спасибо, сейчас пытаюсь временно хотя бы запустить 1с.
С данной промлемой сталкиваюсь с завидной регулярностью, кроме свертки базы ничего не помогает.
Может кто подскажет как выйти из этой проблемы, без свертки базы, хоть бы год закрыть? Буду благодарна, за любой совет.Индексация, упаковка, тестирование не помогает. База почти 1 гб, одна меньше 1Гб , но кол-во записей 16780000, убрала по совету индекс «IDELETED» на «F» пробуем работать, но понимаю что не надолго
(20) Famza,
Здравствуйте, скажите пожалуйста, помог ли переход 1с на скул избавиться от ошибки 310, как работает программа?медленнее? как быстро проводятся документы? Вообще, если можно + и — скул по сравнению с ДБВ?
(22)(23)
«помог ли переход 1с на скул избавиться от ошибки 310″(с)
Галина (g26516).
На этот вопрос и я смогу ответить. 😉
Естественно — помог. Т.к. используется другая СУБД.
А сравнение SQL и DBF — это отдельная большая тема.
Но, однозначно, если система уперлась в количественные ограничения — надо менять СУБД.
И заниматься нюансами-проблемами уже в этой СУБД. Они — есть…
Но, масса проблем «исчезнет» — ограничения размеров БД, низкая надежность и т.д.
Если предметная область допускает всякие «свертки» — сделать это.
Или делать это регулярно, и перейти на терминал-сервер с DBF форматом.
(24)
Спасибо. Работаем на 1 с более 10 лет, терминал, регулярно делаю свертку, сейчас не успели закрыть год до свертки, базы подходят к 1 гб, kernel33 должен помочь? Как использовать kernel37 (вместо 3 ставить 7) и какой лучше?
(25)
http://infostart.ru/public/15367/)
Галина (g26516).
1) Проблема 1GB и ошибка «-310» — это разные проблемы, причины и способы устранения.
2) Средство Kernel3x применяют, если размер ОДНОЙ таблицы приближается к 1GB. А не в случае размера ВСЕЙ базы данных.
3) Применять лучше Kernel37, если у Вас используется разработка:
«Исправление ошибки 1С:Предприятие 7.7/8.0 — 100% загрузка процессора при ожидании блокировки»(
Т.к. совместно разработка от Романа и моя работать не смогут. И Kernel37 позволяет отказаться от разработки Романа, т.к. проблема «100% загрузка» в нем решена.
Спасибо, Владимир.
Мне кажется, что обычно все проблемы сваливаются разом и перед Новым годом….
1. 310 пока не вылетает, изменила индекс.
2. Размер одной БД приближается к 0.98 ГБ, второй 0.8Гб, третья — 0.7Гб ( которая повисла на индесах)
Что делать? Помогите пожалуйста!!!
(27)
Галина (g26516).
Главное — что? Спокойствие !!!
Ошибка «-310» временно устранена.
Ставьте Kernel37, исправляя только ОДНУ библиотеку — DBEng32.dll.
Это надо сделать, т.к. проблемный по «-310» файл начнет быстро расти и наберет 1GB достаточно шустро. И за его размером надо СЛЕДИТЬ т.к. можно напороться уже на ограничение в 2GB. Надо выполнять, изредка, упаковку в «тестирование и исправление».
Дотягиваете до конца отчетного года. Далее упаковка, свертка, упаковка. И еще год живете на пороховой бочке…
P.S. Если, чего — пишите в «личку». И мой проводной телефон и Skype будет в Вашем распоряжении с 17 до 3 часов по Москве. Все эти проблемы решаются легко, даже в режиме: «я говорю — вы нажимаете на клавиши и мышку»…
Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!
Очень приятно, что кто-то пытается тебе помочь, а не просто отмахнуться. Особенно приятно: как новогодний подарок. Выходные прошли пока без проишествий . Сегодня исправлю на Kernel37.
Спасибо еще раз.
(24)
Ошибка -310 вылетела именно на терминал-серверном варианте с DBF формате.
(23) Конечно помогло. + и — есть везде и всегда. При переходе советовал бы воспользоваться инструкциями 1С. Некоторые документы и часть отчетов уже переписал с использованием запросов — использование СУБД обязывает. Но часть доков стала просто летать — особенно на удаленных компах. Часть доков стала ужасно жутко тормозить при проведении. И все их переписывать даже мысли не возникало. Зато теперь спокоен за базу — скул 2008 летает, архив пишется влет. Но как ответил Владимир (hogik)
(30)
Иван (Famza).
В тексте «Или делать это регулярно, и перейти на терминал-сервер с DBF форматом» стоит запятая. И нет после запятой ИЛИ. А по Вашему ответу получается, что я предлагаю перейти на терминал-сервер для устранения проблемы «-310». 😉
(31)
Или делать это регулярно, и перейти на терминал-сервер с DBF форматом.
…Ошибка -310 вылетела именно на терминал-серверном варианте с DBF формате.
«Казнить нельзя помиловать»… )))
То что ошибка вылетела на терминал-серверном варианте с DBF формате — уточнение в ответе на пост (23).
Но обращался к посту (24) — то, что и в данном формате ИБ ошибка вероятна. А свертками — только, имхо, продлить агонию БД. У нас DBF-база была 6,5 гиг, свыше 20 юзеров — один пересчет итогов задалбывает. Это просто статистика, а что, кому и как — решается индивидуально.
Так что, пост (30) считать как случайный набор букав…
(32)
«пост (30) считать как случайный набор букав…»(с)
Иван (Famza).
Зря Вы — так. 🙁 Очень содержательный текст.
Я же согласен с Вами — надо менять СУБД. Не агитирую за «жизнь» на DBF-е и временные решения. Но, есть состояние — «горит». 😉 Это и обсуждалось с Галиной (g26516) — как «тушить». А потом делать «ремонт квартиры». Согласитесь, что при пожаре мало кто задумывается, даже, о стоимости последующего ремонта… 😉
(33) Согласен
Спасибо за статейку. Мучаемся с этой проблемой уже 3 года. каждый год начинаем чистую базу.
При появлении ошибки предыдущий программист напрямую в dbf резала данные, помогало только временно.
Сейчас начинаю искать таблицу «лидер» по количеству записей.
Я новичок в работе с 1с 7.7, думаю не откажете, если обращусь к вам на помощью)
(35)
«…. не откажете, если обращусь к вам на помощью»(с)
Не откажу…
Нашлась таблица лидер (1SACCSEL.Dbf) 17 003 596 записей. И не мудрено что все обрезки не помогали (резали не тот файл). Нашла информацию что ее просто прибить можно, т.к. это отбор счетов. Тестирую, может подскажете, насколько критично может быть ее прибивание?
Нашлась таблица лидер (1SACCSEL.Dbf) 17 003 596 записей, кстати не самая большая по весу, всего 747МБ. И не мудрено что все обрезки не помогали (резали не тот файл). Нашла информацию что ее просто прибить можно, т.к. это отбор счетов. Тестирую, может подскажете, насколько критично может быть ее прибивание?
(33)
Здравствуйте! По поводу срочного тушения пожара, это абсолютно точно и помогло, за что отдельное огромное спасибо!!!! Благополучно закрыли прошлый год. В этом ждем-с … Повторила пройденный путь. Все дело упирается в финансы, может у кого по другому, но у на пока все не встанет мертво денег на перехо на 8-ку врядли кто , одна только лицензия под наше предприятие и кол-во пользователей около 500 т.р.???? Не говоря обо всем остальном…
Так что кому что «нравится» не совсем правильная постановка вопроса.
Просто огромная благодарность Владимиру за помощь в таких ситуациях!
С наступающим Новым годом! Удачи во всех начинаниях и огромного мешка с деньгами, который просто свалится неизвестно откуда!
(38) Nefrit88,
Здравствуйте! У меня была проблема с этой же таблице. Как вы собираетесь ее прибить?
g26516, добрый день. пока переименовала ее. И монопольно зашла в базу. Сейчас формируем книгу продаж (так сказать пытаемся вызвать ошибку). Как вы решали эту проблему?
Я делала строго как написано в статье. Изменила индекс на .not.Delete в этой базе, скачивала ту утилиту , которая указана в статье. Проблема возникла как раз в это же время год назад. Спасибо Владимиру, за своевременную помощь. Год закрыли, потом базу свернули. В этом году проблема возникла уже в ноябре. Умом понимаю, что переход на 8-ку неизбежен, осталось убедить в этом руководство… Пока, как говорится , продлеваем агонию.
(41) Nefrit88,
Скачала Kernel37,
Исправила только ОДНУ библиотеку — DBEng32.dll, двоичным редактором (тоже скачивала с инета, если честно, то не помню каким, все делала в спешке) Kernel32 на Kernel37.
Ну вот и дождались)))) Так и знала что простое прибивание не решит проблему(
В итоге выяснили, в выписке для проверки нажимается кнопка «Показать остатки», и показываются неверные данные по остаткам на начало и конец. Сегодня запускаем пересчет итогов…а дальше пока даже и не знаю что делать с этой бедой.
Я бы посоветовала перед запуском пересчета итогов все таки сделать индес DELETE «F» как в статье, иначе можно потерять базу без возможности восстановления, только с копии.
Ситуация была аналогичной в прошлом году, хоть караул кричи, Еще раз , спасибо Владимиру, успокоил и реально помог. «Главное — что? Спокойствие !!!» его слова.
См. комментарий (16 от Владимира (hogik)) Насчет светки базы при ошибке 310.
g26516, спасибо за совет. Но боюсь что пока не смогу это сделать, админ в отпуске((( И увы вне зоны доступа. А без него сделать ничего нельзя
(47)
«не смогу это сделать»(с)
Елена (Nefrit88).
Нет проблем.
Думаю, смогу Вас «провести» по «клавишам».
Пишите в личку координаты: Skype/телефон.
Если надо платить за разговор по телефону, то придется уже Вам мне перезвонить.
Учтите, разговор может быть длинным — час и более…
(39)
Галина (g26516).
Спасибо за поздравления.
И Вас поздравляю с наступающим Новым годом.
Увы. Вот и еще один год прошел. Время летит… 🙁
(48) Владимир(hogik)
Здравствуйте, что-то не новогоднее настроение?
Прошел еще один год, мы стали старше и мудрее( хочется так думать) Семилильными шагами приближаемся к «детскому возрасту» , скоро станем радоваться любой мелочи, как дети…. В каждом возрасте есть свои прелести!
Конец света так и не наступил, значит еще повоюем!
Елена (Nefrit88), проблему решили?
(49)
«В каждом возрасте есть свои прелести!»(с)
Так говорят (думают) люди, которые не находятся в том самом возрасте конца… 🙂 🙁
«Елена (Nefrit88), проблему решили?»(с)
На связь не выходила.
Владимир(hogik)
«В каждом возрасте есть свои прелести!»(с)
Так говорят (думают) люди, которые не находятся в том самом возрасте конца… 🙂 :-(»
Ну не скажи! Просто ко всему надо относится философски!!
Явно что-то новогоднего настроения нет! С этим надо боротся! До Нового года совсем чуть-чуть осталось…
(51)
«Явно что-то новогоднего настроения нет!»(с)
Галина (g26516).
Его у меня нет с того момента, когда наступление Нового (очередного) года (или дня рождения) начало вычисляться в режиме обратного отсчета от средней продолжительности жизни человека.
Владимир(hogik)
Можно подумать, что Вам 100 лет, а вообще, по мнению оооочень многих, жизнь начинается только после 50. Дети подросли, жизнь каким-то образом установилась да и работа тоже, можно пожить и для себя.Может стоит об этом подумать?
Владимир(hogik)
Столько всяких полезных вещей написали, стольким людям помогли в трудной ситуации, и такая грусть в голосе?
Отписываюсь по благополучному закрытию года! Мы нашли причину нашей ошибки 310, эта проблемная таблица (1SACCSEL.Dbf) 17 003 596 записей, кстати не самая большая по весу, всего 747МБ. Оптимальным решением оказалось изменение глубины счетов до 2х (Отбор по счетам, количество уровней). В данный момент таблица 162 764 09 записей и размер ее 698мб.
Ах да, подпорки в виде доп утилит ставить не ставили. Т.к. для нас это слишком большие риски, слишком много баз крутится на этом сервере.
(55) Nefrit88,
Мы тоже недавно благополучно закрыли год. Где вы конкретно изменили глубину счетов? Более подробно не подскажите? И как это повлияло на все остальное?
Спасибо.
Какие-то изменения произошли за 2 года?
(57) Конечно!
Автор стал, как минимум, на 2 года старше.
Всем доброго времени суток.
Столкнулся с проблемой при выполнении п. 5:
Скачал указанную программу, открыл таблицу, свойства таблицы, но закладка с индексами пустая, поправить ничего не получается.
Таблица 1sconst.
(59) смотря чем открывал дбф файлик.
А так, будь проще — порежъ периодику и привет, например, цены номенклатуры. Оставь последние за год, к примеру.
1sconst похудеет.. ошибок не будет.
(60) Ёпрст,
Спасибо. Сейчас закладки с индексами проявились, вчера нет, а сегодня вдруг отобразились с индексами.
На днях возникла эта проблема, но решить ее удалось более простым способом, но это касается только бухгалтерии и только файла 1SACCSEL.DBF. Из описания в файле .DD читаем, что файл 1SACCSEL.DBF служит для отбора счетов. Открываем конфигуратор, заходим в проводки и убираем галочку «Разрешить отбор» в группе «Отбор по счетам». Сохраняем. Изменения происходят быстро. После изменения данный файл перестает существовать. Все, проблема решена.
У меня возникла ОШИБКА 310 из-за переполнении записями файла проводок 1SACCSEL.DBF я
сделал следующее:
1) снял с документов проводки за 1-2 месяца (чтобы уменьшить кол-во записей)
2) сделал архивную копию базы,
3) сделал усечение (сжатие) базы (1-2 мес для того чтобы пользователи могли работать).
4) сделал индексацию.
Потом спокойно сделайте удаление из рабочей базы старых документов (у меня это 1-2 года).
Мне помогло! Количество записей в файле 1SACCSEL.DBF уменьшилось.