Рассмотрим несколько вариантов восстановления БД, в зависимости от того, насколько повреждены файлы БД зависит успешность того или иного метода. Все описанные способы были лично мной проверены на практике и все случаи восстановления, за исключением одного, были успешны. Используйте данное руководство на свой страх и риск, за совершенные вами действия ответственность несете, вы сами.

    Итак, во-первых останавливаем службу SQL Server и копируем файлы базы данных (*.mdf и *.ldf) в другую папку, чтобы можно было восстановить их в случае неудачи.

    Если у вас есть свежий актуальный бэкап, то дальше можете не читать, а просто восстановите БД из него, тем самым сэкономите драгоценное время, далее я приведу алгоритмы восстановления для разных версий SQL Server. Надеюсь вам это поможет, как в свое время помогло и мне.

    Для всех версий SQL Server подойдет следующий вариант: делаем Detach database (отсоединить базу данных), удаляем журнал транзакций (файл с расширением ldf) и делаем Attach database(присоединить базу данных). В мастере выбираем наш mdf файл и жмем ОК.

    Если mdf файл не поврежден, то он успешно присоединится и мы увидим нашу базу в диспетчере объектов целую и невредимую.

    Радуемся успешному восстановлению. (Этот вариант сработает только если mdf файл не поврежден, поэтому срабатывает не всегда). Если не получилось, то создаем новую базу данных с таким же именем, останавливаем сервер. Подменяем файл mdf файлом от нашей базы, стартуем службу SQL Server и открываем Query analyzer(SQL 2000) или Management studio(SQL 2005/2008) в зависимости от нашей версии сервера.

    Пишем следующее:

    USE master
    GO
    sp_configure 'allow updates', 1
    reconfigure WITH override
    GO

    Если у вас SQL 2000, то далее пишем:

    UPDATE sysdatabases SET STATUS= 32768 WHERE name = 'db_name'
    GO

    Если SQL 2005 или 2008, то пишем:

    ALTER DATABASE db_name SET EMERGENCY, SINGLE_USER
    GO

    где вместо db_name пишем имя своей БД

    Жмем F5. После этого наша БД должна быть видна в статусе EMERGENCY.

    В особо тяжелых случаях возникают проблемы с переходом в EMERGENCY, возможны даже проблемы с detach, в таких случаях поврежденная база удаляется, а далее происходит хитрая подмена файлов данных. Для начала создадим новую базу, имена файлов mdf и ldf должны совпадать с именами файлов поврежденной базы. Новую базу переводим в режим EMERGENCY, останавливаем службу MSSQL и подменяем файлы поврежденными. Таким образом мы получим рабочий инстанс в статусе EMERGENCY с поврежденными файлами.

    Отлично, приступаем к восстановлению.

    Выполним следующие SQL команды.

    Для SQL 2000:

    DBCC REBUILD_LOG('db_name', 'Полный путь к новому файлу ldf')
    GO

    Жмем F5, если все нормально, сервер скажет: Warning: The log for database ‘db_name’ has been rebuilt.

    Стираем и пишем:

    USE master
    GO
    sp_dboption 'db_name', 'single user', 'true'
    GO
    USE db_name
    GO
    DBCC CHECKDB('db_name', REPAIR_REBUILD)
    GO

    Если база не хочет в single mode можно попробовать такую команду

    USE db_name
    ALTER database db_name set SINGLE_USER with rollback immediate
    GO

    если DBCC не хочет выполняться, то вместо REPAIR_REBUILD нужно подставить REPAIR_ALLOW_DATA_LOSS

    Жмем F5, ждем некоторое время. Сервер вернет кучу сообщений. Если там будут содержаться ошибки, то лучше еще раз выполнить DBCC CHECKDB с параметром REPAIR_REBUILD, пока все ошибки не будут устранены.

    Для SQL 2005/2008 действия несколько иные:

    DBCC CHECKDB('db_name', REPAIR_ALLOW_DATA_LOSS)
    GO

    Тут без вариантов. В SQL 2005 и выше нет инструкции REBUILD_LOG, вместо этого выполняется CHECKDB с параметром REPAIR_ALLOW_DATA_LOSS.

    После того как сервер закончит выполнять запрос и вернет результат, меняем REPAIR_ALLOW_DATA_LOSS на REPAIR_REBUILD и выполняем запрос еще раз, это должно убрать оставшиеся ошибки в бд.

    После всего этого наша база становится в нормальное состояние и уже доступна для работы с ней, но только в однопользовательском режиме, поэтому завершаем наш процесс возвращением бд в многопользовательский режим.

    Пишем:

    Для SQL 2000:

    USE master
    GO
    sp_dboption 'db_name', 'single user', 'false'
    GO

    Для SQL 2005/2008:

    ALTER DATABASE db_name SET ONLINE, MULTI_USER
    GO

    Все. База онлайн и готова к работе. Радуемся и не забываем делать бэкапы.

    Tags: ,

    Обмен через Универсальный формат Enterprise Data. Добавление в обмен нового документа

    Задача актуальна на 27.06.2021, так как 1С еще не доработала формат под ряд документов, связанных с ответственным хранением.

    В редакции 2.4 1С добавила в ERP (КА2, УТ11) документы для учета ответственного хранения (https://its.1c.ru/db/erp24doc#bookmark:shippingtosafekeeping:ShippingToSafekeeping3). Однако, формат не доработан и некоторые документы не включены в формат. В частности, документ «Выкуп товаров хранителем».
    Нам поставлена задача передавать документ «Выкуп товаров хранителем» из ERP в 1С: Бухгалтерия предприятия ред. 3 как документ Реализация с основного склада.

    Разобьем задачу на 2 части.

    1. Необходимо регистрировать документы вида «Выкуп товаров хранителем» в плане обмена. Изначально, данного вида документа в составе регистрируемых данных не было
    2. Необходимо доработать формат и передавать документы вида «Выкуп товаров хранителем» как документ «Реализация товаров и услуг».

    Регистрация документов вида «Выкуп товаров хранителем» в плане обмена

    1. К сожалению, тут придется изменять конфигурацию. Если конфигурация была на полной поддержке — снимать.
    2. Необходимо изменить План обмена «СинхронизацияДанныхЧерезУниверсальныйФормат» — Состав. Добавить наш документ в режиме запрета авторегистрации

    3. Отредактировать Подписку на событие СинхронизацияДанныхЧерезУниверсальныйФорматРегистрацияДокумента — Источник. Поставить галочку на нашем документе.

    4. После сохранения конфигурации нам необходимо отредактировать правила регистрации объектов. Это проще всего с помощью конфигурации Конвертация данных 2. Для этого сначала выгружаем файл с правилами

    5. Теперь загружаем файл в Конвертацию данных 2 и настраиваем правила для нашего документа. Если с этим сложности — погуглите — полно материалов.

    6. Сохраняем настроенные правила в КД2 и загружаем в ERP (тем же способом, что и сохраняли)

    6. Теперь первая часть задачи — готова. Документ «Выкуп товаров хранителем» регистрируется в плане обмена «Обмен через универсальный формат»

    Доработка формата для передачи «Выкуп товаров хранителем»

    Поскольку нам нужно Выкуп товаров хранителем передавать как документ Реализации — задача сильно упрощается, т.к. нам не нужно создавать дополнительные XDTO объекты. Нам нужно лишь прописать дополнительные правила обработки данных, правила конвертации объектов и правила конвертации свойств в коде. Все эти изменения можно прописать в общем модуле МенеджерОбменаЧерезУниверсальныйФормат, но я бы рекомендовал использовать для этих целей расширение. Суть от этого не меняется, переходим к изменению кода.

    1. Изменяем процедуру ЗаполнитьПравилаОбработкиДанных(НаправлениеОбмена, ПравилаОбработкиДанных). Данная процедура заполняет таблицу правил обработки данных и нам необходимо добавить туда свое правило обработки данных
        ДобавитьПОД_Документ_ВыкупТоваровХранителем_Отправка(ПравилаОбработкиДанных);   //Пчелинцев

    2. Добавляем процедуры обработки данных для нашего объекта. В соответствии со стандартами кода — прописываем правила конвертации объектов для нашего объекта — ПравилоОбработки.ИспользуемыеПКО.Добавить(«Документ_ВыкупТоваровХранителем_Отправка»);
    КонецПроцедуры

    Процедура ДобавитьПОД_Документ_ВыкупТоваровХранителем_Отправка(ПравилаОбработкиДанных)
    	ПравилоОбработки                         = ПравилаОбработкиДанных.Добавить();
    	ПравилоОбработки.Имя                     = "Документ_ВыкупТоваровХранителем";
    	ПравилоОбработки.ОбъектВыборкиМетаданные = Метаданные.Документы.ВыкупТоваровХранителем;
    	ПравилоОбработки.ПриОбработке            = "ПОД_Документ_ВыкупТоваровХранителем_ПриОбработке";
    	ПравилоОбработки.ОчисткаДанных           = Ложь;
    	ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ВыкупТоваровХранителем_Отправка");
    КонецПроцедуры
    
    Процедура ПОД_Документ_ВыкупТоваровХранителем_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена)
    	
    	ПроверкаЗаполненияРеквизитовОбъектаИБ(ДанныеИБ, КомпонентыОбмена, ИспользованиеПКО);
    	ПередОбработкойДанныхДокумента(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена); //ED
    КонецПроцедуры
    

    3. Редактируем процедуру ИмяПКОДляОбъектаДанных(КомпонентыОбмена, Объект, Организация), которая определяет правило конвертации объекта по имени объекта. В самый конец процедуры вставляем обработку нашего объекта

    ИначеЕсли ТипСсылки = Тип("ДокументСсылка.ВыкупТоваровХранителем") Тогда
        ИмяПКО = "Документ_ВыкупТоваровХранителем_Отправка";
    
    //-Пчелинцев    
    КонецЕсли;

    4. Добавляем правила конвертации объекта для нашего объекта. Я их копировал из документа Реализация товаров и услуг и затем отредактировал глядя на структуру документа. Обратите внимание — объект формата (получатель) — Документ.РеализацияТоваровУслуг

    Процедура ДобавитьПКО_Документ_ВыкупТоваровХранителем_Отправка(ПравилаКонвертации)
    
    	ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
    	ПравилоКонвертации.ИмяПКО            = "Документ_ВыкупТоваровХранителем_Отправка";
    	ПравилоКонвертации.ОбъектДанных      = Метаданные.Документы.ВыкупТоваровХранителем;
    	ПравилоКонвертации.ОбъектФормата     = "Документ.РеализацияТоваровУслуг";
    	ПравилоКонвертации.ПриОтправкеДанных = "ПКО_Документ_ВыкупТоваровХранителем_Отправка_ПриОтправкеДанных";
    	
    	СвойстваШапки = ПравилоКонвертации.Свойства;
    	ДобавитьПКС(СвойстваШапки, "Автор",                          "Ответственный", , "Справочник_Пользователи");
    	ДобавитьПКС(СвойстваШапки, "БанковскийСчетОрганизации",      "БанковскийСчетОрганизации", , "Справочник_БанковскиеСчетаОрганизаций_Отправка");
    	ДобавитьПКС(СвойстваШапки, "Валюта",                         "Валюта", , "Справочник_Валюты");
    	ДобавитьПКС(СвойстваШапки, "ВалютаВзаиморасчетов",           "ВалютаВзаиморасчетов", , "Справочник_Валюты");
    	ДобавитьПКС(СвойстваШапки, "", "ВидЭД", , 					 "ВидыЭД_Реализация_Отправка");      //Пчелинцев
    	ДобавитьПКС(СвойстваШапки, "Грузоотправитель",               "Грузоотправитель", , "Справочник_Контрагенты");
    	ДобавитьПКС(СвойстваШапки, "Грузополучатель",                "Грузополучатель", , "Справочник_Контрагенты");
    	ДобавитьПКС(СвойстваШапки, "Дата",                           "Дата");
    	ДобавитьПКС(СвойстваШапки, "ДоверенностьВыдана",             "ДоверенностьКемВыдана");
    	ДобавитьПКС(СвойстваШапки, "ДоверенностьДата",               "ДоверенностьДата");
    	ДобавитьПКС(СвойстваШапки, "ДоверенностьЛицо",               "ДоверенностьКомуВыдана");
    	ДобавитьПКС(СвойстваШапки, "ДоверенностьНомер",              "ДоверенностьНомер");
    	ДобавитьПКС(СвойстваШапки, "Комментарий",                    "Комментарий");
    	ДобавитьПКС(СвойстваШапки, "Контрагент",                     "Контрагент", , "Справочник_Контрагенты");
    	ДобавитьПКС(СвойстваШапки, "Менеджер",                       "Продавец", , "Справочник_Пользователи");
    	ДобавитьПКС(СвойстваШапки, "Номер",                          "Номер");
    	ДобавитьПКС(СвойстваШапки, "Организация",                    "Организация", , "Справочник_Организации_Отправка");
    	ДобавитьПКС(СвойстваШапки, "Отпустил",                       "ОтпускПроизвел", , "Справочник_ФизическиеЛица_Отправка");
    "ВидыОперацийРеализацияТоваров_Отправка");
    	ДобавитьПКС(СвойстваШапки, "ЦенаВключаетНДС",                "СуммаВключаетНДС");
    1, "Справочник_ФизическиеЛица_Отправка");
    	ДобавитьПКС(СвойстваШапки, "",                               "Договор", 1, "Справочник_ДоговорыКонтрагентов");
    "Документ_ЗаказКлиента_Отправка");
    	ДобавитьПКС(СвойстваШапки, "",                               "КратностьВзаиморасчетов", 1);
    	ДобавитьПКС(СвойстваШапки, "",                               "КурсВзаиморасчетов", 1);
    	ДобавитьПКС(СвойстваШапки, "Подразделение",                  "Подразделение", , "Справочник_Подразделения_Отправка");
    	ДобавитьПКС(СвойстваШапки, "",                               "Руководитель", 1, "Справочник_ФизическиеЛица_Отправка");
    	ДобавитьПКС(СвойстваШапки, "",                               "Склад", 1, "Справочник_Склады_Отправка");
    	
    	СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "ДополнительныеРеквизиты");
    	ДобавитьПКС(СвойстваТЧ, "", "ЗначениеСвойства", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "Свойство", 1,"Справочник_ДополнительныеРеквизиты");
    	
    	СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "Товары");
    	ДобавитьПКС(СвойстваТЧ, "", "ЕдиницаИзмерения", 1,"Справочник_ЕдиницыИзмерения");
    	ДобавитьПКС(СвойстваТЧ, "", "Количество", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "КоличествоУпаковок", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "Номенклатура", 1, "Справочник_Номенклатура_Отправка");
    	ДобавитьПКС(СвойстваТЧ, "", "НомерГТД", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "НомерСтрокиДокумента", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "СтавкаНДС", 1,"Перечисление_СтавкиНДС");
    	ДобавитьПКС(СвойстваТЧ, "", "Сумма", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "СуммаНДС", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "Упаковка", 1,"Справочник_Упаковки");
    	ДобавитьПКС(СвойстваТЧ, "", "Характеристика", 1,"Справочник_ХарактеристикиНоменклатуры");
    	ДобавитьПКС(СвойстваТЧ, "", "Цена", 1);
    	
    
    КонецПроцедуры
    
    Процедура ПКО_Документ_ВыкупТоваровХранителем_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
    	ДанныеXDTO.Вставить("ВидОперации", "РеализацияКлиенту");
    	
    	ТабТовары = ДанныеИБ.Товары.Выгрузить(,"Номенклатура, Характеристика, Количество, КоличествоУпаковок,
    		|Упаковка, Цена, Сумма, СтавкаНДС, СуммаНДС");
    	ТабТовары.Колонки.Добавить("ЕдиницаИзмерения");
    	ЗаполнитьХарактеристикуУпаковкуВТЧ(КомпонентыОбмена, ТабТовары);
    	Для каждого Строка Из ТабТовары Цикл
    	
    		Строка.ЕдиницаИзмерения = Строка.Номенклатура.ЕдиницаИзмерения;	
    	
    	КонецЦикла; 
    	ДанныеXDTO.Вставить("Склад", Справочники.Склады.НайтиПоНаименованию("Склад ОМ"));
    	ДанныеXDTO.Вставить("Товары", ТабТовары);
    КонецПроцедуры
    

    5. Собственно запускаем обмен — и наслаждаемся победой! Смотрим документ в бухгалтерии -задача решена!

    Выводы

    Доработать формат обмена не слишком сложно, если смотреть уже после сделанной работы. И есть некоторый порог вхождения в данную технологию. Без мучений и как по маслу — у меня пока не получилось.

    И еще — без Отладчика вообще ничего сделать не получиться.

    Сброшу пару ссылок по теме, возможно будут полезны

    ИТС. https://its.1c.ru/db/metod8dev#browse:13:-1:1989:2552:2561

    Инфостарт https://infostart.ru/1c/articles/695523/ и еще https://infostart.ru/1c/articles/847531/

     

    Информация с сайта https://sstud.ru/enterprise-data/?ysclid=lnjh07qjvp786564027

    Tags: , ,

    Вся операция сводится к подмена данных в файле, данными из элемента справочника рабочего места.

    Расположение Идентификатор рабочего места:

    НСИ и Администрирование -> РМК и оборудование -> Настройки РМК для текущего рабочего места -> Рабочее место -> Элемент -> "Идентификатор рабочего места"

    по скринам думаю все понятно. 

    Заменить значением в файле:

    %LocalAppData%\1C\1cv8\1cv8u.pfl

    Записать файл и перезайти в программу снова.

    Tags: ,

                USE testbase;
                GO

                SEL ECT COUNT(*) AS BeforeTruncateCount
                FROM dbo._InfoRg12088;
                GO

                TRUNCATE TABLE dbo._InfoRg12088;
                GO

                SELECT COUNT(*) AS AfterTruncateCount
                FR OM dbo._InfoRg12088;
                GO

    Tags: