Добрый день!
Может кто сталкивался с подобным? Валюта счета - рубли, курс рубля равен единице, но все равно в анализе ДДС и в ведомости по ДДС появляются сумасшедшие суммы положительной и отрицательной курсовых разниц. В чем может быть дело?
gevicer 11.02.12 20:18 URL Спам ↓Ответить
Проблема следущая, есть база данных в MS SQL 2000 на которой крутится 1с 8.1 УРБД при попытки обмена через FTP с периферийной базой возникает следующая
ошибка
Ошибка при чтении изменений из файла обмена.
Ошибка при вызове метода контекста (ПрочитатьИзменения): Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server: Cannot insert duplicate key row in object '_DocumentJournal6093' with unique index '_Docume6093_ByDocDate_TR'.
HRESULT=80040E2F, SQLSrvr: Error state=3, Severity=E, native=2601, line=1
Чтение данных из файла обмена завершено с ошибками!
SELECT field,…, fieldN, "Count"=COUNT(*) FROM TABLE
GROUP BY field,…, fieldN HAVING COUNT(*)>1
Помню что проблему уже решали с помощью 2-3 запросов в MS SQL
1) Ищет неуникальные индексы в таблице
2) Удаляет эти индексы или исправляет
но было давно и не помню точно с помощью какие запросов
Кто напишет какие запросы нужно выполнить чтоб было все тип топ ( применительно к вышеуказанной ошибке) не общие, фразы а конкретно
Выгрузку, загрузку а также тестирование и исправление базы не предлагать
Ответили: (46) (48) (63)
[+] [−]
2.
Pavel-T 13.02.12 11:14 URL Спам ↓Ответить
ну не знаю как ты гуглил, вот достаточно развернуто вроде
http://www.gilev.ru/1c/81/index/nonunique.htm [+] [−]
3.
gevicer 13.02.12 17:00 URL Спам ↓Ответить
Это я видел , конкретика где по поводу проблемы?
Ответили: (4)
[+] [−]
4.
shuhard 13.02.12 17:15 URL Спам ↓Ответить
(3) дык у Гилева всё конкретно:
update _Document140_VT1385
set _KeyField = keymax + 1
where _Document140_IDRRef = id1 and _LineNo1386 = lineno1
[+] [−]
5.
corpfin-info2 13.02.12 17:15 URL Спам ↓Ответить
Здесь же - http://www.gilev.ru/1c/81/index/nonunique.htm
Частный случай при обмене в РБД. Ошибка приходится на "вспомогательные" таблицы, связанные с расчетом итогов или аналитики. Например:
Ошибка при вызове метода контекста (Записать): Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server: Cannot insert duplicate key row in object 'dbo._AccntRegED10319' with unique index '_Accnt10319_ByPeriod_TRNRN'.
HRESULT=80040E2F, SQLSrvr: Error state=1, Severity=E, native=2601, line=1
В этом случаи перед загрузкой выключить использование итогов, загрузить сообщение, включить использование итогов и пересчитать.
Не оно ?
Ответили: (6) (7) (26)
[+] [−]
6.
gevicer 13.02.12 17:29 URL Спам ↓Ответить
(5) corpfin-info2, Если поможет то закрою тему , в личку написал сообщение
[+] [−]
7.
gevicer 14.02.12 0:47 URL Спам ↓Ответить
(5) corpfin-info2, не помог данный метод , посмотрел в 1с в режиме 1с Предприятия есть не уникальные номера документов в документах "Отчет о розничных продажах", написал обработку чтоб записать их с префиксом ( видать при загрузке закачались одинаковые номера документов из периферийной базы), но запустив обработку после перенумерации документов тоже самое.....
Вообщем нужно другое решение
[+] [−]
8.
SysolyatinSN 15.02.12 9:51 URL Спам ↓Ответить
Попробуй отключить итоги, провести документ. Включить итоги и сделать в конфигураторе тестирование исправление реиндексация и пересчет итогов
[+] [−]
9.
Kuryshev 15.02.12 14:34 URL Спам ↓Ответить
Тестирование и исправление базы делали?
Ответили: (10)
[+] [−]
10.
gevicer 16.02.12 11:06 URL Спам ↓Ответить
(9) Kuryshev, Делали, но проблема оказалась не в центральной базе , а в переферийной... позже напишу что получилось и какие вопросы остались...
[+] [−]
11.
pusix 16.02.12 13:16 URL Спам ↓Ответить
в бухгалтерии тоже частенько возникали неуникальные индексы, решилось обновление платформы и тестированием и исправлением базы
[+] [−]
12.
imagik 16.02.12 13:20 URL Спам ↓Ответить
Вообще, есть регламентное задание, которое обновляет индексы. И тогда проблемы не будет.
[+] [−]
13.
pro124 16.02.12 16:16 URL Спам ↓Ответить
сделать выгрузку-загрузку базы sql
Ответили: (15)
[+] [−]
14.
pro124 16.02.12 16:16 URL Спам ↓Ответить
или базы 1с8
[+] [−]
15.
gevicer 16.02.12 20:31 URL Спам ↓Ответить
(13) pro124, Это первым делом делали не помогло
Ответили: (16)
[+] [−]
16.
sashankz 18.02.12 8:46 URL Спам ↓Ответить
(15) как говорили выше ... надо отключить итоги и заново все сделать...
второе решение проблемы ... включить сиквель профалер ... отлови ошибку.. просматреть поля... кстати я думаю удивишься но проблема не в номере а в дате документа (по крайней мере у тебя тек индекс по этому и ошибается).... (смести его на 1секунду)
[+] [−]
17.
GTSE 20.02.12 12:24 URL Спам ↓Ответить
я бы выгрузил в файловую версию, сделал бы тестирование и исправление и обратно загрузил в sql
[+] [−]
18.
luns 20.02.12 13:49 URL Спам ↓Ответить
Конфигурацию в центре поменять.
Выгрузить cf из центра.
Загрузить в периферийную (предварительно сбросив центральный узел)
Обновить периферийную.
Заново установить в периферийной главный узел.
[+] [−]
19.
hamsar 20.02.12 21:21 URL Спам ↓Ответить
Тии надо сделать индексы пересоздадуться, не поможет выгрузить загрузить базу из дт, индексы пересоздадуться.
Не поможет в Энтерпрайз менеджере переиндексировать базу, тоже самое сделать с базой откуда отправляете мне помогало чтото из предложенного.
[+] daho; [−]
20.
vbvirus 24.02.12 12:47 URL Спам (3) ↓Ответить
Физически данные хранятся на 8Кб страницах. Сразу после создания, пока таблица не имеет индексов, таблица выглядит как куча (heap) данных. Записи не имеют определенного порядка хранения.
Когда вы хотите получить доступ к данным, SQL Server будет производить сканирование таблицы (table scan). SQL Server сканирует всю таблицу, что бы найти искомые записи.
Отсюда становятся понятными базовые функции индексов:
- увеличение скорости доступа к данным,
- поддержка уникальности данных.
Несмотря на достоинства, индексы так же имеют и ряд недостатков. Первый из них – индексы занимают дополнительное место на диске и в оперативной памяти. Каждый раз когда вы создаете индекс, вы сохраняете ключи в порядке убывания или возрастания, которые могут иметь многоуровневую структуру. И чем больше/длиннее ключ, тем больше размер индекса. Второй недостаток – замедляются операции вставки, обновления и удаления записей.
В среде MS SQL Server 2005 реализовано несколько типов индексов:
некластерные индексы;
кластерные (или кластеризованные) индексы;
уникальные индексы;
индексы с включенными столбцами
индексированные представления
полнотекстовый
XML
Уникальность значений в индексируемом столбце гарантируют уникальные индексы. При их наличии сервер не разрешит вставить новое или изменить существующее значение таким образом, чтобы в результате этой операции в столбце появились два одинаковых значения.
Уникальный индекс является своеобразной надстройкой и может быть реализован как для кластерного, так и для некластерного индекса. В одной таблице может существовать один уникальный кластерный и множество уникальных некластерных индексов.
Уникальные индексы следует определять только тогда, когда это действительно необходимо. Для обеспечения целостности данных в столбце можно определить ограничение целостности UNIQUE или PRIMARY KEY, а не прибегать к уникальным индексам. Их использование только для обеспечения целостности данных является неоправданной тратой пространства в базе данных. Кроме того, на их поддержание тратится и процессорное время.
1С:Предприятие 8.1 начиная с версии 8.1 активно использует кластерные уникальные индексы. Это означает, что при конвертации с 8.0 или переходе с 8.1.7 можно получить ошибку неуникального индекса.
[+] [−]
21.
Babuin 24.02.12 12:52 URL Спам ↓Ответить
какая большая копипаста с гилева
[+] [−]
22.
vprus 24.02.12 18:04 URL Спам ↓Ответить
После перенумерации документов сначала получить из периферийной базы файловый вариант, потом провести полное тестирование и исправление базы в файловом варианте, далее проверить файл с помощью chdbfl.exe. Будут ли ошибки?
Если ошибок нет, то обратно в SQL-версию. Только используйте 2005 MS SQL.
[+] [−]
23.
sergathome 26.02.12 20:30 URL Спам ↓Ответить
Проблема проста как ппп... пробка. Если некту удалось создать неуникальный индекс.... то он и должен это курить. Вместе с разработчиками сервака позволившего это операциЁ оссуществить...
Вобщем первое, в чём нужно убедиться - что ошибка таки генерится в БД. В чём я, лично, ООЧЕНЬ сомневаюсь.
[+] [−]
24.
buhsoftspb 27.02.12 22:33 URL Спам (3) ↓Ответить
Чтение данных из файла обмена завершено с ошибками!
SELECT field,…, fieldN, "Count"=COUNT(*) FROM TABLE
GROUP BY field,…, fieldN HAVING COUNT(*)>1
Помню что проблему уже решали с помощью 2-3 запросов в MS SQL
1) Ищет неуникальные индексы в таблице
2) Удаляет эти индексы или исправляет
но было давно и не помню точно с помощью какие запросов
Кто напишет какие запросы нужно выполнить чтоб было все тип топ ( применительно к вышеуказанной ошибке) не общие, фразы а конкретно
[+] [−]
25.
Maxxi 29.02.12 11:26 URL Спам ↓Ответить
тестирование и исправление базы нужно сделать
[+] [−]
26.
pas81 29.02.12 16:13 URL Спам ↓Ответить
(5) corpfin-info2,
Интересный вариант, а если просто взять и ребилднуть индекс через скуль, не помогает?
[+] [−]
28.
zhenia74 04.03.12 23:51 URL Спам ↓Ответить
update _Document140_VT1385
set _KeyField = keymax + 1
where _Document140_IDRRef = id1 and _LineNo1386 = lineno1
[+] [−]
29.
dk999 07.03.12 7:32 URL Спам ↓Ответить
интересно тема еще живая или как )
---
1. поглядеть структуру индекса в интерпрайзе
2. Вычислить по журналу регистрации на каком документе валится загрузка
3. Проверить значения индекса для "плохого" документа
4. Далее, в зависимости от структуры индекса, решать что делать - менять номер / дату / ...
Ответили: (43)
[+] [−]
34.
gelion 10.03.12 13:22 URL Спам ↓Ответить
Добрый день!
У меня была проблема подобного рода, за той лишь разнице, что не уникальность возникла в таблице остатков субконто.
Вам посоветую следующее:
На филиальной базе в таблице _DocumentJournal6093 в индексе _Docume6093_ByDocDate_TR убрать галочку уникальности.
Затем, написать обработку, для перезаписи всех документов данного журнала (наверно что это за документы в этом журнале вы уже выяснили)
[+] [−]
35.
gelion 10.03.12 13:25 URL Спам ↓Ответить
После данных процедур попытайтесь выставить уникальность индекса обработно. Если не получится, то выполните тестировани и исправление с галочкой "реструктуризация", уникальность индекса должна автоматом восстановиться.
Перед всеми данными операциями не забывайте бэкапить базу.
[+] [−]
36.
master_yoda 10.03.12 14:44 URL Спам ↓Ответить
есть еще апликуха "чекдбфл" по моему называется... находится в каталоге с исполняемым файлом 1С...
запускаем указываем путь к базе ..и все
Ответили: (42)
[+] [−]
37.
kyler66 10.03.12 21:02 URL Спам ↓Ответить
скорее всего тестирование и исправление базы надо сделать
[+] [−]
38.
serega904 11.03.12 7:16 URL Спам ↓Ответить
Порядок действии:
1.сделать выгрузку базы в файловый вариант
2.сделать тестирование и исправление базы, в файловом варианте
3.загрузить базу обратно
4.сделать еще одно тестирование и исправление(на всякий случай).
Ответили: (44)
[+] [−]
39.
LSV79 11.03.12 13:20 URL Спам ↓Ответить
Что ж вы все помешались то на тестировании и исправлении....
Перво наперво при таких проблемах смотрится одинаковый ли релиз платформы стоит на концах обмена. А то частенько забывают обновлять переферию. от платформы к платформе иногда меняется принцип построения индексов
[+] [−]
40.
hottion 13.03.12 21:06 URL Спам ↓Ответить
Какой обьем базы 1С?
РИБ сделан через стандартный механизм??
Какая версия платформы 1С?
какая нагрузка на информационную базу 1с?(обьем документаоборота)
Существуютли дописки в базе косательно состава документов и систем блокировок?
Правила обмена при выгрузке загрузке в РИБе участвуют или нет?
какие параметры базы SQL(Сортировки и стандарты таблиц)?
уточняйте параметры задачи, ато на кофейной гуще вам тут наговяряд ереси, вы и разочируетесь в мальчиках...
Самая большая проблема IT специалистов отсутсвие телепатии и телекинеза. Увы ломоного и легального софта чтения мыслей нет (((
[+] [−]
Изменено: hottion - 13.03.12 21:15
42.
gevicer 14.03.12 10:45 URL Спам ↓Ответить
(36) master_yoda, не помогает это
[+] [−]
43.
gevicer 14.03.12 10:51 URL Спам ↓Ответить
(29) dk999, Это надо попробовать сделать, но проблему частично решил , оказалось ошибка в загрузке из одной периферийной базы, убрав единственный файл из которого загружаются данные, загрузка пошла, со всеми остальными но ругается на отсутствие данного файла, Возник вопрос как правильно сделать РИБ не для 1й точки а для 5ти, возможно в этом косяк, что изначально намудрили с РИБ, и правилами обмена.
Более детальную инфу выложу сегодня вечером
[+] [−]
44.
gevicer 14.03.12 10:59 URL Спам ↓Ответить
(38) serega904, Это все делали и с периферийной и центральной базой не помогает
[+] [−]
45.
Evgeny1C 14.03.12 14:03 URL Спам ↓Ответить
Помню что проблему уже решали с помощью 2-3 запросов в MS SQL
1) Ищет неуникальные индексы в таблице
2) Удаляет эти индексы или исправляет
тоже самое было
вот покопался, нашел в своих заметках
select count(*) from SC3045;
select * from SC3045 where id=' 5BDЧЧЧ'
[+] [−]
46.
Ягг 15.03.12 10:27 URL Спам ↓Ответить
(1) gevicer, моли 5 копеек может помогут :)
Судя по ошибке при регистрации в журнале документа _DocumentJournal6093 (можно сепциальными командами найти что это за журанал при помощи команды ПолучитьСтруктуруХраненияБазыДанных(..) или есть готовые обработки (как пример http://infostart.ru/public/104919/ ) ) есть индекс _Docume6093_ByDocDate_TR. Состав этого индекса можно посмотреть в SQL, но скорее всего у него будет _Date_Time и _DocumentRRef.
Раз запись не возможно, то значит имено эти поля (которые указаны в индексе) и перекрываются.
Следовательно в запросе нужно
SELECT _Date_Time, _DocumentRRef , "Count"=COUNT(*) FROM _DocumentJournal6093
GROUP BY _Date_Time,DocumentRRef HAVING COUNT(*)>1
Получив таблицу (если она есть) уже можно делать выводы в чем проблема.
Грусно, если ошибка возникает в момент записи данных. Тогда нужно "отловить" на каком документе это происходит (трасировщиком или чем-то еще) и выполнив всю загрузку до этого документа, посмотерть с какими поля он записывается в таблицу, и смотреть почему он повторяется.
Предпологаю возможно проблема из-за смещения дат (т.е. виновато поле _Date_Time). Возможно в коде где-то принудительно назначается ссылка новому объекту (не уверен) и этот кусок не корректно отрабатывает (тогда виновато поле _DocumentRRef). Возможно - сбой базы.
Можно конечно проанализировать саму тблицу на наличие "глупых" строк (пустые ссылки, или даты)
Можно попробовать переиндексировать таблицу.
В ряде случаев, при загрузке в 1С, можно отключить некоторые провреки, установив свойство объекта (набора записей) ОбменДанными.Загрузка = истина (например отключается контроль уникальности номеров или кодов), но в данном случае это не поможет (думаю), так как ошибка идет на уровне SQL.
[+] [−]
47.
Maxxi 16.03.12 3:15 URL Спам ↓Ответить
Столкнулся с подобного рода проблемой.
Тоже при обменке ругается на неуникальный индекс
(S:110822) Ошибка при чтении сообщения обмена: Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server: Невозможно вставить повторяющуюся ключевую строку в объект "dbo._AccRgAT16074" с уникальным индексом "_AccTt16074_ByPeriod_TRRRRR".
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2601, line=1
нашел ответ на форуме
В этом случаи перед загрузкой выключить использование итогов, загрузить сообщение, включить использование итогов и пересчитать.
// Рассчитать итоги регистра накопления на указанную дату
[ИмяРегистра].УстановитьПериодРассчитанныхИтогов(УказаннаяДата);
хотя в моем случае база была без смещения 2000 - может и у тебя подобный вариант
нашел что таблица это итоги регистрбухаглатерии
мне вот поможет пересчет итогов например вот этой обработкой http://infostart.ru/public/download.php?file=52668 [+] [−]
51.
ibazh 25.03.12 11:01 URL Спам ↓Ответить
Может быть проблема весрии Скуля
[+] [−]
52.
timmi12 31.03.12 12:31 URL Спам ↓Ответить
corpfin-info2, не помог данный метод , посмотрел в 1с в режиме 1с Предприятия есть не уникальные номера документов в документах "Отчет о розничных продажах", написал обработку чтоб записать их с префиксом ( видать при загрузке закачались одинаковые номера документов из периферийной базы), но запустив обработку после перенумерации документов тоже самое.....
Вообщем нужно другое решение
[+] [−]
53.
wmobile 02.04.12 9:05 URL Спам (1) ↓Ответить
Думаю проблема в настройках SQL 2008, попробуйте провернуть тоже самое при установке на Windows 2008 server.
[+] [−]
54.
Яшар 03.04.12 0:08 URL Спам ↓Ответить
все ж оптимальне выгрузить в файловый вариант исправить все ошибки и обратно загрузить...подробнее глянь вот сюда
http://softmaker.kz/articles.php?cat=5&id=97 [+] [−]
57.
wbazil 06.04.12 9:58 URL Спам ↓Ответить
вот как делал я иногда помогало
Проверку логической целостности нужно выполнять штатными средствами 1С:Предприятия (Тестирование и исправление ИБ). В случае, если такую проверку не удается выполнить, следует проверить физическую целостность БД средствами MS SQL. Для проверки целостности средствами MS SQL нужно выполнить следующую команду:
Код:
DBCC CHECKDB ('имя базы ',REPAIR_REBUILD)
Перед выполнением этой команды нужно базу данных перевести в режим "single user":
Код:
sp_dboption 'имя базы ','single user',true
В процессе работы DBCC CHECKDB могут быть обнаружены ошибки и часть может быть сразу же исправлена. Если ошибки остались, то по всей видимости их нельзя восстановить без потери некоторых данных. В этом случае нужно запустить DBCC CHECKDB с параметром REPAIR_ALLOW_DATA_LOSS (перед запуском желательно сделать копию файлов базы данных).
Код:
DBCC CHECKDB ('имя базы',REPAIR_ALLOW_DATA_LOSS)
После выполнения DBCC CHECKDB нужно не забыть вернуться в нормальный режим (выйти из режима 'single user'):
Код:
sp_dboption 'имя базы','single user',false
[+] [−]
59.
codewarriorxxx 11.04.12 10:16 URL Спам ↓Ответить
А может просто протестировать базу на ошибки?
[+] [−]
60.
Erhov_egor 12.04.12 7:00 URL Спам ↓Ответить
Тестирование и исправление в помощь
[+] [−]
61.
Dim_a_p 13.04.12 8:57 URL Спам ↓Ответить
set _KeyField = keymax + 1
where _Document140_IDRRef = id1 and _LineNo1386 = lineno1
[+] [−]
62.
sokol_5441 14.04.12 10:06 URL Спам ↓Ответить
Функция ЗапросSQL (SQLServer,Login,Password,ТекстSQL) //Функция выборки данных из SQL сервера и передача во временную таблицу 1С
Подключение = Новый ComObject("ADODB.Connection");
Подключение.ConnectionString=СтрокаСоединения;
Попытка
Подключение.Open(СтрокаСоединения);
Состояние ("Подключение к серверу SQL...");
Исключение
Сообщить(ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
Состояние ("Выполнение запроса SQL...");
ЗаписиSQL = Новый ComObject("ADODB.RecordSet");
ЗаписиSQL = СоединениеSQL.Execute();
Таблица = Новый ТаблицаЗначений;
Состояние ("Заполнение временной таблицы...");
Для НомерСтолбца = 0 По ЗаписиSQL.Fields.Count-1 Цикл //Создание и добавление колонок во временную таблицу
ИмяСтолбца =ЗаписиSQL.Fields.Item(НомерСтолбца).Name;
Таблица.Колонки.Добавить(ИмяСтолбца);
Сообщить(ИмяСтолбца);
КонецЦикла;
Пока ЗаписиSQL.EOF = 0 Цикл // Заполнение созданной таблицы
НоваяСтрока = Таблица.Добавить();
Для НомерСтолбца = 0 По ЗаписиSQL.Fields.Count-1 Цикл
НоваяСтрока.Установить(НомерСтолбца,ЗаписиSQL.Fields(НомерСтолбца).Value);
Сообщить ("Test " + ЗаписиSQL.Fields(ИмяСтолбца).Value + ИмяСтолбца);
КонецЦикла;
ЗаписиSQL.MoveNext();
КонецЦикла;
Состояние ("Закрываем соединение с SQL...");
ЗаписиSQL.Close();
Подключение.Close();
Я дубли в индексных файлах убивал следующим способом, перенос всей таблицы во временную (при этом дубли не переносятся), удаление текущей и подстановка исправленных данных обратно.
SELECT DISTINCT * into #tempDBtable FROM _DocumentJournal6093
DELETE FROM _DocumentJournal6093
INSERT INTO _DocumentJournal6093 SELECT * FROM #tempDBtable
DROP TABLE #tempDBtable
[+] [−]
64.
pavel06 20.04.12 10:10 URL Спам ↓Ответить
"В среде MS SQL Server 2005 реализовано несколько типов индексов:"
Из этого копипаста следует, что давно надо заменить SQL2000 на SQL2008 и проблема уйдет сама по себе.
[+] [−]
65.
AlexPotemkin123 22.04.12 19:57 URL Спам ↓Ответить
Зачем изобретать велосипед. Думать как что индексировать, все за нас сделало 1С своей приблудой chdbfl.exe.
1. Выгружаем dt
2. Загружаем в файловую базу
3. Проверяем базу с помощью приблуды
4. Делаем обычный тест и исправление через конфигуратор
5. Выгружаем dt
6. Загружаем в нашу базу
7. Все это проверяем и пишем здесь помогло или нет
Только после этого можно что-то говорить, а то писанины много, а толку мало...
Ответили: (66)
[+] [−]
66.
CatMix 23.04.12 14:18 URL Спам ↓Ответить
(65) AlexPotemkin123,
Большинство баз работающих на SQL просто не развернуться в файловую базу.
Ваш метод очень ограниченный.
[+] [−]
67.
AlexPotemkin123 23.04.12 15:03 URL Спам ↓Ответить
Дело в том что 1С должна была сама разработать тестирование sql баз, но этого не сделала, а то что большинство не развернется в файловый вариант это вы погорячились... Не развернутся только очень огромные базы, а таких не так много... И нам в них не работать надо, а просто протестировать. В общем я предложил способ, а вы можете так делать, а можете и не делать.
[+] [−]
68.
999898 24.04.12 10:02 URL Спам ↓Ответить
http://www.sbsi.ru/content/category/8/47/73/ Данный метод выручил в своё время, рекомендую.
[+] [−]