Есть документы "Заказы", табличная часть, в ней колонка-реквизит (заполняется из справочника).
Так вышло кривыми руками, что значения очистились.
Есть копия БД и с помощью обработки - ВыгрузкаЗагрузкаXML могу заменить все документы, тем самым восстановив потерянные значения.
Но дело в том, что обработка восстанавливает все поля (реквизиты), тем самым затирая данные, которые могли измениться после создания копии, это статус заказа, комментарии и тому подобное.
Как из копии выгрузить заказы только с одним конкретным реквизитом и восстановить значение этого реквизита в рабочей БД, на затрагивая другие поля?
(версия 8.3, самописная).
11.
o.nikolaev
21131.07.20 19:32 Сейчас в теме+0.2 $m
(1) Самое тупое и простое:
- обработка бежит по копии базы, выгружает в текстовый документ строку с ид дока и значением реквизита
- в рабочей читаешь файл, находишь док по ид, восстанавливаешь значение реквизита.
С помощью кд 2 можно собственно написать правила чтобы восстанавливать только значение нужного реквизита. Вариантов масса в общем.
дело в том, что обработка восстанавливает все поля (реквизиты), тем самым затирая данные, которые могли измениться после создания копии, это статус заказа, комментарии и тому подобное.
А состав табличной части не мог измениться? Например, количество строк?
(версия 8.3, самописная)
Тогда вполне очевидно: для самописной конфигурации - самописная обработка, которая будет делать то, что уже посоветовали выше.
Как вариант - отредактировать выгруженный XML так, чтобы в нем остались только строки со значениями нужного реквизита, а все остальное, что нежелательно менять - удалить.
Но если файл большой (документов много), то как это сделать, если не с помощью обработки? Возвращаемся к п.1.
Еще вы забыли ответить на уточняющий вопрос: если состав табличной части поменялся, то что делать с реквизитом в измененных строках? Например, в добавленных?
(6)Нет таких, с табличной части после создания ничего не меняется у нас. Только в основной части меняется.
В табличной части товары и характеристики.
У меня отличия в базах в 2 дня, я глазами уже пробежался.
Мне бы как нибудь код написать, который выгрузит документы только с одним реквизитом из ТЧ.
(8)Бесполезный ответ у вас, а то я сам не понимаю, что нужно писать обработку. Кроме того, можно подумать, что это какая то уникальная ситуация и ни у кого нет такой обработки, чтобы поделиться ею.
(9) готовое решение искать в данной ситуации не имеет смысла, по-скольку у всех "уникальные" ситуации возникают. ЗЫ: за 1,5 часа уже бы решили проблему
11.
o.nikolaev
21131.07.20 19:32 Сейчас в теме+0.2 $m
(1) Самое тупое и простое:
- обработка бежит по копии базы, выгружает в текстовый документ строку с ид дока и значением реквизита
- в рабочей читаешь файл, находишь док по ид, восстанавливаешь значение реквизита.
С помощью кд 2 можно собственно написать правила чтобы восстанавливать только значение нужного реквизита. Вариантов масса в общем.
Сижу пишу код, вроде получается, думаю выгружу.
Но вопрос по загрузке - как значения реквизита попадут в нужные строки табличной части?
У строки есть код?
(13)Номер строки мог измениться при редактировании. Надёжнее искать сразу по нескольким реквизитам строки, например: Номенклатура И Количество И Сумма.
Например написать обработку которая из копии сохраняет в текстовый файл значение реквизита и номера документа. и соответственно обработку, которая будет находить в реальной базе этот документ и записывать реквизит полученный из файла.
Самое большое количество способов восстановления реквизитов, элементов справочников предлагает прежде всего конфигурация Конвертация данных. В ней вы найдете массу полезных обработок, которые позволяют довольно успешно восстановить данных из разных источников данных, из разных конфигураций, пусть даже не равных по версии.
Сейчас используется Конфигурация данных 3.0
https://its.1c.ru/db/metod8dev/content/5848/hdoc Версия 3.0.5
Новое в версии
Расширены возможности конвертации табличных частей и общих составных свойств
Оптимизирован формат выгрузки менеджера обмена
Прочие улучшения, связанные с разработкой конвертации, исправление ошибок
Достаточно установить ПКО - правило конвертации объекта. Правила создаются автоматически в большинстве случаев довольно успешно, таким образом вы сможете сконвертировать из любого архива нужный вам реквизит и данные. Если правильно создадите правила, то я уверен ничего не затрется и свободно обновиться.
Если конфигурации совершенно одинаковые используется выгрузка загрузка данных. В ней вы совершенно спокойно восстановите каждый объект. Но нужно помнить, что обычно объект восстанавливается со всеми вложениями. Это означает, если у вас были изменения во вложенных и зависимых объектах, то они соответственно затрутся.
ИМХО: В таких случаях я пользуюсь замечательной функцией ЗначениеВФайл.
Запросом кладу данные (прям ссылки) в таблицу значений и файл, в базе-приемнике (а это копия) получаю эти же ссылки (не парясь: с состовными типа данный, НайтиПоКоду, НайтиПоНомеру.....), код сводится к "трем" строкам: ПолучитьОбъект, Установить значение, Записать.