Концигурация 1С:Предприятие 8. Общепит КОРП (3.0.77.106) Создали документ "Списание товаров" на основании "Инвентаризация Товаров" и в него вбили вручную другие товары, которые нужно было списать. (на основании большого количества документов) Теперь при перепроведении документа инвентаризации, документ "Списание товаров" помечается на удаление. Убрали ссылку на документ основание и основание у документа списания, но в структуре подчиненности документ остается. (Как у самой инвентаризации так и у Списания товаров). Процедура поиска ссылки на объект дает только ссылки на "версии объектов".
Как убрать Документ основание у документа "Списание товаров"?
---
Для Каждого ЭлементСостава ИЗ Метаданные.КритерииОтбора.СвязанныеДокументы.Состав Цикл
смотрите что в Общие.КритерииОтбора.СвязанныеДокументы.Состав
для бухгалтерии это
---
Обработкой <Универсальные подбор и обработка объектов>, установить реквизит <основания> пустое значение
---
Программно установил значение Неопределено у реквизита ДокументОснование документа Списание товаров. Это ничего не дало.
---
Значит, это не тот реквизит. Посмотрите в обработке ввода на основании, куда пишется основание
---
Я то понимаю, что оно куда-то пишется, но хоть "убей" не могу найти тот кусок кода, чтоб посмотреть куда именно пишется основание.
---
В модуле объекта документа <Списание товаров> ищем процедуру <ОбработкаЗаполнения> либо что-то созвучное с этим
---
Вот процедур при записи Документа Инвентаризации товаров, он его точно пришет в ДОкумент основание но вот куда еще(6)

Процедура ПриЗаписи(Отказ)
 Перем РежимЗаписи;

 Если ОбменДанными.Загрузка Тогда
  Возврат;
 КонецЕсли;

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

 // Определим, является ли склад неавтоматизированной торговой точкой
 ЭтоНТТ = ЗначениеЗаполнено(Склад) И (Склад.ТипСклада = Перечисления.ТипыСкладов.НеавтоматизированнаяТорговаяТочка);

 // Проверим право на автоматический ввод документов Оприходования излишков и Списания недостач
 Если ЭтоНТТ Тогда
  ПравоАвтоматическогоВводаПодчиненных = Ложь;
 Иначе
  ПравоАвтоматическогоВводаПодчиненных = БухгалтерскийУчетПереопределяемый.ПолучитьЗначениеПоУмолчанию("АвтоматическийВводПодчиненныхДокументовНаОснованииИнвентари­зации");
 КонецЕсли;
 МассивУдаляемыхДокументов = Новый Массив();

 ТипыПодчиненныхДокументов = Новый Массив();
 // +Общепит
 // Если нет отрицательной партии проходим два раза, делаем два документа,
 // Флаг ЭтоОтрицательнаяОбласть Устанавливаем в неопределено
 // Если есть тогда делаем три документа. Что бы отличать приходование излишков,
 // Флаг ЭтоОтрицательнаяОбласть Устанавливаем в истина на 1-ой итерации,
 // Далее в ложь

 // Функция может возвращать Истина или неопределено
 ЭтоОтрицательнаяОбласть = НаличиеОтрицательнойОбласти(Товары);

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

 // Общепит Изменен порядок следования документов, необходимо для правильной обработки
 // партии отрицательной области, т. е. сначала приходуем отрицательную область, потом все остальное
 ТипыПодчиненныхДокументов.Добавить("Документ.ОприходованиеТоваров");
 ТипыПодчиненныхДокументов.Добавить("Документ.СписаниеТоваров");
 // -Общепит
 Для Каждого ТипПодчиненногоДокумента Из ТипыПодчиненныхДокументов Цикл

  Если НЕ ПравоАвтоматическогоВводаПодчиненных Тогда
   Продолжить;
  КонецЕсли;

  ЭтоПроверкаНедостач = (ТипПодчиненногоДокумента="Документ.СписаниеТоваров");
  // +Общепит
  ЭтоПроверкаИзлишков = ((ТипПодчиненногоДокумента="Документ.ОприходованиеТоваров") И (ЭтоОтрицательнаяОбласть <> Истина));
  ЭтоОприходованиеОтрицательной = ((ТипПодчиненногоДокумента="Документ.ОприходованиеТоваров") И (ЭтоОтрицательнаяОбласть = Истина));
  // -Общепит

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

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

  // Проверка наличия в ТЧ Товары недостач/излишков
  ЕстьОтклонения = Ложь;
  Для Каждого ТекущаяСтрока Из Товары Цикл
   Если ЭтоПроверкаНедостач Тогда
    Если (ТекущаяСтрока.Количество + ТекущаяСтрока.ОбщепитКоличествоИзПолуфабрикатов - ТекущаяСтрока.КоличествоУчет)<0
     ИЛИ (ТекущаяСтрока.Сумма - ТекущаяСтрока.СуммаУчет)<0
     Тогда
     ЕстьОтклонения = Истина;
     Прервать;
    КонецЕсли;
    // +Общепит Партия отрицательной области
   ИначеЕсли ЭтоПроверкаИзлишков Тогда
    Если ((ТекущаяСтрока.Количество + ТекущаяСтрока.ОбщепитКоличествоИзПолуфабрикатов - ТекущаяСтрока.КоличествоУчет)>0 И ТекущаяСтрока.Количество>0)
     ИЛИ ((ТекущаяСтрока.Сумма - ТекущаяСтрока.СуммаУчет)>0 И ТекущаяСтрока.Сумма>0 ) Тогда
      ЕстьОтклонения = Истина;
     Прервать;
    КонецЕсли;
   ИначеЕсли ЭтоОприходованиеОтрицательной Тогда
    Если (ТекущаяСтрока.КоличествоУчет < 0)
     ИЛИ (ТекущаяСтрока.СуммаУчет < 0) Тогда
      ЕстьОтклонения = Истина;
     Прервать;
    КонецЕсли;
   КонецЕсли;
   // -Общепит
  КонецЦикла;

  // Обнаружены недостачи/излишки
  Если ЕстьОтклонения Тогда
   // +Общепит В зависимости от значения реквизита изменяем значение текущего документа
   Если ЗначениеЗаполнено(ЭтоОтрицательнаяОбласть) И (НЕ ЭтоПроверкаНедостач) Тогда
    Если ЭтоОтрицательнаяОбласть = Истина Тогда
     ПодчиненныйДокумент = ?(ТаблицаПодчиненных.Количество()>0,ТаблицаПодчиненных[0].Ссылка,Неопределено);
     ПодчиненныйДокумент2 = ?(ТаблицаПодчиненных.Количество()>1,ТаблицаПодчиненных[1].Ссылка,Неопределено);
    Иначе
     ПодчиненныйДокумент = ?(ТаблицаПодчиненных.Количество()>1,ТаблицаПодчиненных[1].Ссылка,Неопределено);
     ПодчиненныйДокумент2 = ?(ТаблицаПодчиненных.Количество()>0,ТаблицаПодчиненных[0].Ссылка,Неопределено);
    КонецЕсли;
   Иначе
    ПодчиненныйДокумент2 = Неопределено;
    // Стандартное поведение Бухи
    ПодчиненныйДокумент = ?(ТаблицаПодчиненных.Количество()>0,ТаблицаПодчиненных[0].Ссылка,Неопределено);
   КонецЕсли;
   // -Общепит
   Для Каждого ТекДокумент Из ТаблицаПодчиненных Цикл
    Если ТекДокумент.Ссылка = ПодчиненныйДокумент
     // +Общепит
     // Добавляется 2-ой документ приходования, -
     // приходование отрицательной области
     // что бы он не удалялся при проверке
     ИЛИ ( ТекДокумент.Ссылка = ПодчиненныйДокумент2 И ЗначениеЗаполнено(ЭтоОтрицательнаяОбласть))
     // -Общепит
     Тогда
    ИначеЕсли
     // +Общепит
     ЗначениеЗаполнено(ПодчиненныйДокумент) И
     // -Общепит
     (НЕ ПодчиненныйДокумент.Дата = Дата)
     И (ТекДокумент.Ссылка.Дата = Дата
     ИЛИ ТекДокумент.Ссылка.Дата > ПодчиненныйДокумент.Дата) Тогда
     МассивУдаляемыхДокументов.Добавить(ПодчиненныйДокумент);
     ПодчиненныйДокумент = ТекДокумент.Ссылка;
    Иначе
     МассивУдаляемыхДокументов.Добавить(ТекДокумент.Ссылка);
    КонецЕсли;
   КонецЦикла;

   Если ПодчиненныйДокумент=Неопределено Тогда
    Если ЭтоПроверкаНедостач Тогда
     ПодчиненныйОбъект = Документы.СписаниеТоваров.СоздатьДокумент();
    // +Общепит
    ИначеЕсли ЭтоПроверкаИзлишков ИЛИ ЭтоОприходованиеОтрицательной Тогда
    // -Общепит
     ПодчиненныйОбъект = Документы.ОприходованиеТоваров.СоздатьДокумент();
    Иначе
     Прервать;
    КонецЕсли;
   Иначе
    ПодчиненныйОбъект = ПодчиненныйДокумент.ПолучитьОбъект();
   КонецЕсли;

   // Заполняем шапку
   ПодчиненныйОбъект.Дата = Дата;
   ПодчиненныйОбъект.Организация = Организация;
   ПодчиненныйОбъект.Склад = Склад;
   ПодчиненныйОбъект.Ответственный = Ответственный;
   ПодчиненныйОбъект.Основание = Строка(ЭтотОбъект.Ссылка);
   ПодчиненныйОбъект.ИнвентаризацияТоваровНаСкладе = ЭтотОбъект.Ссылка;
   ПодчиненныйОбъект.ПометкаУдаления = Ложь;
   // +Общепит
   Если ЭтоОприходованиеОтрицательной Тогда
    ПодчиненныйОбъект.ОбщепитОприходованиеПустойПартии = Истина;
   КонецЕсли;
   // -Общепит

   Если ЭтоПроверкаНедостач Тогда
    ПодчиненныйОбъект.ОбщепитСписыватьНаРасходы = ОбщепитСписыватьНаРасходы;
    ПодчиненныйОбъект.ОбщепитСтатьяРасходов = ОбщепитСтатьяРасходов;
   ИначеЕсли ЭтоПроверкаИзлишков ИЛИ ЭтоОприходованиеОтрицательной Тогда
    ПодчиненныйОбъект.СтатьяПрочихДоходовРасходов = СтатьяПрочихДоходовРасходов;
    ПодчиненныйОбъект.ТипЦен = ТипЦен;
   КонецЕсли;

   ЗаполнениеДокументов.Заполнить(ПодчиненныйОбъект, ЭтотОбъект, Истина);

   Если ПодчиненныйОбъект.Товары.Количество()>0 Тогда
    ПодчиненныйОбъект.Товары.Очистить();
   КонецЕсли;

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

   Если НЕ ПодчиненныйОбъект.ПометкаУдаления = Ложь Тогда
    ПодчиненныйОбъект.ПометкаУдаления = Ложь;
   КонецЕсли;

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

  // +Общепит обнуление отрицательной партии, первой идет отрицательная партия
  // затем приходование, флаг устанавливается в истину на 0-ой итерации, когда есть
  // отрицательная партия, затем он должен быть сброшен
  Если ЭтоОтрицательнаяОбласть = Истина Тогда
   ЭтоОтрицательнаяОбласть = Ложь
  КонецЕсли;
  // -Общепит

 КонецЦикла;

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

КонецПроцедуры
---
выложите еще ПолучитьСписокПодчиненныхДокументов
ТаблицаПодчиненных = ПолучитьСписокПодчиненныхДокументов(ЭтотОбъект.Ссылка, мКэшПраваДоступаКМетаданным);
---
```1c
    Функция ПолучитьСписокПодчиненныхДокументов(ДокументОснование,мКэшПраваДоступаКМетаданным)

    Запрос = Новый Запрос;
    ТекстЗапроса = ";
    ТипДокументОснование = ТипЗнч(ДокументОснование);
    Для Каждого ЭлементСостава ИЗ Метаданные.КритерииОтбора.СвязанныеДокументы.Состав Цикл

    Если Не ЭлементСостава.Тип.СодержитТип(ТипДокументОснование) Тогда
    Продолжить;
    КонецЕсли;

    ПутьКДанным = ЭлементСостава.ПолноеИмя();
    СтруктураПутьКДанным = РазобратьПутьКОбъектуМетаданных(ПутьКДанным,мКэшПраваДоступаКМетаданным);

    ЕСли НЕ СтруктураПутьКДанным.ЕстьДоступКМетаданным Тогда
    Продолжить;
    КонецЕсли;

    ИмяОбъекта = СтруктураПутьКДанным.ТипОбъекта + "." + СтруктураПутьКДанным.ВидОбъекта;

    ТекущаяСтрокаГДЕ = "ГДЕ " + СтруктураПутьКДанным.ВидОбъекта + "." +СтруктураПутьКДанным.ИмяРеквизита + " = &ЗначениеКритерияОтбора";

    ИмяТЧ = Лев(СтруктураПутьКДанным.ИмяРеквизита, Найти(СтруктураПутьКДанным.ИмяРеквизита, ".")-1);
    ИмяРеквизита = Лев(СтруктураПутьКДанным.ИмяРеквизита, Найти(СтруктураПутьКДанным.ИмяРеквизита, ".")-1);
    ТекстЗапроса = ТекстЗапроса + ?(ТекстЗапроса = ", "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ОБЪЕДИНИТЬ
    |ВЫБРАТЬ") + "
    |" + СтруктураПутьКДанным.ВидОбъекта +".Ссылка ИЗ " + ИмяОбъекта + "." + СтруктураПутьКДанным.ИмяТаблЧасти + " КАК " + СтруктураПутьКДанным.ВидОбъекта + "
    |" + СтрЗаменить(ТекущаяСтрокаГДЕ, "..", ".") + "
    |";

    КонецЦикла;

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

    Возврат Запрос.Выполнить().Выгрузить();

    КонецФункции
```
---
В вот по Заполнению Списания куча переходов

```1c
    ////////////////////////////////////////////////////////////////////////////////
    // ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ

    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

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

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

    Процедура ЗаполнитьПоДокументуОснованию(ДанныеЗаполнения)

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

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

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

В итоге приходим к общему модулю ЗаполнениеДокументво
Процедура ЗаполнитьПоОснованию(ДокументОбъект, ДокументОснование, КопироватьПодразделение = Истина) Экспорт

и вообще темный лес.(((
---
ИнвентаризацияТоваровНаСкладе = ДанныеЗаполнения;
ИнвентаризацияТоваровНаСкладе чистили?
---
Конечно, первым делом. Если я правильно понял, это реквизит в документе Списание товаров называется Основание.
---
Сам документ Инвентаризация товарвов не трогали
---
Для Каждого ЭлементСостава ИЗ Метаданные.КритерииОтбора.СвязанныеДокументы.Состав Цикл
смотрите что в Общие.КритерииОтбора.СвязанныеДокументы.Состав
для бухгалтерии это
---
Спасибо, Кто бы мог подумать, что искать нужно не одну ссылку, а ссылку у каждого товара. Так просто, что даже думать в эту сторону не пришло в голову.