1C Выборка данных из разных справочников в единую табличную часть документа.

1. Zemo 30.07.21 13:29 Сейчас в теме
Добрый день, заранее прошу простить за глупый вопрос. Дело в том, что в документе есть реквизит с ссылкой на два справочника. Также в этом документе есть табличная часть, в ней должен отображаться состав пищи. Я смог реализовать вывод данных только из одного справочника, где есть табличная часть, пример :Есть справочник Блюда, в котором есть табличная часть Продукты. В этой табличной части есть ссылка на СПРАВОЧНИК Продукты. Если выбирать блюдо в документе, тогда в табличную часть выводятся все данные. Но есть ещё справочник Наборы, у него также есть табличная часть Состав, но у него есть 3 ссылки "Строка, СсылкаСправочникаБлюда, СсылкаСправочникаПродукты". Если в документе уже выбирать НАБОР, тогда выводятся нумерованные пустые поля. Количество полей совпадает с составом в табличной части справочника Наборы.
Я прошу прощения, что так глупо описал свою проблему. Сама проблема звучит очень легко, но я уже замучился, что не так.

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


Код для вывода состава набора из ДВУХ справочников
Набор = Объект.Блюдо.Состав.Выгрузить();
Объект.Продукты.Загрузить(Набор);
Для каждого Элемента Из Набор Цикл
СтрокаТЧ = Объект.Продукты.Добавить()
КонецЦикла;


Проблема только с последним кодом.
По теме из базы знаний
Найденные решения
13. user925427 123 30.07.21 16:43 Сейчас в теме
Попробуйте заполнять ТЧ построчно, проверяя тип значения:
Объект.Продукты.Очистить();
Для Каждого СоставБлюда Из Объект.Блюдо.Состав Цикл
   ДанныеОПродукте = Объект.Продукты.Добавить();
   Если ТипЗнч(СоставБлюда.<ИмяВашегоРеквизита>) = Тип("СправочникСсылка.Продукты") Тогда
       // код для заполнения реквизитов ТЧ документа из справочника Продукты
   ИначеЕсли ТипЗнч(СоставБлюда.<ИмяВашегоРеквизита>) = Тип("СправочникСсылка.Наборы") Тогда
      // код для заполнения реквизитов ТЧ документа из справочника Наборы
   КонецЕсли;
КонецЦикла;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Kolesonik 13 30.07.21 13:36 Сейчас в теме
(1)и что за циклы у вас в коде?
4. Zemo 30.07.21 13:38 Сейчас в теме
(3)Да, у меня составной тип данных.
Цикл используется для выборки всех элементов из справочника.
Первый код полностью рабочий, думал по аналогии смогу сделать тоже самое и со вторым.
5. Kolesonik 13 30.07.21 13:39 Сейчас в теме
(4)подозреваю что если вы удалите цикл в первом коде он тоже будет работать
7. Zemo 30.07.21 13:43 Сейчас в теме
(5) Всё верно, но основная проблема с последним кодом, который выводит пустые поля, но заполняет верное количество товара.
6. Kolesonik 13 30.07.21 13:42 Сейчас в теме
(1)и если во втором удалите цикл тоже все заработает
8. Zemo 30.07.21 13:44 Сейчас в теме
(6) Только что пробовал, выводит только количество и пустые поля.
10. Kolesonik 13 30.07.21 13:48 Сейчас в теме
(8)имена таблиц отличаются значит, если это так то без цикла никак, только его надо правильно написать
11. Zemo 30.07.21 13:51 Сейчас в теме
(10) Я тоже об этом задумался, запутался уже сам. Попробую ещё раз переписать всё, спасибо.
9. RustamZz 30.07.21 13:47 Сейчас в теме
2. Kolesonik 13 30.07.21 13:35 Сейчас в теме
(1)тип значения, у строки ТЧ составной?
12. MikhailDr 30.07.21 14:05 Сейчас в теме
Ну если я правильно понял задачу, то проблема в том, что СтрокаТЧ имеет некорректный тип данных. Т.е. я думаю, что там тип СправочникСсылка.Продукты. Они загружаются корректно, а когда вы грузите строки из справочника "Наборы" то там типы данных отличаются, поэтому загрузка и не происходит.
15. Zemo 30.07.21 18:19 Сейчас в теме
(12) Уже экспериментировал с типами данных, но это не решило ситуацию.
13. user925427 123 30.07.21 16:43 Сейчас в теме
Попробуйте заполнять ТЧ построчно, проверяя тип значения:
Объект.Продукты.Очистить();
Для Каждого СоставБлюда Из Объект.Блюдо.Состав Цикл
   ДанныеОПродукте = Объект.Продукты.Добавить();
   Если ТипЗнч(СоставБлюда.<ИмяВашегоРеквизита>) = Тип("СправочникСсылка.Продукты") Тогда
       // код для заполнения реквизитов ТЧ документа из справочника Продукты
   ИначеЕсли ТипЗнч(СоставБлюда.<ИмяВашегоРеквизита>) = Тип("СправочникСсылка.Наборы") Тогда
      // код для заполнения реквизитов ТЧ документа из справочника Наборы
   КонецЕсли;
КонецЦикла;
Показать
14. Zemo 30.07.21 18:09 Сейчас в теме
(13) Пробовал реализовать по вашему коду, но итог точно такой же. Я уже пытался поменять тип в табличной части, переписывал несколько раз код. Но в конечном результате выводится только состав из справочника Блюда. Если отдельно пробовать вывести состав из справочника Набор, ничего не меняется.
16. user925427 123 30.07.21 22:59 Сейчас в теме
Что значит "итог точно такой же"? Имеет ли реквизит формы составной тип значения, чтобы правильно отображать то, что помещено в объект? Чем заполняется переменная Продукты? Нужен пример полного кода, с именами реквизитов, чтобы понять в чём причина. Без всей картины трудно сказать, что именно не выходит.
Оставьте свое сообщение

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