История восстановления не очень сильно поломанной базы 1С (MS SQL)

15.04.22

Задачи пользователя - Корректировка данных

Всем привет. Сегодня расскажу, как восстановить не сильно поломанную базу 1С (MS SQL). Похожих статей и способов восстановления я в интернете не нашел.

Скачать исходный код

Наименование Файл Версия Размер
Файлы статьи
.rar 13,11Mb
47
.rar 13,11Mb 47 Скачать бесплатно

В каких случаях эта статья может вам помочь:

  • База поломалась не сильно (большая часть таблиц "Жива", и можно получать данные)
  • Вы можете зайти в конфигуратор + запустить 1С в режиме отладки

Коротко что я сделал, для тех, кому некогда читать:

  1. Присоединить базу к MS SQL
  2. Проверить скриптом, или еще как ни будь, какие таблицы сломаны, много ли их
  3. Установить голую конфигурацию той же версии, что и ваша старая
  4. С помощью внешней обработки получить структуру базы 1с, и посмотреть, что поломалось в базе 1с.
  5. Создать новую базу в ms sql, и создать копии таблиц, поломанной базы, с переносом всех данных (из тех таблиц что выжили)
  6. В новой базе, вставить данные в поломанные таблицы, и голой базы

 

Теперь опишу полностью, что я делал. И дам все, что мне понадобилось в конце. (Статья будет большая)
Сразу говорю, статья сложная для понимания. Я 4 дня шел к этому рецепту. В голове я понимаю, что нужно делать. А расписать сложно!
Все изображения можно открыть в новой вкладке, в полном размере.

Предыстория: после вынужденного выключения виртуальной машины, на которой были базы 1с, Win10 умерла (перестала запускаться). У меня было 3 базы, из которых у двух, были бэкапы, у этой нет, по очень глупой причине (все временное становится постоянным). Никакие варианты восстановления не помогли. Я смог достать базу и виртуальной машины. Но она оказалась поломана и 1с не запускался. 4 дня упорной борьбы, привели меня к этому решению. В моём случае база восстановлена полностью. (я надеюсь).

Поехали. Я все делал на новой виртуалке, поэтому процесс будет с нуля.

1) Устанавливаем MS SQL (не ниже версии, которая была)

2) Устанавливаем сервер(платформу) 1с (Наверно тоже не ниже прошлой версии), я делал на более свежей.

3) Копируем файлы базы (.mdf .ldf) в папку ms sql (C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA)

4) Присоединяем битую базу в ms sql. Назовем её "old"

 

 

5) Создаем новую базу, назову ее "res", сюда будем восстанавливать базу.

6) Через администрирование серверов 1с, добавляем только базу old, а также создаем 1 новую (я назвал её clear - Тут будет чистая новая конфигурация). При добавлении базы old, я запретил 1с выполнять регламентные задачи, чтобы 1с не трогала эту базу.

 

 

В итоге получаем что-то подобное.

 

 

Возможно, что через какое-то время ваша старая база (old) может упасть в режим подозрительной (Suspect), для того, чтобы её достать из этого режима, выполним команды в ms sql (построчно)

EXEC sp_resetstatus 'old';
ALTER DATABASE old SET EMERGENCY
DBCC checkdb('old')
ALTER DATABASE old SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('old', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE old SET MULTI_USER

Но я этого не делал. Так как, наверно, это может привезти к еще большей потере данных. Хотя кому-то это помогает полностью восстановить работоспособность 1с.

7) Теперь нам нужно понять масштаб бедствия, посмотреть, какие таблицы умерли. Для этого я написал небольшой скрипт на питоне (приложу к статье).

Скрипты написаны на питоне, для удобства конвертированы в .exe. Те, кто боится запускать непонятные файлы, насколько я знаю, антивирус тоже может ругаться на такой exe. Я приложил исходники скриптов в папке scripts\original_script. Вы можете их запустить самостоятельно, но потребуется установить python и библиотеку pymssql. Скрипт лежит в папке scripts\check_tables, запускать нужно файл check_tables.exe, НО сначала задайте данные для подключения к базе ms sql в файле scripts\check_tables\db_data.txt. Не меняйте структуру этого файла, а также не удаляйте кавычки. После запуска, скрипт получит список всех таблиц, и сделает запрос SELECT к каждой. Те таблицы которое выкинут ошибку, запишутся в список поломанных таблиц. На выходе у вас создастся файл tables, в папке скрипта, в нем вы увидите список битых таблиц ("error_tables"), а так же список всех таблиц в БД ("tables"), этот файл нам пригодится.



В моём случае сломались всего 3 таблицы (мне ооочень повезло). Теперь нужно понять следующий масштаб бедствия. Что это были за таблицы у 1с, и что в них должно лежать.

8) Сейчас нужно поставить чистую конфигурацию в базу clear. Обязательно той же версии что и была ваша конфигурация (я думаю вы это сделаете сами без меня).

9) Смотрим какие данные 1с у нас побились:

Запускаем старую побитую 1с. У меня в обычном режиме не запускалась, зато я смог это сделать в режиме отладки.

 

 

Запускаем 1с в режиме отладки, и будем получать структуру базы 1с. Если у вас не запустится 1с, то я не знаю, как действовать дальше. Так как нам нужно будет сопоставить таблицы, из поломанной базы, с таблицами из чистой конфигурации. Возможно, вы можете пропустить следующие шаги, и просто восстановить поломанные таблицы, оставив их пустыми, но как это повлияет на работу 1с, я не знаю. Для получения структуры, в папке 1s epf есть файл GetDatabaseStructure_v2.epf. Запускаем его в открывшимся окне 1с (файл -> открыть -> выбрать файл)

 

 

Здесь с помощью фильтра, или глазами. Находим названия битых, таблиц, которые мы получили с помощью скрипта. И смотрим какие данные у нас поломались.

 

 

В моем случае это: (запишите, это нам пригодится в следующем шаге)

Старые битые таблицы данные 1с
_InfoRg19196 РегистрСведений.КэшПрограммныхИнтерфейсов
_InfoRg19675 РегистрСведений.НастройкиРасчетаЗарплатыРасширенный
_RefSInf33550 Справочник.УдалитьВидыОтправляемыхДокументов

 

Из самого страшного на мой взгляд это "РегистрСведений.НастройкиРасчетаЗарплатыРасширенный". Я так понимаю тут лежат настройки расчета зарплаты. После восстановления, нужно будет сказать бухгалтеру что бы она проверила эти настройки.

10.1) Теперь нам нужно понять. Что в этих таблицах могло лежать. Можно ли их оставить пустыми. Или нужно вставить какие-то стандартные данные для нормальной работы. Тут нам и пригодится чистая конфигурация.

Запускаем чистую конфигурацию (я это делал так же в режиме отладки, мне так удобно. Хотя чистую базу можно запустить и полностью.) и в ней, так же запускаем этот файл(GetDatabaseStructure_v2.epf). Теперь мы ищем в каких таблицах лежат эти данные в новой конфигурации.

 

 

Проверив все наши битые данные в 1с, я получил следующее сопоставление

 

Старые битые таблицы (old) данные 1с новые таблицы (clear)
_InfoRg19196 РегистрСведений.КэшПрограммныхИнтерфейсов _InfoRg30001
_InfoRg19675 РегистрСведений.НастройкиРасчетаЗарплатыРасширенный _InfoRg30524
_RefSInf33550 Справочник.УдалитьВидыОтправляемыхДокументов RefSInf26159

 

Теперь лезем в MS SQL, в новую базу clear, чтобы посмотреть, что лежит в живых таблицах, для чистой конфигурации. В двух таблицах, у новой конфигурации, пуcтые таблицы (нет данных), но в одной (_InfoRg30524) есть строка.

 

 

Это таблица с данными "РегистрСведений.НастройкиРасчетаЗарплатыРасширенный". Думаю, что тут лежат настройки для расчета зарплаты. К сожалению, старых данных у нас нету. Поэтому при восстановлении базы, будем использовать стандартные настройки из чистой базы. Так же мы видим, что у этой строки есть ссылки на какие-то данные в других таблицах (_Fld30621RRef, _Fld30625RRef). Нам нужно понять, на какие таблицы ссылаются эти колонки, а также, самое главное, проверить что ID в тех таблицах, совпадают между базами old и newТак как если мы просто перенесем эту строку в восстановленную базу, но наша строка будет ссылается на несуществующий ID, 1с может поломается (тут я точно не знаю, мб 1с умная штука и сама сможет как то восстановить ссылочную целостность, но я не уверен)

10.2) Для того, чтобы проверить куда ссылается эта строка, мы опять открываем 1с (чистую конфигурацию), и лезем в структуру данных. Опять ищем нашу таблицу _InfoRg30524 и смотрим, на какие данные ссылаются эти колонки.

 

 

Получаем, куда ссылаются колонки
_Fld30621RRef -> ПорядокРасчетаСтоимостиЕдиницыВремени
_Fld30625RRef -> СпособУдержанияИзлишнеНачисленныхОтпускных

Теперь лезем в конфигуратор чистой базы и смотрим что это такое, и какие нам нужно искать таблицы.

Сначала найдем "РегистрСведений.НастройкиРасчетаЗарплатыРасширенный"

 

 

Далее смотрим, куда ссылаются наши данные, и получаем следующее сопоставление.


ПорядокРасчетаСтоимостиЕдиницыВремени


 

СпособУдержанияИзлишнеНачисленныхОтпускных


 

ПорядокРасчетаСтоимостиЕдиницыВремени -> ПеречислениеСсылка.ПорядокРасчетаСтоимостиЕдиницыВремениОплатыТруда
СпособУдержанияИзлишнеНачисленныхОтпускных -> ПеречислениеСсылка.СпособыУдержанияИзлишнеНачисленныхОтпускных

Возвращаемся в структуру данных и наконец находим на какие таблицы ссылаются наши колонки.

ПорядокРасчетаСтоимостиЕдиницыВремени -> ПеречислениеСсылка.ПорядокРасчетаСтоимостиЕдиницыВремениОплатыТруда -> Enum822
СпособУдержанияИзлишнеНачисленныхОтпускных -> ПеречислениеСсылка.СпособыУдержанияИзлишнеНачисленныхОтпускных -> Enum933

 

 

10.3) Лезем в ms sql. Открываем полученные таблицы в базе clear, и убеждаемся, что мы все поняли верно, и ссылки в таблице РегистрСведений.НастройкиРасчетаЗарплатыРасширенный/_InfoRg30524, ведут в полученные таблицы Enum822, Enum933

 

 

10.4) Надо убедиться, что в старой поломанной базе old, эти перечисления имеют тот же идентификатор, что и в чистой базе. Если это будет не так, нам придётся сопоставлять ID вручную.

Для этого, мы снова повторяем пункт 10.2 и 10.3, только уже для старой базы (old). Для того что бы найти таблицы с этими перечислениями и заглянуть в них. В итоге я получил следующие сопоставления

Чистая база (clear):
ПорядокРасчетаСтоимостиЕдиницыВремени -> ПеречислениеСсылка.ПорядокРасчетаСтоимостиЕдиницыВремениОплатыТруда -> Enum822
СпособУдержанияИзлишнеНачисленныхОтпускных -> ПеречислениеСсылка.СпособыУдержанияИзлишнеНачисленныхОтпускных -> Enum933

Битая база (old):

ПорядокРасчетаСтоимостиЕдиницыВремени -> ПеречислениеСсылка.ПорядокРасчетаСтоимостиЕдиницыВремениОплатыТруда -> Enum791
СпособУдержанияИзлишнеНачисленныхОтпускных -> ПеречислениеСсылка.СпособыУдержанияИзлишнеНачисленныхОтпускных -> Enum895

Теперь сопоставим данные таблиц

Чистая база (clear) Старя база (old)
Enum822 Enum791
Enum933 Enum895

 

 

Опять-таки, мне повезло. Спасибо 1С, в новой конфигурации, он создает перечисления с точно такими же ID. Пора переходить к восстановлению базы. Если бы это было не так, то мне бы пришлось сопоставлять ID ручками, и вставлять правильные значение, об этом дальше.

11.1) Для восстановления я написал второй скрипт, он копирует ТОЛЬКО живые таблицы, а также данные в них. Поломанные таблицы, будем копировать руками.

Скрипт лежит в папке scripts\copy_table, запускать нужно copy_table.exe. НО перед запуском заполните настройки подключения в файле scripts\copy_table\db_data.txt

Скрипт званого проверяет все таблицы, выбирает из них только целые, после чего копирует их командой SELECT * INTO FROM, в новую таблицу. Сейчас с помощью скрипта, мы копируем таблицы из сломанной базы (old) в новую пустую базу (res). Проверяем, что все удачно скопировано и идем дальше

11.2) Теперь нам осталось скопировать поломанные таблицы ручками, и при необходимости заполнить их данными.

Для копирования руками, заходим в ms sql в старую базу (old), кликаем правой кнопкой по поломанным таблицам -> создать скрипт -> используя CREATE -> новое окно

 

 

После получения скрипта, для создания таблицы, меняем базу old, на базу res, тем самым создавая новую таблицу в новой базе. В моем случае 3 раза.

 

 

Внимание! Мы скопировали базы без ключей и без индексов! После такого копирования запускать базу 1с НЕ НУЖНО. Так как 1с, без этих ограничений, начинает создавать кучу записей с одинаковым ID. После чего конфигуратор при экспорте начинает ругаться на это! Хотя это можно полечить отладчиком, но зачем нам лишние ошибки.

11.3) Теперь в моем случае осталось добавить одну строку в таблицу _InfoRg19675 (РегистрСведений.НастройкиРасчетаЗарплатыРасширенный), из чистой конфигурации (clear).  Проверяю что строка вставилась, и на этом, моё восстановление закончено.
Для этого выполним команду:

 

12) Теперь мы подключаем базу res к серверу 1С. Нужно поставить галочку блокировка регламентных задач. Иначе 1с, своими фоновыми задачами, начинает что то делать в 1с, и так как у нас таблицы созданы без индексов, то ограничений никаких нет. И 1с создает в одной таблице кучу строчек с одинаковом ID.

Заходим в конфигуратор, и проверяем целостность базы 1с (Администрирование -> Тестирование и исправление). В моем случае ошибок не обнаружено, радуемся, и начинаем сразу делать бэкап конфигурации. НЕ ЗАПУСКАЯ 1С (Администрирование -> Выгрузка базы)

Вот теперь мы создаем в 1с сервере, чистую новую базу. Заходим в конфигуратор, загружаем нашу конфигурацию на сервер. И все! При загрузке конфигурации, 1С сам создаст новые таблицы, с правильными ключами, и индексами. Поэтому нам не пришлось их копировать! Проверяем и радуемся!

 

p.s.

В моем случае, восстановление оказалось достаточно простым. Хоть я и убил на это 4 дня, толком не спавши. В вашем случае могут поломаться таблицы, которые сильно взаимосвязаны с другими 1с. В этом случае придётся руками восстанавливать ссылочность, копятся в структуре конфигурации 1с (битой и чистой). Возможно даже долго. Но это реально я думаю. Ну а если у вас побились таблицы с важными данными, например сотрудниками, тогда я даже не знаю, что делать. Можно так же пробовать восстанавливать, создать в чистой конфигурации сотрудника, искать в конфигураторе, что на кого ссылается, и так далее. Как я и писал. В моём случае база оказалась слегка битой.

 

Есть еще один вариант восстановления. Через выгрузку и загрузку XML. Я его пробовал (вложу даже epf в папку с файлами), но это очень костыльный метод. Так как данные начинают задваиваться, и при проверке базы в конфигураторе, вылезает куча ошибок. Хотя конфигуратор их удачно лечит, но как это все скажется в будущем на базе я не знаю, поэтому и не стал его использовать. Там нужно знать, что именно копировать. Но на всякий случай скажу. Если решите попробовать. Я использовал импорт для 1с 8,2. Так как в дебаг режиме 8,3 не запускается. Так же скажу, что мне удавалось перенести данные. Но это очень кривой метод. Тем более опять-таки, битые таблицы перенести не удастся.

Надеюсь, эта статья никому не пригодится. Ну а если вдруг, то пробуйте.

Все файлы тут, yaDisk

восстановление база копирование

См. также.

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    29485    87    151    

63

Корректировка данных Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 руб.

10.02.2017    108342    645    173    

686

Корректировка данных Зарплата Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4800 руб.

06.10.2023    3272    33    17    

40

Корректировка данных Зарплата Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Внешняя обработка предназначена для исправления самых различных ошибок, возникших по самым разным причинам. Общее проявление этих ошибок видно в различии данных между: проводками и различными отчетами по НДФЛ, заполнении ведомостей на выдачу зарплаты, неверным расчетом НДФЛ при начислении ЗП и т.д.

3600 руб.

09.02.2024    1123    5    5    

8

Закрытие периода Корректировка данных Бухгалтер Пользователь Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    23197    304    35    

76
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Cosmit 10.01.22 18:05 Сейчас в теме
У меня база как раз упала в режжим "Подозрительный"
и остать её отуда не получаеться

MS SQL 2016

Лог

Внимание! Перед обращением эту базу данных следует восстановить.
Сообщение 7985, уровень 16, состояние 2, строка 3
Предварительная проверка системных таблиц: объект с идентификатором 3. Не удалось прочитать страницу (1:1096076) и заблокировать ее кратковременной блокировкой типа SH. Инструкция проверки прервана из-за неустранимой ошибки.
Результаты DBCC для "1c_UNF".
Сообщение 5256, уровень 16, состояние 1, строка 3
Ошибка в таблице. Единица распределения с идентификатором 0, страница (1:1096076), содержит в заголовке страницы неверный идентификатор страницы. PageId в заголовке страницы = (0:0).
CHECKDB обнаружил 0 ошибок размещения и 1 ошибок согласованности, не связанных ни с одним объектом.
CHECKDB обнаружил 0 ошибок размещения и 1 ошибок согласованности в базе данных "1c_UNF".
Сообщение 5028, уровень 16, состояние 4, строка 5
Системе не удалось активировать базу данных в достаточной мере для перестроения журнала.
Результаты DBCC для "1c_UNF".
CHECKDB обнаружил 0 ошибок размещения и 0 ошибок согласованности в базе данных "1c_UNF".
Сообщение 5181, уровень 16, состояние 5, строка 6
Невозможно повторно перезапустить базу данных "1c_UNF". Возвращение к предыдущему состоянию.
Сообщение 5069, уровень 16, состояние 1, строка 6
Не удалось выполнить инструкцию ALT ER DATABASE.
Сообщение 7909, уровень 20, состояние 1, строка 5
Аварийное восстановление завершилось неудачно. Требуется восстановление из резервной копии.
Сообщение 824, уровень 24, состояние 2, строка 6
SQL Server обнаружил логическую ошибку ввода-вывода, связанную с согласованностью: неверный идентификатор страницы (ожидаемый 1:1022464; фактический 0:0). Она произошла при прочитать страницы (1:1022464) в базе данных с идентификатором 5 по смещению 0x000001f3400000 файла "C:\SQL_base\1c_UNF.mdf". Дополнительные сведения см. в журнале ошибок SQL Server и журнале системных событий. Это серьезная ошибка, которая угрожает целостности базы данных и должна быть немедленно исправлена. Выполните полную проверку базы данных на согласованность (DBCC CHECKDB). Эта ошибка может быть вызвана многими причинами; дополнительные сведения см. в электронной документации по SQL Server.
Сообщение 3414, уровень 21, состояние 1, строка 6
Во время восстановления произошла ошибка, препятствующая перезапуску базы данных "1c_UNF" (5:0). Проведите диагностику ошибок восстановления и исправьте их или выполните восстановление из проверенной рабочей резервной копии. Если ошибки не устранены или ожидаются в будущем, обратитесь в службу технической поддержки.
2. G_116853718039031015491 15 10.01.22 20:37 Сейчас в теме
(1)
У меня база как раз упала в режжим "Подозрительный"
и остать её отуда не получаеться

К сожалению, я не смогу помочь. я у меня при команде "DBCC CheckDB" так же вылазит куча ошибок. Я просто выполняю команды дальше, и база выходит из этого состояния. Пробуйте дальше выполнять команды как у меня написано.
5. Cosmit 11.01.22 15:02 Сейчас в теме
(2)

Если база упала в режим "Подозрительный" или "Аварийный" то скрипты её не читают
и Доступа к базе нет даже через Microsoft SQL Server Management Studio

тут ключевое скорее всего "История восстановления не очень сильно поломанной базы 1С"
6. G_116853718039031015491 15 11.01.22 15:19 Сейчас в теме
(5)
Доступа нет, но команды выполняются. Ну по крайней мере у меня. У меня тоже база падала в подозрительный режим, после присоединения базы (точнее это делал 1с, своими фоновыми задачами).
Я эту инфу брал отсюда, https://infostart.ru/1c/articles/59520/, и для меня это сработало!
7. XAKEP 12.01.22 21:26 Сейчас в теме
(1)
SQL Server обнаружил логическую ошибку ввода-вывода, связанную с согласованностью:


диски проверяйте
3. user676896_redking3000 11.01.22 07:39 Сейчас в теме
Только Архивы ежечасные...
4. G_116853718039031015491 15 11.01.22 12:12 Сейчас в теме
(3) Мы делаем бекап раз в неделю. Ну нам этого хватает
8. ivoryblade 14.01.22 10:58 Сейчас в теме
А что инкрементального резервного копирования наподобие Continuous Archiving в PGSQL нет в MSSQL?
9. user1203706 13 18.01.22 20:21 Сейчас в теме
(0) вы все базы по этому пути держите ?

(C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA)

Это же полный ПЭ.
10. G_116853718039031015491 15 18.01.22 22:08 Сейчас в теме
(9) Ну на севере 1с они лежат в отдельной папке от MS SQL. А что плохого держать базу в папке с MS SQL?
11. forcezone@mail.ru 15.04.22 13:52 Сейчас в теме
Файлы не доступны, не могли бы вы перевыложить их
12. G_116853718039031015491 15 15.04.22 14:18 Сейчас в теме
(11) Здравствуйте! Поправил! Надеюсь вам это поможет...
Так же добавил файлы на этот сайт.
13. svetanik 5 19.04.23 16:43 Сейчас в теме
Очень полезная статья! Хоть у нас такой проблемы не было, но теперь знаю, где подсмотреть, есть что ;)
14. user1212286 30.10.23 22:30 Сейчас в теме
За скрипт с битыми таблицами отдельное спасибо!
Оставьте свое сообщение