Добрый день!
Возникла проблема: исчезли ВСЕ документы за период с 1 по 14 декабря включительно. Где мы их только не искали - их нет. В товарах та же неразбериха - все что было поставлено на приход в это время - теперь в минусах.
Гуру, подскажите, есть ли возможность восстановления?
Конечно же, бэкапов никто никогда не делал. Есть база только за апрель месяц. Приходные и расходные накладные в бумажном виде отсутствуют, набить их заново просто невозможно. Возможно ли эти данные как то вернуть?
Большое спасибо за подсказки и поддержку.
1C 7.7 торговля и склад.
Возникла проблема: исчезли ВСЕ документы за период с 1 по 14 декабря включительно. Где мы их только не искали - их нет. В товарах та же неразбериха - все что было поставлено на приход в это время - теперь в минусах.
Гуру, подскажите, есть ли возможность восстановления?
Конечно же, бэкапов никто никогда не делал. Есть база только за апрель месяц. Приходные и расходные накладные в бумажном виде отсутствуют, набить их заново просто невозможно. Возможно ли эти данные как то вернуть?
Большое спасибо за подсказки и поддержку.
1C 7.7 торговля и склад.
По теме из базы знаний
- Универсальный конструктор отчетов (Новейший отчет) для 1C 7.7
- Регистрация документов с измененной суммой
- Свернуть базу и не свернуть себе шею
- WEB-интерфейсы как механизм сбора и контроля данных в розничной сети. Инструменты и наработки
- Запускаем 120 000 одновременных пользователей мобильного приложения на платформе 1С
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Удаленные данные не вернуть, для начало разберитесь кто удалил. У Вас кто то пошалил, неплохо так. Посмотрите кто удалял, через журнал регистрации. И что еще этот пользователь делал, может там не только документы поступления удалили.
Без бэкапов, только с бумаги, но не понятно где они у Вас, как ведете бухгалтерию. Если они территориально в другом месте, запрашивайте сканы и заводите.
Как вариант еще (если вам не критичны поступления) занесите поступление по остатку, проведя инвентаризацию.
Без бэкапов, только с бумаги, но не понятно где они у Вас, как ведете бухгалтерию. Если они территориально в другом месте, запрашивайте сканы и заводите.
Как вариант еще (если вам не критичны поступления) занесите поступление по остатку, проведя инвентаризацию.
(22)
Куплена новая версия еще летом, на самом деле. Никак не можем перейти. Был другой программист, меня попросили поадминистрировать и корректно перейти на новую версию. Однако вероятно предыдущий коллега урезал версию 1с 77, так как обработчиков выгрузки нет. Товаров более 4к, и вбивать ручками остатки и проводить накладные - посчитали долгим и муторным занятием...
В данной теме это даже уже смешно звучит((
В идеале - вернуть утерянные 2 недели, найти обработчик выгрузки и перенести все данные в восьмерку.
Магазин работает, под новый год у них продажи зашкаливают - и тут такая катастрофа. Работают даже на выходных, два магазина. Когда делать инвентаризацию... Если только на январских праздниках. А доработать как-то нужно...
Куплена новая версия еще летом, на самом деле. Никак не можем перейти. Был другой программист, меня попросили поадминистрировать и корректно перейти на новую версию. Однако вероятно предыдущий коллега урезал версию 1с 77, так как обработчиков выгрузки нет. Товаров более 4к, и вбивать ручками остатки и проводить накладные - посчитали долгим и муторным занятием...
В данной теме это даже уже смешно звучит((
В идеале - вернуть утерянные 2 недели, найти обработчик выгрузки и перенести все данные в восьмерку.
Магазин работает, под новый год у них продажи зашкаливают - и тут такая катастрофа. Работают даже на выходных, два магазина. Когда делать инвентаризацию... Если только на январских праздниках. А доработать как-то нужно...
(1)
Добрый добрый, видимо кто-то у вас очень экономит на обслуживании... но это дело житейское, в любом случае первым делом стоит настроить резервное копирование,
опросить всех может кто-то из бухгалтеров делал копии,
выгружал какие-то отчеты и т.д.
проверить базу на ошибки и сравнить на целостность с конфигурацией которая от апреля...
кстати в бухгалтерию документы выгружаются может там что-то есть
примерно сколько документов ушло за 14 дней ?
Добрый день!
Возникла проблема: исчезли ВСЕ документы за период с 1 по 14 декабря включительно. Где мы их только не искали - их нет. В товарах та же неразбериха - все что было поставлено на приход в это время - теперь в минусах.
Гуру, подскажите, есть ли возможность восстановления?
Конечно же, бэкапов никто никогда не делал. Есть база только за апрель месяц. Приходные и расходные накладные в бумажном виде отсутствуют, набить их заново просто невозможно. Возможно ли эти данные как то вернуть?
Большое спасибо за подсказки и поддержку.
1C 7.7 торговля и склад.
Возникла проблема: исчезли ВСЕ документы за период с 1 по 14 декабря включительно. Где мы их только не искали - их нет. В товарах та же неразбериха - все что было поставлено на приход в это время - теперь в минусах.
Гуру, подскажите, есть ли возможность восстановления?
Конечно же, бэкапов никто никогда не делал. Есть база только за апрель месяц. Приходные и расходные накладные в бумажном виде отсутствуют, набить их заново просто невозможно. Возможно ли эти данные как то вернуть?
Большое спасибо за подсказки и поддержку.
1C 7.7 торговля и склад.
Добрый добрый, видимо кто-то у вас очень экономит на обслуживании... но это дело житейское, в любом случае первым делом стоит настроить резервное копирование,
опросить всех может кто-то из бухгалтеров делал копии,
выгружал какие-то отчеты и т.д.
проверить базу на ошибки и сравнить на целостность с конфигурацией которая от апреля...
кстати в бухгалтерию документы выгружаются может там что-то есть
примерно сколько документов ушло за 14 дней ?
(4) Здесь врятли получится обычной программкой, такие файлы перезатираются быстро, а они очень плохо восстанавливают перезатертые файлы, но попытка не пытка ( в вашем случае даже не знаю)
Как минимум компьютер надо выключить и подключать диск к другому и начинать, иначе все бесполезно.
Как минимум компьютер надо выключить и подключать диск к другому и начинать, иначе все бесполезно.
Новая проблема вылетела.
Сейчас активно создаем на приход минусовые товары, делаем новые расходные (то что можем и нашли). Однако при проведении проблемного товара (который был на минусе ранее) выдается ошибка:
Если (Знак*НайденныйОстаток)>0 Тогда
{Глобальный модуль(1597)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)
И все тут)) Не списывается, расходная накладная не проводится.
П.С. все приходные которые нашли, ставим 1 декабрем.
Сейчас активно создаем на приход минусовые товары, делаем новые расходные (то что можем и нашли). Однако при проведении проблемного товара (который был на минусе ранее) выдается ошибка:
Если (Знак*НайденныйОстаток)>0 Тогда
{Глобальный модуль(1597)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)
И все тут)) Не списывается, расходная накладная не проводится.
П.С. все приходные которые нашли, ставим 1 декабрем.
Я бы посоветовал, прежде чем что-то делать в таких случаях, скопировать базу в отдельное место.
Прогнать проверкой диска , диск на котором находилась база.
Сделать тестирование и исправление через конфигуратор.
В зависимости от результатов этого уже плясать.
Прогнать проверкой диска , диск на котором находилась база.
Сделать тестирование и исправление через конфигуратор.
В зависимости от результатов этого уже плясать.
#Область СлужебныйПрограммныйИнтерфейс
// Заполняет массив типов, для которых при выгрузке необходимо использовать аннотацию
// ссылок в файлах выгрузки.
//
// Параметры:
// Типы - Массив(ОбъектМетаданных).
//
Процедура ПриЗаполненииТиповТребующихАннотациюСсылокПриВыгрузке(Типы) Экспорт
ОбъектыСПредопределеннымиЭлементами = ВыгрузкаЗагрузкаПредопределенныхДанныхПовтИсп.ОбъектыМетаданныхСПредопределеннымиЭлементами();
Для Каждого ИмяТипа Из ОбъектыСПредопределеннымиЭлементами Цикл
Если ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяТипа) Тогда
Типы.Добавить(Метаданные.НайтиПоПолномуИмени(ИмяТипа));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Вызывается при регистрации произвольных обработчиков выгрузки данных.
//
// Параметры: ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется
// дополнить эту таблицу значений информацией о регистрируемых произвольных
// обработчиках выгрузки данных. Колонки:
// ОбъектМетаданных - ОбъектМетаданных, при выгрузке данных которого должен
// вызываться регистрируемый обработчик,
// Обработчик - ОбщийМодуль, общий модуль, в котором реализован произвольный
// обработчик выгрузки данных. Набор экспортных процедур, которые должны
// быть реализованы в обработчике, зависит от установки значений следующих
// колонок таблицы значений,
// Версия - Строка - номер версии интерфейса обработчиков выгрузки / загрузки данных,
// поддерживаемого обработчиком,
// ПередВыгрузкойТипа - Булево, флаг необходимости вызова обработчика перед
// выгрузкой всех объектов информационной базы, относящихся к данному объекту
// метаданных. Если присвоено значение Истина - в общем модуле обработчика должна
// быть реализована экспортируемая процедура ПередВыгрузкойТипа(),
// поддерживающая следующие параметры:
// Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер
// контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий
// к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера,
// Сериализатор - СериализаторXDTO, инициализированный с поддержкой выполнения
// аннотации ссылок. В случае, если в произвольном обработчике выгрузки требуется
// выполнять выгрузку дополнительных данных - следует использовать
// СериализаторXDTO, переданный в процедуру ПередВыгрузкойТипа() в качестве
// значения параметра Сериализатор, а не полученных с помощью свойства глобального
// контекста СериализаторXDTO,
// ОбъектМетаданных - ОбъектМетаданных, перед выгрузкой данных которого
// был вызван обработчик,
// Отказ - Булево. Если в процедуре ПередВыгрузкойТипа() установить значение
// данного параметра равным Истина - выгрузка объектов, соответствующих
// текущему объекту метаданных, выполняться не будет.
// ПередВыгрузкойОбъекта - Булево, флаг необходимости вызова обработчика перед
// выгрузкой конкретного объекта информационной базы. Если присвоено значение
// Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура
// ПередВыгрузкойОбъекта(), поддерживающая следующие параметры:
// Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер
// контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий
// к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера,
// МенеджерВыгрузкиОбъекта - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерВыгрузкиДанныхИнформационнойБа зы -
// менеджер выгрузки текущего объекта. Подробнее см. комментарий к программному интерфейсу обработки
// ВыгрузкаЗагрузкаДанныхМенеджерВыгрузкиДанныхИнформационнойБа зы. Параметр передается только при вызове
// процедур обработчиков, для которых при регистрации указана версия не ниже 1.0.0.1,
// Сериализатор - СериализаторXDTO, инициализированный с поддержкой выполнения
// аннотации ссылок. В случае, если в произвольном обработчике выгрузки требуется
// выполнять выгрузку дополнительных данных - следует использовать
// СериализаторXDTO, переданный в процедуру ПередВыгрузкойОбъекта() в качестве
// значения параметра Сериализатор, а не полученных с помощью свойства глобального
// контекста СериализаторXDTO,
// Объект - КонстантаМенеджерЗначения.*, СправочникОбъект.*, ДокументОбъект.*,
// БизнесПроцессОбъект.*, ЗадачаОбъект.*, ПланСчетовОбъект.*, ПланОбменаОбъект.*,
// ПланВидовХарактеристикОбъект.*, ПланВидовРасчетаОбъект.*, РегистрСведенийНаборЗаписей.*,
// РегистрНакопленияНаборЗаписей.*, РегистрБухгалтерииНаборЗаписей.*,
// РегистрРасчетаНаборЗаписей.*, ПоследовательностьНаборЗаписей.*, ПерерасчетНаборЗаписей.* -
// объект данных информационной базы, перед выгрузкой которого был вызван обработчик.
// Значение, переданное в процедуру ПередВыгрузкойОбъекта() в качестве значения параметра
// Объект может быть модифицировано внутри обработчика ПередВыгрузкойОбъекта(), при
// этом внесенные изменения будут отражены в сериализации объекта в файлах выгрузки, но
// не будут зафиксированы в информационной базе
// Артефакты - Массив(ОбъектXDTO) - набор дополнительной информации, логически неразрывно
// связанной с объектом, но не являющейся его частью (артефакты объекта). Артефакты должны
// сформированы внутри обработчика ПередВыгрузкойОбъекта() и добавлены в массив, переданный
// в качестве значения параметра Артефакты. Каждый артефакт должен являться XDTO-объектом,
// для типа которого в качестве базового типа используется абстрактный XDTO-тип
// {}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-тип
// {}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-тип
// {}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 Тогда
Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя());
Менеджер.УстановитьИнициализациюПредопределенныхДанных(Истина);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ТребуетсяСопоставлениеСсылокНаПредопределенныеЭлементы(ИмяТипа)
Если ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ИмяТипа, РаботаВМоделиСервиса.РазделительОсновныхДанных())
ИЛИ ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ИмяТипа, РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда
Возврат Ложь;
Иначе
// Для неразделенных объектов сопоставление ссылок на предопределенные элементы требуется всегда.
Возврат Истина;
КонецЕсли;
КонецФункции
#КонецОбласти Показать
Вообще если не делали упаковку файлов базы то документы никуда из таблиц не делись, они в служебном поле помечены как удаленные. Надо в копии базы открыть файл с документами дбфнавигатором и посмотреть что там поискать по номеру документа. Если документы есть, то можно попробовать написать скрипт который их вернет из небытия.Но дело это муторное каждый файл с документом так надо отработать, потом выгрузить и загрузить базу. Доверия к данным остаткам все равно не будет, так что как уже писали люди выше лучше сделать инвентаризацию и внести остатки в новую УТ. А документы имеет смысл восстановить только расходные Накладные и финансовые доки для информации.
(35) найти название файла например с приходными накладными можно открыв в блокноте файл с раcширением DD и поиском найти имя документа, там будет прописано имя файла. Все операции естественно надо делать на копии. С восстановлением файлов в какой нибудь Р-студио даже время не стоит терять - это просто невозможно.
Большое спасибо! Благодаря обработке Senator_I - мы смогли все вернуть. Сделали кучу копий сначала... Возможно не все файлы вернулись, но большинство, плюс ушла ошибка глобального модуля, из-за которого мы не могли работать.
Я не могу сказать что сейчас все идеально, но до НГ мы доработаем, а на январских праздниках, в затишье, мы будем делать инвентаризацию и вносить все на восьмерку.
Огромное всем спасибо за помощь, считаю проблему решенной)
Я не могу сказать что сейчас все идеально, но до НГ мы доработаем, а на январских праздниках, в затишье, мы будем делать инвентаризацию и вносить все на восьмерку.
Огромное всем спасибо за помощь, считаю проблему решенной)
Я как то ошибся в коде одной обработки (не поставил отбор на владельца штрихкода) и стер ВСЕ штрихкоды... А рез.копия базы была 4х дневной давности. Меня спасло что два из четырех дней были выходными. Но даже в этом случае 300+ кодов пришлось собирать вручную...
Мораль: Резервные копии - наше все.
Мораль: Резервные копии - наше все.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот