Здравствуйте, создал справочник с ТЧ. При сохранении данные из ТЧ записываются в РС. Все бы было хорошо, но если предпологаемый пользователь удалит данные из ТЧ то в РС они останутся (и наоборот). Сделал вроде бы верный говнокод но в чем то загвостка(не хватает пока ума понять в чем):

```1c
    #Область ОбработчикиСобытийЭлементовФормы

    &НаСервереБезКонтекста
    //НеРаботает
    Функция ПолучитьДанныеТаблицы_РесурсыИзделияНаСервере(Ссылка)

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    | Ресурсы.Изделие КАК Изделие,
    | Ресурсы.РесурсИзделия КАК РесурсИзделия,
    | Ресурсы.СрокСлужбы КАК СрокСлужбы,
    | Ресурсы.СрокХранения КАК СрокХранения,
    | Ресурсы.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    | Ресурсы.УстановленныйРесурс КАК УстановленныйРесурс,
    | Ресурсы.УсловияХранения КАК УсловияХранения,
    | Ресурсы.ПризнакОсновногоРесурса КАК ПризнакОсновногоРесурса,
    | Ресурсы.Примечание КАК Примечание
    |ИЗ
    | РегистрСведений.Ресурсы КАК Ресурсы
    |ГДЕ
    | Ресурсы.Изделие = &Ссылка"
    ;

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

    Возврат ДанныеТаблицы;

    КонецФункции

    &НаКлиенте
    //НеРаботает
    Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
    //НеРаботает
    Если ТекущаяСтраница.Имя = "ТаблицаРесурсыИзделия" Тогда
    Если Не Объект.ТаблицаРесурсыИзделияЗаполнена Тогда
    Объект.ТаблицаРесурсыИзделия.Очистить();
    ДанныеТаблицы_РесурсыИзделияНаСервере = ПолучитьДанныеТаблицы_РесурсыИзделияНаСервере(Объект.Ссылка);
    Для Каждого ДанныеСтроки Из ДанныеТаблицы_РесурсыИзделияНаСервере Цикл
    СтрокаТаблицы = Объект.ТаблицаРесурсыИзделия.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ДанныеСтроки);
    КонецЦикла;
    ТаблицаРесурсыИзделияЗаполнена = Истина;
    Сообщить ("работает");
    КонецЕсли;
    КонецЕсли;

    КонецПроцедуры

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

ЗЫ Работаю на платформе 8.3.10 и заранее спасибо за помощь.
---
Вот как это происходит в ут 10.3

```1c
    Процедура ЗаписатьКонтактнуюИнформацию(НаборЗаписей, Ссылка, Отказ) Экспорт

    ТаблицаНабора = НаборЗаписей.Выгрузить();

    Индекс = 0;
    Пока Индекс < НаборЗаписей.Количество() Цикл
    Запись = НаборЗаписей[Индекс];
    Если НЕ ЗначениеЗаполнено(Запись.Представление) Тогда
    НаборЗаписей.Удалить(Запись);
    Продолжить;
    КонецЕсли;
    Запись.Объект = Ссылка;
    Индекс = Индекс + 1;
    КонецЦикла;

    НаборЗаписей.Отбор.Объект.Значение = Ссылка;
    НаборЗаписей.Отбор.Объект.Использование = Истина;

    Попытка
    НаборЗаписей.Записать();
    Исключение
    ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),, ("Элемент "" + СокрЛП(Ссылка) + "" не записан. Не записана контактная информация."));
    НаборЗаписей.Загрузить(ТаблицаНабора);
    Отказ = Истина;
    Возврат;
    КонецПопытки;

    ПрочитатьКонтактнуюИнформацию(НаборЗаписей, Ссылка)

    КонецПроцедуры
```

```1c
    Процедура ПрочитатьКонтактнуюИнформацию(НаборЗаписей, Ссылка) Экспорт

    Если ТипЗнч(НаборЗаписей) <> Тип("РегистрСведенийНаборЗаписей.КонтактнаяИнформация") Тогда
    НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
    Иначе
    НаборЗаписей.Очистить();
    КонецЕсли;

    НаборЗаписей.Отбор.Объект.Значение = Ссылка;
    НаборЗаписей.Отбор.Объект.Использование = Истина;

    Запрос = Новый Запрос;

    Запрос.Текст = "
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | ВложенныйЗапрос.Вид КАК Вид,
    | ВложенныйЗапрос.Тип КАК Тип,
    | ВложенныйЗапрос.Объект КАК Объект,
    | МАКСИМУМ(ВложенныйЗапрос.Поле1) КАК Поле1,
    | МАКСИМУМ(ВложенныйЗапрос.Поле2) КАК Поле2,
    | МАКСИМУМ(ВложенныйЗапрос.Поле3) КАК Поле3,
    | МАКСИМУМ(ВложенныйЗапрос.Поле4) КАК Поле4,
    | МАКСИМУМ(ВложенныйЗапрос.Поле5) КАК Поле5,
    | МАКСИМУМ(ВложенныйЗапрос.Поле6) КАК Поле6,
    | МАКСИМУМ(ВложенныйЗапрос.Поле7) КАК Поле7,
    | МАКСИМУМ(ВложенныйЗапрос.Поле8) КАК Поле8,
    | МАКСИМУМ(ВложенныйЗапрос.Поле9) КАК Поле9,
    | МАКСИМУМ(ВложенныйЗапрос.Поле10) КАК Поле10,
    | МАКСИМУМ(ВложенныйЗапрос.Представление) КАК Представление,
    | МАКСИМУМ(ВложенныйЗапрос.Комментарий) КАК Комментарий,
    | МАКСИМУМ(ВложенныйЗапрос.ЗначениеПоУмолчанию) КАК ЗначениеПоУмолчанию,
    | МАКСИМУМ(ВложенныйЗапрос.ТипДома) КАК ТипДома,
    | МАКСИМУМ(ВложенныйЗапрос.ТипКорпуса) КАК ТипКорпуса,
    | МАКСИМУМ(ВложенныйЗапрос.ТипКвартиры) КАК ТипКвартиры
    |ИЗ
    | (ВЫБРАТЬ
    | &Объект КАК Объект,
    | ВидыКонтактнойИнформации.Тип КАК Тип,
    | ВидыКонтактнойИнформации.Ссылка КАК Вид,
    | "" КАК Представление,
    | "" КАК Поле1,
    | "" КАК Поле2,
    | "" КАК Поле3,
    | "" КАК Поле4,
    | "" КАК Поле5,
    | "" КАК Поле6,
    | "" КАК Поле7,
    | "" КАК Поле8,
    | "" КАК Поле9,
    | "" КАК Поле10,
    | "" КАК Комментарий,
    | ЛОЖЬ КАК ЗначениеПоУмолчанию,
    | ЗНАЧЕНИЕ(Перечисление.ТипыДомов.ПустаяСсылка) КАК ТипДома,
    | ЗНАЧЕНИЕ(Перечисление.ТипыКорпусов.ПустаяСсылка) КАК ТипКорпуса,
    | ЗНАЧЕНИЕ(Перечисление.ТипыКвартир.ПустаяСсылка) КАК ТипКвартиры
    | ИЗ
    | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
    | ГДЕ
    | (НЕ ВидыКонтактнойИнформации.ПометкаУдаления)
    | И ВидыКонтактнойИнформации.ВидОбъектаКонтактнойИнформации = &ВидОбъектаКонтактнойИнформации
    |
    | ОБЪЕДИНИТЬ
    |
    | ВЫБРАТЬ
    | РегистрСведенийКонтактнаяИнформация.Объект,
    | РегистрСведенийКонтактнаяИнформация.Тип,
    | РегистрСведенийКонтактнаяИнформация.Вид,
    | ВЫРАЗИТЬ(РегистрСведенийКонтактнаяИнформация.Представление КАК СТРОКА(1000)),
    | РегистрСведенийКонтактнаяИнформация.Поле1,
    | РегистрСведенийКонтактнаяИнформация.Поле2,
    | РегистрСведенийКонтактнаяИнформация.Поле3,
    | РегистрСведенийКонтактнаяИнформация.Поле4,
    | РегистрСведенийКонтактнаяИнформация.Поле5,
    | РегистрСведенийКонтактнаяИнформация.Поле6,
    | РегистрСведенийКонтактнаяИнформация.Поле7,
    | РегистрСведенийКонтактнаяИнформация.Поле8,
    | РегистрСведенийКонтактнаяИнформация.Поле9,
    | РегистрСведенийКонтактнаяИнформация.Поле10,
    | ВЫРАЗИТЬ(РегистрСведенийКонтактнаяИнформация.Комментарий КАК СТРОКА(1000)),
    | РегистрСведенийКонтактнаяИнформация.ЗначениеПоУмолчанию,
    | РегистрСведенийКонтактнаяИнформация.ТипДома КАК ТипДома,
    | РегистрСведенийКонтактнаяИнформация.ТипКорпуса КАК ТипКорпуса,
    | РегистрСведенийКонтактнаяИнформация.ТипКвартиры КАК ТипКвартиры
    | ИЗ
    | РегистрСведений.КонтактнаяИнформация КАК РегистрСведенийКонтактнаяИнформация
    | ГДЕ
    | РегистрСведенийКонтактнаяИнформация.Объект = &Объект) КАК ВложенныйЗапрос
    |
    |СГРУППИРОВАТЬ ПО
    | ВложенныйЗапрос.Вид,
    | ВложенныйЗапрос.Тип,
    | ВложенныйЗапрос.Объект
    |
    |УПОРЯДОЧИТЬ ПО
    | Представление УБЫВ,
    | ВложенныйЗапрос.Тип.Порядок,
    | Вид";

    Запрос.УстановитьПараметр("ВидОбъектаКонтактнойИнформации", ВидОбъектаКИ(Ссылка));
    Запрос.УстановитьПараметр("Объект", Ссылка);

    ТабЗн = Запрос.Выполнить().Выгрузить();
    Для Каждого стр Из ТабЗн Цикл
    стр.Представление = СокрП(стр.Представление);
    стр.Комментарий = СокрП(стр.Комментарий);
    КонецЦикла;

    НаборЗаписей.Загрузить(ТабЗн);

    КонецПроцедуры
```
---
Делаете пакетный запрос. Первый запрос к ТЧ справочника, помещаете во временнную таблицу, второй запрос к регистру сведений с вашим отбором, тоже помещаете во временную таблицу, и потом полным соединением это таблицы соединяете, а условие что-то типа
ГДЕ
    Т1.Изделие IS NULL ИЛИ Т2.Изделие IS NULL

Получите записи, которые есть только в одной или только в другой таблице.
---
Извините, можно для особо одаренных типа меня, немного разжевать? Про пакеты запросов понятно. А вот остальное придется гуглить...
---
Вы скриншот табличной части и регистра сведений приложите хотя бы.
У вас справочник - некое изделие, в которого в ТЧ что-то вроде характеристик задано?
А в РС это все хранится?
---
Вообще самое простое при таких вопросах - создать пустую конфу, перенести туда сам справочник и регистр сведений. Ссылочные типы может и пропадут (станут строковыми), но по крайней мере ответить можно предметно.
---
Понял, создам упрощенный вариант и кину скриншоты или саму конфу)
---
Вот, на первом скриншоте в принципе точно такое же устройство, только упрощенное. На втором скриншоте добавляю в ТЧ данные, на третьем они отображаются в РС. На четвертом удаляю 1 строку из ТЧ, на пятом она остается)))
---
Как вариант можешь сделать по аналогии с контактной информацией в контрагентах в УТ 10.3
---
Нет под рукой этой конфигурации...
---
Смысл там таков , удаляешь все записи в регистре по отбору,и записываешь данные которые у тебя в справочнике на момент записи.
---
согласен с (10) - при записи справочника каждый раз очищать все записи, относящиеся к данному элементу справочника (отбор по ссылке) и записывать новые из таб. части, а удаление из р/с запретить.

А вообще сильно смущает такая архитектура.. зачем полностью дублировать данные справочника в регистре и потом еще мучаться с сохранением их целостности?
Может в форме справочника просто надо было сделать таблицу, либо переход по ссылке к регистру, где непосредственно редактировались бы записи регистра с отбором по ссылке справочника, т.е. табчасти нет вообще, а все хранится и редактируется в регистре.
Либо вообще отказаться от регистра, а довольствоваться только справочником с табчастью.
---
Согласен,в ут как раз на форму выводится табчасть из регистра.
---
Посмотри по отборам в РС: https://forum.infostart.ru/forum9/topic53989/
При сохранении записать текущие данные из ТЧ, как написал (10).
Нет смыла сравнивать данные. Затереть которые были и записать новые.
---
Регистр сведений периодический? Подчиненный регистратору?
---
Вот как это происходит в ут 10.3

```1c
    Процедура ЗаписатьКонтактнуюИнформацию(НаборЗаписей, Ссылка, Отказ) Экспорт

    ТаблицаНабора = НаборЗаписей.Выгрузить();

    Индекс = 0;
    Пока Индекс < НаборЗаписей.Количество() Цикл
    Запись = НаборЗаписей[Индекс];
    Если НЕ ЗначениеЗаполнено(Запись.Представление) Тогда
    НаборЗаписей.Удалить(Запись);
    Продолжить;
    КонецЕсли;
    Запись.Объект = Ссылка;
    Индекс = Индекс + 1;
    КонецЦикла;

    НаборЗаписей.Отбор.Объект.Значение = Ссылка;
    НаборЗаписей.Отбор.Объект.Использование = Истина;

    Попытка
    НаборЗаписей.Записать();
    Исключение
    ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),, ("Элемент "" + СокрЛП(Ссылка) + "" не записан. Не записана контактная информация."));
    НаборЗаписей.Загрузить(ТаблицаНабора);
    Отказ = Истина;
    Возврат;
    КонецПопытки;

    ПрочитатьКонтактнуюИнформацию(НаборЗаписей, Ссылка)

    КонецПроцедуры
```

```1c
    Процедура ПрочитатьКонтактнуюИнформацию(НаборЗаписей, Ссылка) Экспорт

    Если ТипЗнч(НаборЗаписей) <> Тип("РегистрСведенийНаборЗаписей.КонтактнаяИнформация") Тогда
    НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
    Иначе
    НаборЗаписей.Очистить();
    КонецЕсли;

    НаборЗаписей.Отбор.Объект.Значение = Ссылка;
    НаборЗаписей.Отбор.Объект.Использование = Истина;

    Запрос = Новый Запрос;

    Запрос.Текст = "
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | ВложенныйЗапрос.Вид КАК Вид,
    | ВложенныйЗапрос.Тип КАК Тип,
    | ВложенныйЗапрос.Объект КАК Объект,
    | МАКСИМУМ(ВложенныйЗапрос.Поле1) КАК Поле1,
    | МАКСИМУМ(ВложенныйЗапрос.Поле2) КАК Поле2,
    | МАКСИМУМ(ВложенныйЗапрос.Поле3) КАК Поле3,
    | МАКСИМУМ(ВложенныйЗапрос.Поле4) КАК Поле4,
    | МАКСИМУМ(ВложенныйЗапрос.Поле5) КАК Поле5,
    | МАКСИМУМ(ВложенныйЗапрос.Поле6) КАК Поле6,
    | МАКСИМУМ(ВложенныйЗапрос.Поле7) КАК Поле7,
    | МАКСИМУМ(ВложенныйЗапрос.Поле8) КАК Поле8,
    | МАКСИМУМ(ВложенныйЗапрос.Поле9) КАК Поле9,
    | МАКСИМУМ(ВложенныйЗапрос.Поле10) КАК Поле10,
    | МАКСИМУМ(ВложенныйЗапрос.Представление) КАК Представление,
    | МАКСИМУМ(ВложенныйЗапрос.Комментарий) КАК Комментарий,
    | МАКСИМУМ(ВложенныйЗапрос.ЗначениеПоУмолчанию) КАК ЗначениеПоУмолчанию,
    | МАКСИМУМ(ВложенныйЗапрос.ТипДома) КАК ТипДома,
    | МАКСИМУМ(ВложенныйЗапрос.ТипКорпуса) КАК ТипКорпуса,
    | МАКСИМУМ(ВложенныйЗапрос.ТипКвартиры) КАК ТипКвартиры
    |ИЗ
    | (ВЫБРАТЬ
    | &Объект КАК Объект,
    | ВидыКонтактнойИнформации.Тип КАК Тип,
    | ВидыКонтактнойИнформации.Ссылка КАК Вид,
    | "" КАК Представление,
    | "" КАК Поле1,
    | "" КАК Поле2,
    | "" КАК Поле3,
    | "" КАК Поле4,
    | "" КАК Поле5,
    | "" КАК Поле6,
    | "" КАК Поле7,
    | "" КАК Поле8,
    | "" КАК Поле9,
    | "" КАК Поле10,
    | "" КАК Комментарий,
    | ЛОЖЬ КАК ЗначениеПоУмолчанию,
    | ЗНАЧЕНИЕ(Перечисление.ТипыДомов.ПустаяСсылка) КАК ТипДома,
    | ЗНАЧЕНИЕ(Перечисление.ТипыКорпусов.ПустаяСсылка) КАК ТипКорпуса,
    | ЗНАЧЕНИЕ(Перечисление.ТипыКвартир.ПустаяСсылка) КАК ТипКвартиры
    | ИЗ
    | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
    | ГДЕ
    | (НЕ ВидыКонтактнойИнформации.ПометкаУдаления)
    | И ВидыКонтактнойИнформации.ВидОбъектаКонтактнойИнформации = &ВидОбъектаКонтактнойИнформации
    |
    | ОБЪЕДИНИТЬ
    |
    | ВЫБРАТЬ
    | РегистрСведенийКонтактнаяИнформация.Объект,
    | РегистрСведенийКонтактнаяИнформация.Тип,
    | РегистрСведенийКонтактнаяИнформация.Вид,
    | ВЫРАЗИТЬ(РегистрСведенийКонтактнаяИнформация.Представление КАК СТРОКА(1000)),
    | РегистрСведенийКонтактнаяИнформация.Поле1,
    | РегистрСведенийКонтактнаяИнформация.Поле2,
    | РегистрСведенийКонтактнаяИнформация.Поле3,
    | РегистрСведенийКонтактнаяИнформация.Поле4,
    | РегистрСведенийКонтактнаяИнформация.Поле5,
    | РегистрСведенийКонтактнаяИнформация.Поле6,
    | РегистрСведенийКонтактнаяИнформация.Поле7,
    | РегистрСведенийКонтактнаяИнформация.Поле8,
    | РегистрСведенийКонтактнаяИнформация.Поле9,
    | РегистрСведенийКонтактнаяИнформация.Поле10,
    | ВЫРАЗИТЬ(РегистрСведенийКонтактнаяИнформация.Комментарий КАК СТРОКА(1000)),
    | РегистрСведенийКонтактнаяИнформация.ЗначениеПоУмолчанию,
    | РегистрСведенийКонтактнаяИнформация.ТипДома КАК ТипДома,
    | РегистрСведенийКонтактнаяИнформация.ТипКорпуса КАК ТипКорпуса,
    | РегистрСведенийКонтактнаяИнформация.ТипКвартиры КАК ТипКвартиры
    | ИЗ
    | РегистрСведений.КонтактнаяИнформация КАК РегистрСведенийКонтактнаяИнформация
    | ГДЕ
    | РегистрСведенийКонтактнаяИнформация.Объект = &Объект) КАК ВложенныйЗапрос
    |
    |СГРУППИРОВАТЬ ПО
    | ВложенныйЗапрос.Вид,
    | ВложенныйЗапрос.Тип,
    | ВложенныйЗапрос.Объект
    |
    |УПОРЯДОЧИТЬ ПО
    | Представление УБЫВ,
    | ВложенныйЗапрос.Тип.Порядок,
    | Вид";

    Запрос.УстановитьПараметр("ВидОбъектаКонтактнойИнформации", ВидОбъектаКИ(Ссылка));
    Запрос.УстановитьПараметр("Объект", Ссылка);

    ТабЗн = Запрос.Выполнить().Выгрузить();
    Для Каждого стр Из ТабЗн Цикл
    стр.Представление = СокрП(стр.Представление);
    стр.Комментарий = СокрП(стр.Комментарий);
    КонецЦикла;

    НаборЗаписей.Загрузить(ТабЗн);

    КонецПроцедуры
```