Удалены все документы за 2 недели.

1. user1111947 17.12.18 16:15 Сейчас в теме
Добрый день!
Возникла проблема: исчезли ВСЕ документы за период с 1 по 14 декабря включительно. Где мы их только не искали - их нет. В товарах та же неразбериха - все что было поставлено на приход в это время - теперь в минусах.

Гуру, подскажите, есть ли возможность восстановления?
Конечно же, бэкапов никто никогда не делал. Есть база только за апрель месяц. Приходные и расходные накладные в бумажном виде отсутствуют, набить их заново просто невозможно. Возможно ли эти данные как то вернуть?

Большое спасибо за подсказки и поддержку.
1C 7.7 торговля и склад.
По теме из базы знаний
Найденные решения
13. Senator_I 135 17.12.18 17:35 Сейчас в теме
А база файловая или серверная? У меня есть обработка, которая поднимает документы даже если в 1С 7.7 они были окончательно удалены (если cdx файлы не почистили).
oleg-x; pm74; user1111947; +3 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. oleg-x 26 17.12.18 16:42 Сейчас в теме
(1) Удаленные данные не вернуть, для начало разберитесь кто удалил. У Вас кто то пошалил, неплохо так. Посмотрите кто удалял, через журнал регистрации. И что еще этот пользователь делал, может там не только документы поступления удалили.
Без бэкапов, только с бумаги, но не понятно где они у Вас, как ведете бухгалтерию. Если они территориально в другом месте, запрашивайте сканы и заводите.
Как вариант еще (если вам не критичны поступления) занесите поступление по остатку, проведя инвентаризацию.
user1111947; +1 Ответить
22. Xershi 1433 17.12.18 19:12 Сейчас в теме
(1) вам повезло конец года. Покупайте новую версию УТ.
Проведете инвентаризацию введете остатки и дело в шляпе!
Если нужна будет консультация пишите в ЛС.
Все остальные варианты по описанию с вероятностью стремящейся к 0 ничего не дадут.
user1111947; +1 Ответить
28. user1111947 17.12.18 23:18 Сейчас в теме
(22)
Куплена новая версия еще летом, на самом деле. Никак не можем перейти. Был другой программист, меня попросили поадминистрировать и корректно перейти на новую версию. Однако вероятно предыдущий коллега урезал версию 1с 77, так как обработчиков выгрузки нет. Товаров более 4к, и вбивать ручками остатки и проводить накладные - посчитали долгим и муторным занятием...
В данной теме это даже уже смешно звучит((
В идеале - вернуть утерянные 2 недели, найти обработчик выгрузки и перенести все данные в восьмерку.
Магазин работает, под новый год у них продажи зашкаливают - и тут такая катастрофа. Работают даже на выходных, два магазина. Когда делать инвентаризацию... Если только на январских праздниках. А доработать как-то нужно...
29. Xershi 1433 17.12.18 23:54 Сейчас в теме
(28) думаю механизм корректировки регистров или ввод остатков там должен быть. Внесите избытком и работайте дальше.

Ну вот к нового году перенос номенклатуры можно сделать. Или сделать инвентаризацию 31 числом. И типовым вводом остатков все перенести.
31. RSA512 18.12.18 00:57 Сейчас в теме
(1)
Добрый день!
Возникла проблема: исчезли ВСЕ документы за период с 1 по 14 декабря включительно. Где мы их только не искали - их нет. В товарах та же неразбериха - все что было поставлено на приход в это время - теперь в минусах.

Гуру, подскажите, есть ли возможность восстановления?
Конечно же, бэкапов никто никогда не делал. Есть база только за апрель месяц. Приходные и расходные накладные в бумажном виде отсутствуют, набить их заново просто невозможно. Возможно ли эти данные как то вернуть?

Большое спасибо за подсказки и поддержку.
1C 7.7 торговля и склад.


Добрый добрый, видимо кто-то у вас очень экономит на обслуживании... но это дело житейское, в любом случае первым делом стоит настроить резервное копирование,
опросить всех может кто-то из бухгалтеров делал копии,
выгружал какие-то отчеты и т.д.

проверить базу на ошибки и сравнить на целостность с конфигурацией которая от апреля...

кстати в бухгалтерию документы выгружаются может там что-то есть

примерно сколько документов ушло за 14 дней ?
32. RSA512 18.12.18 00:59 Сейчас в теме
да и в любом случае скорее всего придется делать инвентаризацию для полной уверенности в остатках, а по переход на ут 11 тоже не стоит игнорировать.
3. YannikAlx 43 17.12.18 16:54 Сейчас в теме
И конечно же ну начните хоть сейчас-то Новую жизнь !!!
И начните делать Ежедневные бэкапы...

А если завтра этот шалун удалит документы за полгода?
Что - зубы на полку?
user1111947; +1 Ответить
4. user1111947 17.12.18 16:59 Сейчас в теме
(3)
Да, я учусь на своих ошибках... В голове решение проблемы - установить программку восстановления данных и попробовать измененные файлы восстановить. Но... слабое утешение что что-то получится.
6. oleg-x 26 17.12.18 17:03 Сейчас в теме
(4) Здесь врятли получится обычной программкой, такие файлы перезатираются быстро, а они очень плохо восстанавливают перезатертые файлы, но попытка не пытка ( в вашем случае даже не знаю)
Как минимум компьютер надо выключить и подключать диск к другому и начинать, иначе все бесполезно.
user1111947; +1 Ответить
5. acanta 17.12.18 17:01 Сейчас в теме
Сделайте копию базы данных. Установите специалиста по 7ке.
7. user1111947 17.12.18 17:06 Сейчас в теме
Новая проблема вылетела.
Сейчас активно создаем на приход минусовые товары, делаем новые расходные (то что можем и нашли). Однако при проведении проблемного товара (который был на минусе ранее) выдается ошибка:
Если (Знак*НайденныйОстаток)>0 Тогда
{Глобальный модуль(1597)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)

И все тут)) Не списывается, расходная накладная не проводится.

П.С. все приходные которые нашли, ставим 1 декабрем.
8. oleg-x 26 17.12.18 17:08 Сейчас в теме
(7) (Знак*НайденныйОстаток) видимо не число, по этому и такая ошибка. Возможно последствия удаления, а может еще что. Надо проверять значения этих переменных.
user1111947; +1 Ответить
9. YannikAlx 43 17.12.18 17:12 Сейчас в теме
(7) Есть вероятность , что там спрятался NULL, то есть нет остатка в принципе по какому-то товару, если использовали запрос...
user1111947; +1 Ответить
10. user1111947 17.12.18 17:17 Сейчас в теме
12. oleg-x 26 17.12.18 17:22 Сейчас в теме
(10) Надо запускать в режиме отладка и ставить точку остановки на этом куске кода. И смотреть чему равны данные переменные.
user1111947; +1 Ответить
11. oleg-x 26 17.12.18 17:18 Сейчас в теме
(9) Врятли иначе бы выдало ошибку при умножение: преобразования значения к типу не может быть выполнено
user1111947; +1 Ответить
17. YannikAlx 43 17.12.18 17:46 Сейчас в теме
(11) А
(Знак*НайденныйОстаток) видимо не число
не выдало бы
преобразования значения к типу не может быть выполнено

?
19. oleg-x 26 17.12.18 17:50 Сейчас в теме
(17) При умножение на нал, дает ошибку преобразования типов, но может в 1С77 это не так.
20. Senator_I 135 17.12.18 17:51 Сейчас в теме
(19)
дает ошибку преобразования типов, но может в 1С77 это не так

Все так. Смотрю, ошибка странная, как будто еще и в конфе им наломали что-то.
user1111947; +1 Ответить
13. Senator_I 135 17.12.18 17:35 Сейчас в теме
А база файловая или серверная? У меня есть обработка, которая поднимает документы даже если в 1С 7.7 они были окончательно удалены (если cdx файлы не почистили).
oleg-x; pm74; user1111947; +3 Ответить
14. oleg-x 26 17.12.18 17:42 Сейчас в теме
(13) Судя по всему у них файловая, раз собрались восстановлением файлов делать. Так что возможно вы спасете их :-)
15. Senator_I 135 17.12.18 17:43 Сейчас в теме
(14) ;-) Посмотрим. Может имели в виду восстановлением файлов sql базы.
16. oleg-x 26 17.12.18 17:45 Сейчас в теме
(15) в 1С77 они что в файлах хранятся на диске?
18. Senator_I 135 17.12.18 17:47 Сейчас в теме
(16) Не в 1С, а файлы скуля, log и mdf, хотя из них не вытащить ничего особого, если на скуле бэкапы не настроены, из журнала транзакций максимум попытаться можно.
27. user1111947 17.12.18 23:10 Сейчас в теме
(13)
Да, у нас файловая

Я незнаю, что почистили а что нет((
21. Noob001 17.12.18 19:02 Сейчас в теме
Я бы посоветовал, прежде чем что-то делать в таких случаях, скопировать базу в отдельное место.
Прогнать проверкой диска , диск на котором находилась база.
Сделать тестирование и исправление через конфигуратор.
В зависимости от результатов этого уже плясать.
user1111947; +1 Ответить
23. Senator_I 135 17.12.18 19:25 Сейчас в теме
(21) Видите, автора в теме нет, уже пошли по-новой все вбивать.
24. Noob001 17.12.18 19:31 Сейчас в теме
(23) Такого там навбивают, если у них структура БД порушилась.
Но с другой стороны быстро прийдут к варианту (22) :)))
Что на самом деле самое верное.
25. Rusromanspb 17.12.18 20:44 Сейчас в теме
Посмотрите, может у вас стоит фильтр по дате?
26. Rusromanspb 17.12.18 20:47 Сейчас в теме
#Область СлужебныйПрограммныйИнтерфейс

// Заполняет массив типов, для которых при выгрузке необходимо использовать аннотацию
// ссылок в файлах выгрузки.
//
// Параметры:
//  Типы - Массив(ОбъектМетаданных).
//
Процедура ПриЗаполненииТиповТребующихАннотациюСсылокПриВыгрузке(Типы) Экспорт
	
	ОбъектыСПредопределеннымиЭлементами = ВыгрузкаЗагрузкаПредопределенныхДанныхПовтИсп.ОбъектыМетаданныхСПредопределеннымиЭлементами();
	Для Каждого ИмяТипа Из ОбъектыСПредопределеннымиЭлементами Цикл
		
		Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяТипа) Тогда
			Типы.Добавить(Метаданные.НайтиПоПолномуИмени(ИмяТипа));
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

// Вызывается при регистрации произвольных обработчиков выгрузки данных.
//
// Параметры: ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется
//  дополнить эту таблицу значений информацией о регистрируемых произвольных
//  обработчиках выгрузки данных. Колонки:
//    ОбъектМетаданных - ОбъектМетаданных, при выгрузке данных которого должен
//      вызываться регистрируемый обработчик,
//    Обработчик - ОбщийМодуль, общий модуль, в котором реализован произвольный
//      обработчик выгрузки данных. Набор экспортных процедур, которые должны
//      быть реализованы в обработчике, зависит от установки значений следующих
//      колонок таблицы значений,
//    Версия - Строка - номер версии интерфейса обработчиков выгрузки / загрузки данных,
//      поддерживаемого обработчиком,
//    ПередВыгрузкойТипа - Булево, флаг необходимости вызова обработчика перед
//      выгрузкой всех объектов информационной базы, относящихся к данному объекту
//      метаданных. Если присвоено значение Истина - в общем модуле обработчика должна
//      быть реализована экспортируемая процедура ПередВыгрузкойТипа(),
//      поддерживающая следующие параметры:
//        Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер
//          контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий
//          к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера,
//        Сериализатор - СериализаторXDTO, инициализированный с поддержкой выполнения
//          аннотации ссылок. В случае, если в произвольном обработчике выгрузки требуется
//          выполнять выгрузку дополнительных данных - следует использовать
//          СериализаторXDTO, переданный в процедуру ПередВыгрузкойТипа() в качестве
//          значения параметра Сериализатор, а не полученных с помощью свойства глобального
//          контекста СериализаторXDTO,
//        ОбъектМетаданных - ОбъектМетаданных, перед выгрузкой данных которого
//          был вызван обработчик,
//        Отказ - Булево. Если в процедуре ПередВыгрузкойТипа() установить значение
//          данного параметра равным Истина - выгрузка объектов, соответствующих
//          текущему объекту метаданных, выполняться не будет.
//    ПередВыгрузкойОбъекта - Булево, флаг необходимости вызова обработчика перед
//      выгрузкой конкретного объекта информационной базы. Если присвоено значение
//      Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура
//      ПередВыгрузкойОбъекта(), поддерживающая следующие параметры:
//        Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер
//          контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий
//          к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера,
//        МенеджерВыгрузкиОбъекта - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерВыгрузкиДанныхИнформационнойБа­зы -
//          менеджер выгрузки текущего объекта. Подробнее см. комментарий к программному интерфейсу обработки
//          ВыгрузкаЗагрузкаДанныхМенеджерВыгрузкиДанныхИнформационнойБа­зы. Параметр передается только при вызове
//          процедур обработчиков, для которых при регистрации указана версия не ниже 1.0.0.1,
//        Сериализатор - СериализаторXDTO, инициализированный с поддержкой выполнения
//          аннотации ссылок. В случае, если в произвольном обработчике выгрузки требуется
//          выполнять выгрузку дополнительных данных - следует использовать
//          СериализаторXDTO, переданный в процедуру ПередВыгрузкойОбъекта() в качестве
//          значения параметра Сериализатор, а не полученных с помощью свойства глобального
//          контекста СериализаторXDTO,
//        Объект - КонстантаМенеджерЗначения.*, СправочникОбъект.*, ДокументОбъект.*,
//          БизнесПроцессОбъект.*, ЗадачаОбъект.*, ПланСчетовОбъект.*, ПланОбменаОбъект.*,
//          ПланВидовХарактеристикОбъект.*, ПланВидовРасчетаОбъект.*, РегистрСведенийНаборЗаписей.*,
//          РегистрНакопленияНаборЗаписей.*, РегистрБухгалтерииНаборЗаписей.*,
//          РегистрРасчетаНаборЗаписей.*, ПоследовательностьНаборЗаписей.*, ПерерасчетНаборЗаписей.* -
//          объект данных информационной базы, перед выгрузкой которого был вызван обработчик.
//          Значение, переданное в процедуру ПередВыгрузкойОбъекта() в качестве значения параметра
//          Объект может быть модифицировано внутри обработчика ПередВыгрузкойОбъекта(), при
//          этом внесенные изменения будут отражены в сериализации объекта в файлах выгрузки, но
//          не будут зафиксированы в информационной базе
//        Артефакты - Массив(ОбъектXDTO) - набор дополнительной информации, логически неразрывно
//          связанной с объектом, но не являющейся его частью (артефакты объекта). Артефакты должны
//          сформированы внутри обработчика ПередВыгрузкойОбъекта() и добавлены в массив, переданный
//          в качестве значения параметра Артефакты. Каждый артефакт должен являться XDTO-объектом,
//          для типа которого в качестве базового типа используется абстрактный XDTO-тип
//          {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}Artefact. Допускается использовать XDTO-пакеты,
//          помимо изначально поставляемых в составе подсистемы ВыгрузкаЗагрузкаДанных. В дальнейшем
//          артефакты, сформированные в процедуре ПередВыгрузкойОбъекта(), будут доступны в процедурах
//          обработчиков загрузки данных (см. комментарий к процедуре ПриРегистрацииОбработчиковЗагрузкиДанных().
//        Отказ - Булево. Если в процедуре ПередВыгрузкойОбъекта() установить значение
//           данного параметра равным Истина - выгрузка объекта, для которого был вызван обработчик,
//           выполняться не будет.
//    ПослеВыгрузкиТипа() - Булево, флаг необходимости вызова обработчика после выгрузки всех
//      объектов информационной базы, относящихся к данному объекту метаданных. Если присвоено значение
//      Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура
//      ПослеВыгрузкиТипа(), поддерживающая следующие параметры:
//        Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер
//          контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий
//          к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера,
//        Сериализатор - СериализаторXDTO, инициализированный с поддержкой выполнения
//          аннотации ссылок. В случае, если в произвольном обработчике выгрузки требуется
//          выполнять выгрузку дополнительных данных - следует использовать
//          СериализаторXDTO, переданный в процедуру ПослеВыгрузкиТипа() в качестве
//          значения параметра Сериализатор, а не полученных с помощью свойства глобального
//          контекста СериализаторXDTO,
//        ОбъектМетаданных - ОбъектМетаданных, после выгрузки данных которого
//          был вызван обработчик.
//
Процедура ПриРегистрацииОбработчиковВыгрузкиДанных(ТаблицаОбработчиков) Экспорт
	
	ОбъектыСПредопределеннымиЭлементами = ВыгрузкаЗагрузкаПредопределенныхДанныхПовтИсп.ОбъектыМетаданныхСПредопределеннымиЭлементами();
	Для Каждого ИмяОбъектаМетаданных Из ОбъектыСПредопределеннымиЭлементами Цикл
		
		Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяОбъектаМетаданных) Тогда
			
			НовыйОбработчик = ТаблицаОбработчиков.Добавить();
			НовыйОбработчик.ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных);
			НовыйОбработчик.Обработчик = ВыгрузкаЗагрузкаПредопределенныхДанных;
			НовыйОбработчик.ПослеВыгрузкиОбъекта = Истина;
			НовыйОбработчик.Версия = ВыгрузкаЗагрузкаДанныхСлужебныйСобытия.ВерсияОбработчиков1_0_0_1();
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Процедура ПослеВыгрузкиОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты) Экспорт
	
	Если ОбщегоНазначенияБТС.ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(Объект.Метаданные()) Тогда
		
		Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(Объект.Метаданные().ПолноеИмя()) Тогда
			
			Если Объект.Предопределенный Тогда
				
				ЕстественныйКлюч = Новый Структура("ИмяПредопределенныхДанных", Объект.ИмяПредопределенныхДанных);
				МенеджерВыгрузкиОбъекта.ТребуетсяСопоставитьСсылкуПриЗагрузке(Объект.Ссылка, ЕстественныйКлюч);
				
			КонецЕсли;
			
		Иначе
			
			ВызватьИсключение СтрШаблон(
			НСтр("ru = 'Объект метаданных %1 не может быть обработан обработчиком
                  |ВыгрузкаЗагрузкаПредопределенныхДанных.ПередВыгрузкойОбъекта(),
                  |т.к. не требуется обеспечивать сопоставление ссылок на его предопределенные элементы!'", Метаданные.ОсновнойЯзык.КодЯзыка),
			Объект.Метаданные().ПолноеИмя()
		);
			
		КонецЕсли;
		
	Иначе
		
		ВызватьИсключение СтрШаблон(
			НСтр("ru = 'Объект метаданных %1 не может быть обработан обработчиком
                  |ВыгрузкаЗагрузкаПредопределенныхДанных.ПередВыгрузкойОбъекта(),
                  |т.к. не может содержать предопределенных элементов!'", Метаданные.ОсновнойЯзык.КодЯзыка),
			Объект.Метаданные().ПолноеИмя()
		);
		
	КонецЕсли;
	
КонецПроцедуры

Процедура ПередОчисткойДанных(Контейнер) Экспорт
	
	УстановитьИнициализациюПредопределенныхДанныхТекущейОбластиД­анных(Контейнер.ПараметрыЗагрузки().ЗагружаемыеТипы);
	
КонецПроцедуры

Процедура ПриРегистрацииОбработчиковЗагрузкиДанных(ТаблицаОбработчиков) Экспорт
	
	НовыйОбработчик = ТаблицаОбработчиков.Добавить();
	НовыйОбработчик.Обработчик = ВыгрузкаЗагрузкаПредопределенныхДанных;
	НовыйОбработчик.ПередОчисткойДанных = Истина;
	НовыйОбработчик.Версия = ВыгрузкаЗагрузкаДанныхСлужебныйСобытия.ВерсияОбработчиков1_0_0_1();
	
	ОбъектыСПредопределеннымиЭлементами = ВыгрузкаЗагрузкаПредопределенныхДанныхПовтИсп.ОбъектыМетаданныхСПредопределеннымиЭлементами();
	Для Каждого ИмяОбъектаМетаданных Из ОбъектыСПредопределеннымиЭлементами Цикл
		
		Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяОбъектаМетаданных) Тогда
			
			НовыйОбработчик = ТаблицаОбработчиков.Добавить();
			НовыйОбработчик.ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных);
			НовыйОбработчик.Обработчик = ВыгрузкаЗагрузкаПредопределенныхДанных;
			НовыйОбработчик.ПередСопоставлениемСсылок = Истина;
			НовыйОбработчик.ПередЗагрузкойОбъекта = Истина;
			НовыйОбработчик.Версия = ВыгрузкаЗагрузкаДанныхСлужебныйСобытия.ВерсияОбработчиков1_0_0_1();
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Процедура ПередСопоставлениемСсылок(Контейнер, ОбъектМетаданных, ТаблицаИсходныхСсылок, СтандартнаяОбработка, Отказ) Экспорт
	
	Если ОбщегоНазначенияБТС.ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(ОбъектМетаданных)
			И ТаблицаИсходныхСсылок.Колонки.Найти("ИмяПредопределенныхДанных") <> Неопределено Тогда
		
		СтандартнаяОбработка = Ложь;
		
	КонецЕсли;
	
КонецПроцедуры

Функция СопоставитьСсылки(Контейнер, МенеджерСопоставленияСсылок, ТаблицаИсходныхСсылок) Экспорт
	
	ИсходныеСсылкиДляСтандартнойОбработки = Новый ТаблицаЗначений();
	Для Каждого Колонка Из ТаблицаИсходныхСсылок.Колонки Цикл
		Если Колонка.Имя <> "ИмяПредопределенныхДанных" Тогда
			ИсходныеСсылкиДляСтандартнойОбработки.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
		КонецЕсли;
	КонецЦикла;
	
	ИмяКолонки = МенеджерСопоставленияСсылок.ИмяКолонкиИсходныхСсылок();
	
	Результат = Новый ТаблицаЗначений();
	Результат.Колонки.Добавить(ИмяКолонки, ТаблицаИсходныхСсылок.Колонки.Найти(ИмяКолонки).ТипЗначения);
	Результат.Колонки.Добавить("Ссылка", ТаблицаИсходныхСсылок.Колонки.Найти(ИмяКолонки).ТипЗначения);
	
	ОбъектМетаданных = Неопределено;
	
	Для Каждого СтрокаТаблицыИсходныхСсылок Из ТаблицаИсходныхСсылок Цикл
		
		Если ЗначениеЗаполнено(СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных) Тогда
			
			ТекстЗапроса = 
				"ВЫБРАТЬ
				|	Таблица.Ссылка КАК Ссылка
				|ИЗ
				|	" + СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные().ПолноеИмя() + " КАК Таблица
				|ГДЕ
				|	Таблица.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных";
			Запрос = Новый Запрос(ТекстЗапроса);
			Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных);
			
			РезультатЗапроса = Запрос.Выполнить();
			Если Не РезультатЗапроса.Пустой() Тогда
				
				Выборка = РезультатЗапроса.Выбрать();
				
				Если Выборка.Количество() = 1 Тогда
					
					Выборка.Следующий();
					
					СтрокаРезультата = Результат.Добавить();
					СтрокаРезультата.Ссылка = Выборка.Ссылка;
					СтрокаРезультата[ИмяКолонки] = СтрокаТаблицыИсходныхСсылок[ИмяКолонки];
					
				Иначе
					
					ВызватьИсключение СтрШаблон(
						НСтр("ru = 'Обнаружено дублирование предопределенных элементов %1 в таблице %2!'", Метаданные.ОсновнойЯзык.КодЯзыка),
						СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных,
						СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные().ПолноеИмя()
					);
					
				КонецЕсли;
				
			КонецЕсли;
			
		Иначе
			
			Если ОбъектМетаданных = Неопределено Тогда
				ОбъектМетаданных = СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные();
			КонецЕсли;
			
			СсылкаДляСтандартнойОбработки = ИсходныеСсылкиДляСтандартнойОбработки.Добавить();
			ЗаполнитьЗначенияСвойств(СсылкаДляСтандартнойОбработки, СтрокаТаблицыИсходныхСсылок);
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если ИсходныеСсылкиДляСтандартнойОбработки.Количество() > 0 Тогда
		
		Выборка = Обработки.ВыгрузкаЗагрузкаДанныхМенеджерСопоставленияСсылок.ВыборкаСопоставленияСсылок(
			ОбъектМетаданных, ИсходныеСсылкиДляСтандартнойОбработки, ИмяКолонки);
		
		Пока Выборка.Следующий() Цикл
			
			СтрокаРезультата = Результат.Добавить();
			СтрокаРезультата.Ссылка = Выборка.Ссылка;
			СтрокаРезультата[ИмяКолонки] = Выборка[ИмяКолонки];
			
		КонецЦикла;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

Процедура ПередЗагрузкойОбъекта(Контейнер, Объект, Артефакты, Отказ) Экспорт
	
	ОбъектМетаданных = Объект.Метаданные();
	
	Если НЕ ОбщегоНазначенияБТС.ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(ОбъектМетаданных) Тогда
		
		ВызватьИсключение СтрШаблон(
			НСтр("ru = 'Объект метаданных %1 не может быть обработан обработчиком
                  |ВыгрузкаЗагрузкаПредопределенныхДанных.ПередЗагрузкойОбъекта(),
                  |т.к. не может содержать предопределенных элементов!'", Метаданные.ОсновнойЯзык.КодЯзыка),
			Объект.Метаданные().ПолноеИмя()
		);
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура УстановитьИнициализациюПредопределенныхДанныхТекущейОбластиД­анных(ОбъектыМетаданных)
	
	Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл
		
		Если ОбщегоНазначенияБТС.ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(ОбъектМетаданных) Тогда
			
			Если ОбъектМетаданных.ПолучитьИменаПредопределенных().Количество() > 0 Тогда
				
				Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя());
				Менеджер.УстановитьИнициализациюПредопределенныхДанных(Истина);
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Функция ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяТипа)
	
	Если ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ИмяТипа, РаботаВМоделиСервиса.РазделительОсновныхДанных())
		ИЛИ ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ИмяТипа, РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда
		
		Возврат Ложь;
			
	Иначе
		
		// Для неразделенных объектов сопоставление ссылок на предопределенные элементы требуется всегда.
		Возврат Истина;
		
	КонецЕсли;
	
КонецФункции

#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс

// Заполняет массив типов, для которых при выгрузке необходимо использовать аннотацию
// ссылок в файлах выгрузки.
//
// Параметры:
//  Типы - Массив(ОбъектМетаданных).
//
Процедура ПриЗаполненииТиповТребующихАннотациюСсылокПриВыгрузке(Типы) Экспорт
	
	ОбъектыСПредопределеннымиЭлементами = ВыгрузкаЗагрузкаПредопределенныхДанныхПовтИсп.ОбъектыМетаданныхСПредопределеннымиЭлементами();
	Для Каждого ИмяТипа Из ОбъектыСПредопределеннымиЭлементами Цикл
		
		Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяТипа) Тогда
			Типы.Добавить(Метаданные.НайтиПоПолномуИмени(ИмяТипа));
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

// Вызывается при регистрации произвольных обработчиков выгрузки данных.
//
// Параметры: ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется
//  дополнить эту таблицу значений информацией о регистрируемых произвольных
//  обработчиках выгрузки данных. Колонки:
//    ОбъектМетаданных - ОбъектМетаданных, при выгрузке данных которого должен
//      вызываться регистрируемый обработчик,
//    Обработчик - ОбщийМодуль, общий модуль, в котором реализован произвольный
//      обработчик выгрузки данных. Набор экспортных процедур, которые должны
//      быть реализованы в обработчике, зависит от установки значений следующих
//      колонок таблицы значений,
//    Версия - Строка - номер версии интерфейса обработчиков выгрузки / загрузки данных,
//      поддерживаемого обработчиком,
//    ПередВыгрузкойТипа - Булево, флаг необходимости вызова обработчика перед
//      выгрузкой всех объектов информационной базы, относящихся к данному объекту
//      метаданных. Если присвоено значение Истина - в общем модуле обработчика должна
//      быть реализована экспортируемая процедура ПередВыгрузкойТипа(),
//      поддерживающая следующие параметры:
//        Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер
//          контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий
//          к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера,
//        Сериализатор - СериализаторXDTO, инициализированный с поддержкой выполнения
//          аннотации ссылок. В случае, если в произвольном обработчике выгрузки требуется
//          выполнять выгрузку дополнительных данных - следует использовать
//          СериализаторXDTO, переданный в процедуру ПередВыгрузкойТипа() в качестве
//          значения параметра Сериализатор, а не полученных с помощью свойства глобального
//          контекста СериализаторXDTO,
//        ОбъектМетаданных - ОбъектМетаданных, перед выгрузкой данных которого
//          был вызван обработчик,
//        Отказ - Булево. Если в процедуре ПередВыгрузкойТипа() установить значение
//          данного параметра равным Истина - выгрузка объектов, соответствующих
//          текущему объекту метаданных, выполняться не будет.
//    ПередВыгрузкойОбъекта - Булево, флаг необходимости вызова обработчика перед
//      выгрузкой конкретного объекта информационной базы. Если присвоено значение
//      Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура
//      ПередВыгрузкойОбъекта(), поддерживающая следующие параметры:
//        Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер
//          контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий
//          к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера,
//        МенеджерВыгрузкиОбъекта - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерВыгрузкиДанныхИнформационнойБа­зы -
//          менеджер выгрузки текущего объекта. Подробнее см. комментарий к программному интерфейсу обработки
//          ВыгрузкаЗагрузкаДанныхМенеджерВыгрузкиДанныхИнформационнойБа­зы. Параметр передается только при вызове
//          процедур обработчиков, для которых при регистрации указана версия не ниже 1.0.0.1,
//        Сериализатор - СериализаторXDTO, инициализированный с поддержкой выполнения
//          аннотации ссылок. В случае, если в произвольном обработчике выгрузки требуется
//          выполнять выгрузку дополнительных данных - следует использовать
//          СериализаторXDTO, переданный в процедуру ПередВыгрузкойОбъекта() в качестве
//          значения параметра Сериализатор, а не полученных с помощью свойства глобального
//          контекста СериализаторXDTO,
//        Объект - КонстантаМенеджерЗначения.*, СправочникОбъект.*, ДокументОбъект.*,
//          БизнесПроцессОбъект.*, ЗадачаОбъект.*, ПланСчетовОбъект.*, ПланОбменаОбъект.*,
//          ПланВидовХарактеристикОбъект.*, ПланВидовРасчетаОбъект.*, РегистрСведенийНаборЗаписей.*,
//          РегистрНакопленияНаборЗаписей.*, РегистрБухгалтерииНаборЗаписей.*,
//          РегистрРасчетаНаборЗаписей.*, ПоследовательностьНаборЗаписей.*, ПерерасчетНаборЗаписей.* -
//          объект данных информационной базы, перед выгрузкой которого был вызван обработчик.
//          Значение, переданное в процедуру ПередВыгрузкойОбъекта() в качестве значения параметра
//          Объект может быть модифицировано внутри обработчика ПередВыгрузкойОбъекта(), при
//          этом внесенные изменения будут отражены в сериализации объекта в файлах выгрузки, но
//          не будут зафиксированы в информационной базе
//        Артефакты - Массив(ОбъектXDTO) - набор дополнительной информации, логически неразрывно
//          связанной с объектом, но не являющейся его частью (артефакты объекта). Артефакты должны
//          сформированы внутри обработчика ПередВыгрузкойОбъекта() и добавлены в массив, переданный
//          в качестве значения параметра Артефакты. Каждый артефакт должен являться XDTO-объектом,
//          для типа которого в качестве базового типа используется абстрактный XDTO-тип
//          {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}Artefact. Допускается использовать XDTO-пакеты,
//          помимо изначально поставляемых в составе подсистемы ВыгрузкаЗагрузкаДанных. В дальнейшем
//          артефакты, сформированные в процедуре ПередВыгрузкойОбъекта(), будут доступны в процедурах
//          обработчиков загрузки данных (см. комментарий к процедуре ПриРегистрацииОбработчиковЗагрузкиДанных().
//        Отказ - Булево. Если в процедуре ПередВыгрузкойОбъекта() установить значение
//           данного параметра равным Истина - выгрузка объекта, для которого был вызван обработчик,
//           выполняться не будет.
//    ПослеВыгрузкиТипа() - Булево, флаг необходимости вызова обработчика после выгрузки всех
//      объектов информационной базы, относящихся к данному объекту метаданных. Если присвоено значение
//      Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура
//      ПослеВыгрузкиТипа(), поддерживающая следующие параметры:
//        Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер
//          контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий
//          к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера,
//        Сериализатор - СериализаторXDTO, инициализированный с поддержкой выполнения
//          аннотации ссылок. В случае, если в произвольном обработчике выгрузки требуется
//          выполнять выгрузку дополнительных данных - следует использовать
//          СериализаторXDTO, переданный в процедуру ПослеВыгрузкиТипа() в качестве
//          значения параметра Сериализатор, а не полученных с помощью свойства глобального
//          контекста СериализаторXDTO,
//        ОбъектМетаданных - ОбъектМетаданных, после выгрузки данных которого
//          был вызван обработчик.
//
Процедура ПриРегистрацииОбработчиковВыгрузкиДанных(ТаблицаОбработчиков) Экспорт
	
	ОбъектыСПредопределеннымиЭлементами = ВыгрузкаЗагрузкаПредопределенныхДанныхПовтИсп.ОбъектыМетаданныхСПредопределеннымиЭлементами();
	Для Каждого ИмяОбъектаМетаданных Из ОбъектыСПредопределеннымиЭлементами Цикл
		
		Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяОбъектаМетаданных) Тогда
			
			НовыйОбработчик = ТаблицаОбработчиков.Добавить();
			НовыйОбработчик.ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных);
			НовыйОбработчик.Обработчик = ВыгрузкаЗагрузкаПредопределенныхДанных;
			НовыйОбработчик.ПослеВыгрузкиОбъекта = Истина;
			НовыйОбработчик.Версия = ВыгрузкаЗагрузкаДанныхСлужебныйСобытия.ВерсияОбработчиков1_0_0_1();
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Процедура ПослеВыгрузкиОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты) Экспорт
	
	Если ОбщегоНазначенияБТС.ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(Объект.Метаданные()) Тогда
		
		Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(Объект.Метаданные().ПолноеИмя()) Тогда
			
			Если Объект.Предопределенный Тогда
				
				ЕстественныйКлюч = Новый Структура("ИмяПредопределенныхДанных", Объект.ИмяПредопределенныхДанных);
				МенеджерВыгрузкиОбъекта.ТребуетсяСопоставитьСсылкуПриЗагрузке(Объект.Ссылка, ЕстественныйКлюч);
				
			КонецЕсли;
			
		Иначе
			
			ВызватьИсключение СтрШаблон(
			НСтр("ru = 'Объект метаданных %1 не может быть обработан обработчиком
                  |ВыгрузкаЗагрузкаПредопределенныхДанных.ПередВыгрузкойОбъекта(),
                  |т.к. не требуется обеспечивать сопоставление ссылок на его предопределенные элементы!'", Метаданные.ОсновнойЯзык.КодЯзыка),
			Объект.Метаданные().ПолноеИмя()
		);
			
		КонецЕсли;
		
	Иначе
		
		ВызватьИсключение СтрШаблон(
			НСтр("ru = 'Объект метаданных %1 не может быть обработан обработчиком
                  |ВыгрузкаЗагрузкаПредопределенныхДанных.ПередВыгрузкойОбъекта(),
                  |т.к. не может содержать предопределенных элементов!'", Метаданные.ОсновнойЯзык.КодЯзыка),
			Объект.Метаданные().ПолноеИмя()
		);
		
	КонецЕсли;
	
КонецПроцедуры

Процедура ПередОчисткойДанных(Контейнер) Экспорт
	
	УстановитьИнициализациюПредопределенныхДанныхТекущейОбластиД­анных(Контейнер.ПараметрыЗагрузки().ЗагружаемыеТипы);
	
КонецПроцедуры

Процедура ПриРегистрацииОбработчиковЗагрузкиДанных(ТаблицаОбработчиков) Экспорт
	
	НовыйОбработчик = ТаблицаОбработчиков.Добавить();
	НовыйОбработчик.Обработчик = ВыгрузкаЗагрузкаПредопределенныхДанных;
	НовыйОбработчик.ПередОчисткойДанных = Истина;
	НовыйОбработчик.Версия = ВыгрузкаЗагрузкаДанныхСлужебныйСобытия.ВерсияОбработчиков1_0_0_1();
	
	ОбъектыСПредопределеннымиЭлементами = ВыгрузкаЗагрузкаПредопределенныхДанныхПовтИсп.ОбъектыМетаданныхСПредопределеннымиЭлементами();
	Для Каждого ИмяОбъектаМетаданных Из ОбъектыСПредопределеннымиЭлементами Цикл
		
		Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяОбъектаМетаданных) Тогда
			
			НовыйОбработчик = ТаблицаОбработчиков.Добавить();
			НовыйОбработчик.ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных);
			НовыйОбработчик.Обработчик = ВыгрузкаЗагрузкаПредопределенныхДанных;
			НовыйОбработчик.ПередСопоставлениемСсылок = Истина;
			НовыйОбработчик.ПередЗагрузкойОбъекта = Истина;
			НовыйОбработчик.Версия = ВыгрузкаЗагрузкаДанныхСлужебныйСобытия.ВерсияОбработчиков1_0_0_1();
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Процедура ПередСопоставлениемСсылок(Контейнер, ОбъектМетаданных, ТаблицаИсходныхСсылок, СтандартнаяОбработка, Отказ) Экспорт
	
	Если ОбщегоНазначенияБТС.ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(ОбъектМетаданных)
			И ТаблицаИсходныхСсылок.Колонки.Найти("ИмяПредопределенныхДанных") <> Неопределено Тогда
		
		СтандартнаяОбработка = Ложь;
		
	КонецЕсли;
	
КонецПроцедуры

Функция СопоставитьСсылки(Контейнер, МенеджерСопоставленияСсылок, ТаблицаИсходныхСсылок) Экспорт
	
	ИсходныеСсылкиДляСтандартнойОбработки = Новый ТаблицаЗначений();
	Для Каждого Колонка Из ТаблицаИсходныхСсылок.Колонки Цикл
		Если Колонка.Имя <> "ИмяПредопределенныхДанных" Тогда
			ИсходныеСсылкиДляСтандартнойОбработки.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
		КонецЕсли;
	КонецЦикла;
	
	ИмяКолонки = МенеджерСопоставленияСсылок.ИмяКолонкиИсходныхСсылок();
	
	Результат = Новый ТаблицаЗначений();
	Результат.Колонки.Добавить(ИмяКолонки, ТаблицаИсходныхСсылок.Колонки.Найти(ИмяКолонки).ТипЗначения);
	Результат.Колонки.Добавить("Ссылка", ТаблицаИсходныхСсылок.Колонки.Найти(ИмяКолонки).ТипЗначения);
	
	ОбъектМетаданных = Неопределено;
	
	Для Каждого СтрокаТаблицыИсходныхСсылок Из ТаблицаИсходныхСсылок Цикл
		
		Если ЗначениеЗаполнено(СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных) Тогда
			
			ТекстЗапроса = 
				"ВЫБРАТЬ
				|	Таблица.Ссылка КАК Ссылка
				|ИЗ
				|	" + СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные().ПолноеИмя() + " КАК Таблица
				|ГДЕ
				|	Таблица.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных";
			Запрос = Новый Запрос(ТекстЗапроса);
			Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных);
			
			РезультатЗапроса = Запрос.Выполнить();
			Если Не РезультатЗапроса.Пустой() Тогда
				
				Выборка = РезультатЗапроса.Выбрать();
				
				Если Выборка.Количество() = 1 Тогда
					
					Выборка.Следующий();
					
					СтрокаРезультата = Результат.Добавить();
					СтрокаРезультата.Ссылка = Выборка.Ссылка;
					СтрокаРезультата[ИмяКолонки] = СтрокаТаблицыИсходныхСсылок[ИмяКолонки];
					
				Иначе
					
					ВызватьИсключение СтрШаблон(
						НСтр("ru = 'Обнаружено дублирование предопределенных элементов %1 в таблице %2!'", Метаданные.ОсновнойЯзык.КодЯзыка),
						СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных,
						СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные().ПолноеИмя()
					);
					
				КонецЕсли;
				
			КонецЕсли;
			
		Иначе
			
			Если ОбъектМетаданных = Неопределено Тогда
				ОбъектМетаданных = СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные();
			КонецЕсли;
			
			СсылкаДляСтандартнойОбработки = ИсходныеСсылкиДляСтандартнойОбработки.Добавить();
			ЗаполнитьЗначенияСвойств(СсылкаДляСтандартнойОбработки, СтрокаТаблицыИсходныхСсылок);
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если ИсходныеСсылкиДляСтандартнойОбработки.Количество() > 0 Тогда
		
		Выборка = Обработки.ВыгрузкаЗагрузкаДанныхМенеджерСопоставленияСсылок.ВыборкаСопоставленияСсылок(
			ОбъектМетаданных, ИсходныеСсылкиДляСтандартнойОбработки, ИмяКолонки);
		
		Пока Выборка.Следующий() Цикл
			
			СтрокаРезультата = Результат.Добавить();
			СтрокаРезультата.Ссылка = Выборка.Ссылка;
			СтрокаРезультата[ИмяКолонки] = Выборка[ИмяКолонки];
			
		КонецЦикла;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

Процедура ПередЗагрузкойОбъекта(Контейнер, Объект, Артефакты, Отказ) Экспорт
	
	ОбъектМетаданных = Объект.Метаданные();
	
	Если НЕ ОбщегоНазначенияБТС.ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(ОбъектМетаданных) Тогда
		
		ВызватьИсключение СтрШаблон(
			НСтр("ru = 'Объект метаданных %1 не может быть обработан обработчиком
                  |ВыгрузкаЗагрузкаПредопределенныхДанных.ПередЗагрузкойОбъекта(),
                  |т.к. не может содержать предопределенных элементов!'", Метаданные.ОсновнойЯзык.КодЯзыка),
			Объект.Метаданные().ПолноеИмя()
		);
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура УстановитьИнициализациюПредопределенныхДанныхТекущейОбластиД­анных(ОбъектыМетаданных)
	
	Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл
		
		Если ОбщегоНазначенияБТС.ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(ОбъектМетаданных) Тогда
			
			Если ОбъектМетаданных.ПолучитьИменаПредопределенных().Количество() > 0 Тогда
				
				Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя());
				Менеджер.УстановитьИнициализациюПредопределенныхДанных(Истина);
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Функция ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяТипа)
	
	Если ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ИмяТипа, РаботаВМоделиСервиса.РазделительОсновныхДанных())
		ИЛИ ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ИмяТипа, РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда
		
		Возврат Ложь;
			
	Иначе
		
		// Для неразделенных объектов сопоставление ссылок на предопределенные элементы требуется всегда.
		Возврат Истина;
		
	КонецЕсли;
	
КонецФункции

#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс

// Заполняет массив типов, для которых при выгрузке необходимо использовать аннотацию
// ссылок в файлах выгрузки.
//
// Параметры:
//  Типы - Массив(ОбъектМетаданных).
//
Процедура ПриЗаполненииТиповТребующихАннотациюСсылокПриВыгрузке(Типы) Экспорт
	
	ОбъектыСПредопределеннымиЭлементами = ВыгрузкаЗагрузкаПредопределенныхДанныхПовтИсп.ОбъектыМетаданныхСПредопределеннымиЭлементами();
	Для Каждого ИмяТипа Из ОбъектыСПредопределеннымиЭлементами Цикл
		
		Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяТипа) Тогда
			Типы.Добавить(Метаданные.НайтиПоПолномуИмени(ИмяТипа));
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

// Вызывается при регистрации произвольных обработчиков выгрузки данных.
//
// Параметры: ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется
//  дополнить эту таблицу значений информацией о регистрируемых произвольных
//  обработчиках выгрузки данных. Колонки:
//    ОбъектМетаданных - ОбъектМетаданных, при выгрузке данных которого должен
//      вызываться регистрируемый обработчик,
//    Обработчик - ОбщийМодуль, общий модуль, в котором реализован произвольный
//      обработчик выгрузки данных. Набор экспортных процедур, которые должны
//      быть реализованы в обработчике, зависит от установки значений следующих
//      колонок таблицы значений,
//    Версия - Строка - номер версии интерфейса обработчиков выгрузки / загрузки данных,
//      поддерживаемого обработчиком,
//    ПередВыгрузкойТипа - Булево, флаг необходимости вызова обработчика перед
//      выгрузкой всех объектов информационной базы, относящихся к данному объекту
//      метаданных. Если присвоено значение Истина - в общем модуле обработчика должна
//      быть реализована экспортируемая процедура ПередВыгрузкойТипа(),
//      поддерживающая следующие параметры:
//        Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер
//          контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий
//          к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера,
//        Сериализатор - СериализаторXDTO, инициализированный с поддержкой выполнения
//          аннотации ссылок. В случае, если в произвольном обработчике выгрузки требуется
//          выполнять выгрузку дополнительных данных - следует использовать
//          СериализаторXDTO, переданный в процедуру ПередВыгрузкойТипа() в качестве
//          значения параметра Сериализатор, а не полученных с помощью свойства глобального
//          контекста СериализаторXDTO,
//        ОбъектМетаданных - ОбъектМетаданных, перед выгрузкой данных которого
//          был вызван обработчик,
//        Отказ - Булево. Если в процедуре ПередВыгрузкойТипа() установить значение
//          данного параметра равным Истина - выгрузка объектов, соответствующих
//          текущему объекту метаданных, выполняться не будет.
//    ПередВыгрузкойОбъекта - Булево, флаг необходимости вызова обработчика перед
//      выгрузкой конкретного объекта информационной базы. Если присвоено значение
//      Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура
//      ПередВыгрузкойОбъекта(), поддерживающая следующие параметры:
//        Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер
//          контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий
//          к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера,
//        МенеджерВыгрузкиОбъекта - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерВыгрузкиДанныхИнформационнойБа­зы -
//          менеджер выгрузки текущего объекта. Подробнее см. комментарий к программному интерфейсу обработки
//          ВыгрузкаЗагрузкаДанныхМенеджерВыгрузкиДанныхИнформационнойБа­зы. Параметр передается только при вызове
//          процедур обработчиков, для которых при регистрации указана версия не ниже 1.0.0.1,
//        Сериализатор - СериализаторXDTO, инициализированный с поддержкой выполнения
//          аннотации ссылок. В случае, если в произвольном обработчике выгрузки требуется
//          выполнять выгрузку дополнительных данных - следует использовать
//          СериализаторXDTO, переданный в процедуру ПередВыгрузкойОбъекта() в качестве
//          значения параметра Сериализатор, а не полученных с помощью свойства глобального
//          контекста СериализаторXDTO,
//        Объект - КонстантаМенеджерЗначения.*, СправочникОбъект.*, ДокументОбъект.*,
//          БизнесПроцессОбъект.*, ЗадачаОбъект.*, ПланСчетовОбъект.*, ПланОбменаОбъект.*,
//          ПланВидовХарактеристикОбъект.*, ПланВидовРасчетаОбъект.*, РегистрСведенийНаборЗаписей.*,
//          РегистрНакопленияНаборЗаписей.*, РегистрБухгалтерииНаборЗаписей.*,
//          РегистрРасчетаНаборЗаписей.*, ПоследовательностьНаборЗаписей.*, ПерерасчетНаборЗаписей.* -
//          объект данных информационной базы, перед выгрузкой которого был вызван обработчик.
//          Значение, переданное в процедуру ПередВыгрузкойОбъекта() в качестве значения параметра
//          Объект может быть модифицировано внутри обработчика ПередВыгрузкойОбъекта(), при
//          этом внесенные изменения будут отражены в сериализации объекта в файлах выгрузки, но
//          не будут зафиксированы в информационной базе
//        Артефакты - Массив(ОбъектXDTO) - набор дополнительной информации, логически неразрывно
//          связанной с объектом, но не являющейся его частью (артефакты объекта). Артефакты должны
//          сформированы внутри обработчика ПередВыгрузкойОбъекта() и добавлены в массив, переданный
//          в качестве значения параметра Артефакты. Каждый артефакт должен являться XDTO-объектом,
//          для типа которого в качестве базового типа используется абстрактный XDTO-тип
//          {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}Artefact. Допускается использовать XDTO-пакеты,
//          помимо изначально поставляемых в составе подсистемы ВыгрузкаЗагрузкаДанных. В дальнейшем
//          артефакты, сформированные в процедуре ПередВыгрузкойОбъекта(), будут доступны в процедурах
//          обработчиков загрузки данных (см. комментарий к процедуре ПриРегистрацииОбработчиковЗагрузкиДанных().
//        Отказ - Булево. Если в процедуре ПередВыгрузкойОбъекта() установить значение
//           данного параметра равным Истина - выгрузка объекта, для которого был вызван обработчик,
//           выполняться не будет.
//    ПослеВыгрузкиТипа() - Булево, флаг необходимости вызова обработчика после выгрузки всех
//      объектов информационной базы, относящихся к данному объекту метаданных. Если присвоено значение
//      Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура
//      ПослеВыгрузкиТипа(), поддерживающая следующие параметры:
//        Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер
//          контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий
//          к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера,
//        Сериализатор - СериализаторXDTO, инициализированный с поддержкой выполнения
//          аннотации ссылок. В случае, если в произвольном обработчике выгрузки требуется
//          выполнять выгрузку дополнительных данных - следует использовать
//          СериализаторXDTO, переданный в процедуру ПослеВыгрузкиТипа() в качестве
//          значения параметра Сериализатор, а не полученных с помощью свойства глобального
//          контекста СериализаторXDTO,
//        ОбъектМетаданных - ОбъектМетаданных, после выгрузки данных которого
//          был вызван обработчик.
//
Процедура ПриРегистрацииОбработчиковВыгрузкиДанных(ТаблицаОбработчиков) Экспорт
	
	ОбъектыСПредопределеннымиЭлементами = ВыгрузкаЗагрузкаПредопределенныхДанныхПовтИсп.ОбъектыМетаданныхСПредопределеннымиЭлементами();
	Для Каждого ИмяОбъектаМетаданных Из ОбъектыСПредопределеннымиЭлементами Цикл
		
		Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяОбъектаМетаданных) Тогда
			
			НовыйОбработчик = ТаблицаОбработчиков.Добавить();
			НовыйОбработчик.ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных);
			НовыйОбработчик.Обработчик = ВыгрузкаЗагрузкаПредопределенныхДанных;
			НовыйОбработчик.ПослеВыгрузкиОбъекта = Истина;
			НовыйОбработчик.Версия = ВыгрузкаЗагрузкаДанныхСлужебныйСобытия.ВерсияОбработчиков1_0_0_1();
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Процедура ПослеВыгрузкиОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты) Экспорт
	
	Если ОбщегоНазначенияБТС.ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(Объект.Метаданные()) Тогда
		
		Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(Объект.Метаданные().ПолноеИмя()) Тогда
			
			Если Объект.Предопределенный Тогда
				
				ЕстественныйКлюч = Новый Структура("ИмяПредопределенныхДанных", Объект.ИмяПредопределенныхДанных);
				МенеджерВыгрузкиОбъекта.ТребуетсяСопоставитьСсылкуПриЗагрузке(Объект.Ссылка, ЕстественныйКлюч);
				
			КонецЕсли;
			
		Иначе
			
			ВызватьИсключение СтрШаблон(
			НСтр("ru = 'Объект метаданных %1 не может быть обработан обработчиком
                  |ВыгрузкаЗагрузкаПредопределенныхДанных.ПередВыгрузкойОбъекта(),
                  |т.к. не требуется обеспечивать сопоставление ссылок на его предопределенные элементы!'", Метаданные.ОсновнойЯзык.КодЯзыка),
			Объект.Метаданные().ПолноеИмя()
		);
			
		КонецЕсли;
		
	Иначе
		
		ВызватьИсключение СтрШаблон(
			НСтр("ru = 'Объект метаданных %1 не может быть обработан обработчиком
                  |ВыгрузкаЗагрузкаПредопределенныхДанных.ПередВыгрузкойОбъекта(),
                  |т.к. не может содержать предопределенных элементов!'", Метаданные.ОсновнойЯзык.КодЯзыка),
			Объект.Метаданные().ПолноеИмя()
		);
		
	КонецЕсли;
	
КонецПроцедуры

Процедура ПередОчисткойДанных(Контейнер) Экспорт
	
	УстановитьИнициализациюПредопределенныхДанныхТекущейОбластиД­анных(Контейнер.ПараметрыЗагрузки().ЗагружаемыеТипы);
	
КонецПроцедуры

Процедура ПриРегистрацииОбработчиковЗагрузкиДанных(ТаблицаОбработчиков) Экспорт
	
	НовыйОбработчик = ТаблицаОбработчиков.Добавить();
	НовыйОбработчик.Обработчик = ВыгрузкаЗагрузкаПредопределенныхДанных;
	НовыйОбработчик.ПередОчисткойДанных = Истина;
	НовыйОбработчик.Версия = ВыгрузкаЗагрузкаДанныхСлужебныйСобытия.ВерсияОбработчиков1_0_0_1();
	
	ОбъектыСПредопределеннымиЭлементами = ВыгрузкаЗагрузкаПредопределенныхДанныхПовтИсп.ОбъектыМетаданныхСПредопределеннымиЭлементами();
	Для Каждого ИмяОбъектаМетаданных Из ОбъектыСПредопределеннымиЭлементами Цикл
		
		Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяОбъектаМетаданных) Тогда
			
			НовыйОбработчик = ТаблицаОбработчиков.Добавить();
			НовыйОбработчик.ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных);
			НовыйОбработчик.Обработчик = ВыгрузкаЗагрузкаПредопределенныхДанных;
			НовыйОбработчик.ПередСопоставлениемСсылок = Истина;
			НовыйОбработчик.ПередЗагрузкойОбъекта = Истина;
			НовыйОбработчик.Версия = ВыгрузкаЗагрузкаДанныхСлужебныйСобытия.ВерсияОбработчиков1_0_0_1();
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Процедура ПередСопоставлениемСсылок(Контейнер, ОбъектМетаданных, ТаблицаИсходныхСсылок, СтандартнаяОбработка, Отказ) Экспорт
	
	Если ОбщегоНазначенияБТС.ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(ОбъектМетаданных)
			И ТаблицаИсходныхСсылок.Колонки.Найти("ИмяПредопределенныхДанных") <> Неопределено Тогда
		
		СтандартнаяОбработка = Ложь;
		
	КонецЕсли;
	
КонецПроцедуры

Функция СопоставитьСсылки(Контейнер, МенеджерСопоставленияСсылок, ТаблицаИсходныхСсылок) Экспорт
	
	ИсходныеСсылкиДляСтандартнойОбработки = Новый ТаблицаЗначений();
	Для Каждого Колонка Из ТаблицаИсходныхСсылок.Колонки Цикл
		Если Колонка.Имя <> "ИмяПредопределенныхДанных" Тогда
			ИсходныеСсылкиДляСтандартнойОбработки.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
		КонецЕсли;
	КонецЦикла;
	
	ИмяКолонки = МенеджерСопоставленияСсылок.ИмяКолонкиИсходныхСсылок();
	
	Результат = Новый ТаблицаЗначений();
	Результат.Колонки.Добавить(ИмяКолонки, ТаблицаИсходныхСсылок.Колонки.Найти(ИмяКолонки).ТипЗначения);
	Результат.Колонки.Добавить("Ссылка", ТаблицаИсходныхСсылок.Колонки.Найти(ИмяКолонки).ТипЗначения);
	
	ОбъектМетаданных = Неопределено;
	
	Для Каждого СтрокаТаблицыИсходныхСсылок Из ТаблицаИсходныхСсылок Цикл
		
		Если ЗначениеЗаполнено(СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных) Тогда
			
			ТекстЗапроса = 
				"ВЫБРАТЬ
				|	Таблица.Ссылка КАК Ссылка
				|ИЗ
				|	" + СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные().ПолноеИмя() + " КАК Таблица
				|ГДЕ
				|	Таблица.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных";
			Запрос = Новый Запрос(ТекстЗапроса);
			Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных);
			
			РезультатЗапроса = Запрос.Выполнить();
			Если Не РезультатЗапроса.Пустой() Тогда
				
				Выборка = РезультатЗапроса.Выбрать();
				
				Если Выборка.Количество() = 1 Тогда
					
					Выборка.Следующий();
					
					СтрокаРезультата = Результат.Добавить();
					СтрокаРезультата.Ссылка = Выборка.Ссылка;
					СтрокаРезультата[ИмяКолонки] = СтрокаТаблицыИсходныхСсылок[ИмяКолонки];
					
				Иначе
					
					ВызватьИсключение СтрШаблон(
						НСтр("ru = 'Обнаружено дублирование предопределенных элементов %1 в таблице %2!'", Метаданные.ОсновнойЯзык.КодЯзыка),
						СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных,
						СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные().ПолноеИмя()
					);
					
				КонецЕсли;
				
			КонецЕсли;
			
		Иначе
			
			Если ОбъектМетаданных = Неопределено Тогда
				ОбъектМетаданных = СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные();
			КонецЕсли;
			
			СсылкаДляСтандартнойОбработки = ИсходныеСсылкиДляСтандартнойОбработки.Добавить();
			ЗаполнитьЗначенияСвойств(СсылкаДляСтандартнойОбработки, СтрокаТаблицыИсходныхСсылок);
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если ИсходныеСсылкиДляСтандартнойОбработки.Количество() > 0 Тогда
		
		Выборка = Обработки.ВыгрузкаЗагрузкаДанныхМенеджерСопоставленияСсылок.ВыборкаСопоставленияСсылок(
			ОбъектМетаданных, ИсходныеСсылкиДляСтандартнойОбработки, ИмяКолонки);
		
		Пока Выборка.Следующий() Цикл
			
			СтрокаРезультата = Результат.Добавить();
			СтрокаРезультата.Ссылка = Выборка.Ссылка;
			СтрокаРезультата[ИмяКолонки] = Выборка[ИмяКолонки];
			
		КонецЦикла;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

Процедура ПередЗагрузкойОбъекта(Контейнер, Объект, Артефакты, Отказ) Экспорт
	
	ОбъектМетаданных = Объект.Метаданные();
	
	Если НЕ ОбщегоНазначенияБТС.ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(ОбъектМетаданных) Тогда
		
		ВызватьИсключение СтрШаблон(
			НСтр("ru = 'Объект метаданных %1 не может быть обработан обработчиком
                  |ВыгрузкаЗагрузкаПредопределенныхДанных.ПередЗагрузкойОбъекта(),
                  |т.к. не может содержать предопределенных элементов!'", Метаданные.ОсновнойЯзык.КодЯзыка),
			Объект.Метаданные().ПолноеИмя()
		);
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура УстановитьИнициализациюПредопределенныхДанныхТекущейОбластиД­анных(ОбъектыМетаданных)
	
	Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл
		
		Если ОбщегоНазначенияБТС.ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(ОбъектМетаданных) Тогда
			
			Если ОбъектМетаданных.ПолучитьИменаПредопределенных().Количество() > 0 Тогда
				
				Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя());
				Менеджер.УстановитьИнициализациюПредопределенныхДанных(Истина);
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Функция ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяТипа)
	
	Если ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ИмяТипа, РаботаВМоделиСервиса.РазделительОсновныхДанных())
		ИЛИ ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ИмяТипа, РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда
		
		Возврат Ложь;
			
	Иначе
		
		// Для неразделенных объектов сопоставление ссылок на предопределенные элементы требуется всегда.
		Возврат Истина;
		
	КонецЕсли;
	
КонецФункции

#КонецОбласти
Показать
30. hroa 18.12.18 00:53 Сейчас в теме
33. muskul 18.12.18 01:13 Сейчас в теме
Наверняка по затупу востановили бэкап в рабочую базу
Туки Туки; +1 Ответить
34. oleg-x 26 18.12.18 09:08 Сейчас в теме
(33) Читайте внимательно.
1) Бэкапов нет и не делали.
2) Если бы было так, то не было бы отрицательных остатков, а так, продажи есть а поступлений нет.
35. user598655_ilia-bers 18.12.18 10:23 Сейчас в теме
Вообще если не делали упаковку файлов базы то документы никуда из таблиц не делись, они в служебном поле помечены как удаленные. Надо в копии базы открыть файл с документами дбфнавигатором и посмотреть что там поискать по номеру документа. Если документы есть, то можно попробовать написать скрипт который их вернет из небытия.Но дело это муторное каждый файл с документом так надо отработать, потом выгрузить и загрузить базу. Доверия к данным остаткам все равно не будет, так что как уже писали люди выше лучше сделать инвентаризацию и внести остатки в новую УТ. А документы имеет смысл восстановить только расходные Накладные и финансовые доки для информации.
36. user598655_ilia-bers 18.12.18 10:31 Сейчас в теме
(35) найти название файла например с приходными накладными можно открыв в блокноте файл с раcширением DD и поиском найти имя документа, там будет прописано имя файла. Все операции естественно надо делать на копии. С восстановлением файлов в какой нибудь Р-студио даже время не стоит терять - это просто невозможно.
37. user1111947 18.12.18 13:01 Сейчас в теме
Большое спасибо! Благодаря обработке Senator_I - мы смогли все вернуть. Сделали кучу копий сначала... Возможно не все файлы вернулись, но большинство, плюс ушла ошибка глобального модуля, из-за которого мы не могли работать.

Я не могу сказать что сейчас все идеально, но до НГ мы доработаем, а на январских праздниках, в затишье, мы будем делать инвентаризацию и вносить все на восьмерку.

Огромное всем спасибо за помощь, считаю проблему решенной)
oleg-x; acanta; +2 Ответить
38. Senator_I 135 18.12.18 13:15 Сейчас в теме
(37) Отлично, рад что все получилось. Не зря я программы годами храню, не знаешь когда пригодится и какая. ;-)
40. CheBurator 3117 18.12.18 17:24 Сейчас в теме
(38) а программку/обработку для восстановления удаленных из cdx - можно как-то получить?
43. Senator_I 135 18.12.18 17:47 Сейчас в теме
39. ResAndDev 18.12.18 16:28 Сейчас в теме
Я как то ошибся в коде одной обработки (не поставил отбор на владельца штрихкода) и стер ВСЕ штрихкоды... А рез.копия базы была 4х дневной давности. Меня спасло что два из четырех дней были выходными. Но даже в этом случае 300+ кодов пришлось собирать вручную...

Мораль: Резервные копии - наше все.
41. pm74 194 18.12.18 17:36 Сейчас в теме
был случай > 10 лет назад на 7.7 файловой УТ я сдуру наполовину стер рабочую базу причем в тот момент когда в ней работали спасло наличие рбд и недавний обмен, с тех пор бекапить всё и всегда вошло в привычку
42. Senator_I 135 18.12.18 17:45 Сейчас в теме
(39) Есть два типа программистов, кто еще не делает бэкапы и кто уже делает. К сожалению, частенько приходится на живых базах вносить изменения, но я так делать не рекомендую.
44. muskul 19.12.18 08:49 Сейчас в теме
(42)Есть еще третий тип, тот кто иногда проверяет бекапы
45. user827245 19.12.18 12:54 Сейчас в теме
было, с тех пор бэкапы как обязательство...
46. meriferi 06.01.19 22:23 Сейчас в теме
На SQL попробуйте таблицы восстановить
47. oleg-x 26 07.01.19 13:19 Сейчас в теме
(46) Читай тему, уже все решили.
48. пользователь 15.01.19 21:47
Сообщение было скрыто модератором.
...
Оставьте свое сообщение
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день