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

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

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

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

А если завтра этот шалун удалит документы за полгода?
Что - зубы на полку?
user1111947; +1 Ответить
4. user1111947 17.12.18 16:59 Сейчас в теме
(3)
Да, я учусь на своих ошибках... В голове решение проблемы - установить программку восстановления данных и попробовать измененные файлы восстановить. Но... слабое утешение что что-то получится.
6. oleg-x 22 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 22 17.12.18 17:08 Сейчас в теме
(7) (Знак*НайденныйОстаток) видимо не число, по этому и такая ошибка. Возможно последствия удаления, а может еще что. Надо проверять значения этих переменных.
user1111947; +1 Ответить
9. YannikAlx 27 17.12.18 17:12 Сейчас в теме
(7) Есть вероятность , что там спрятался NULL, то есть нет остатка в принципе по какому-то товару, если использовали запрос...
user1111947; +1 Ответить
10. user1111947 17.12.18 17:17 Сейчас в теме
(9)
Null как то найти можно?
12. oleg-x 22 17.12.18 17:22 Сейчас в теме
(10) Надо запускать в режиме отладка и ставить точку остановки на этом куске кода. И смотреть чему равны данные переменные.
user1111947; +1 Ответить
11. oleg-x 22 17.12.18 17:18 Сейчас в теме
(9) Врятли иначе бы выдало ошибку при умножение: преобразования значения к типу не может быть выполнено
user1111947; +1 Ответить
17. YannikAlx 27 17.12.18 17:46 Сейчас в теме
(11) А
(Знак*НайденныйОстаток) видимо не число
не выдало бы
преобразования значения к типу не может быть выполнено

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

Все так. Смотрю, ошибка странная, как будто еще и в конфе им наломали что-то.
user1111947; +1 Ответить
13. Senator_I 198 17.12.18 17:35 Сейчас в теме
А база файловая или серверная? У меня есть обработка, которая поднимает документы даже если в 1С 7.7 они были окончательно удалены (если cdx файлы не почистили).
oleg-x; pm74; user1111947; +3 Ответить
14. oleg-x 22 17.12.18 17:42 Сейчас в теме
(13) Судя по всему у них файловая, раз собрались восстановлением файлов делать. Так что возможно вы спасете их :-)
15. Senator_I 198 17.12.18 17:43 Сейчас в теме
(14) ;-) Посмотрим. Может имели в виду восстановлением файлов sql базы.
16. oleg-x 22 17.12.18 17:45 Сейчас в теме
(15) в 1С77 они что в файлах хранятся на диске?
18. Senator_I 198 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 198 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 22 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 198 18.12.18 13:15 Сейчас в теме
(37) Отлично, рад что все получилось. Не зря я программы годами храню, не знаешь когда пригодится и какая. ;-)
40. CheBurator 2712 18.12.18 17:24 Сейчас в теме
(38) а программку/обработку для восстановления удаленных из cdx - можно как-то получить?
43. Senator_I 198 18.12.18 17:47 Сейчас в теме
39. ResAndDev 18.12.18 16:28 Сейчас в теме
Я как то ошибся в коде одной обработки (не поставил отбор на владельца штрихкода) и стер ВСЕ штрихкоды... А рез.копия базы была 4х дневной давности. Меня спасло что два из четырех дней были выходными. Но даже в этом случае 300+ кодов пришлось собирать вручную...

Мораль: Резервные копии - наше все.
41. pm74 203 18.12.18 17:36 Сейчас в теме
был случай > 10 лет назад на 7.7 файловой УТ я сдуру наполовину стер рабочую базу причем в тот момент когда в ней работали спасло наличие рбд и недавний обмен, с тех пор бекапить всё и всегда вошло в привычку
42. Senator_I 198 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 22 07.01.19 13:19 Сейчас в теме
(46) Читай тему, уже все решили.
48. пользователь 15.01.19 21:47
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот