1C Выборка данных из разных справочников в единую табличную часть документа.
Добрый день, заранее прошу простить за глупый вопрос. Дело в том, что в документе есть реквизит с ссылкой на два справочника. Также в этом документе есть табличная часть, в ней должен отображаться состав пищи. Я смог реализовать вывод данных только из одного справочника, где есть табличная часть, пример :Есть справочник Блюда, в котором есть табличная часть Продукты. В этой табличной части есть ссылка на СПРАВОЧНИК Продукты. Если выбирать блюдо в документе, тогда в табличную часть выводятся все данные. Но есть ещё справочник Наборы, у него также есть табличная часть Состав, но у него есть 3 ссылки "Строка, СсылкаСправочникаБлюда, СсылкаСправочникаПродукты". Если в документе уже выбирать НАБОР, тогда выводятся нумерованные пустые поля. Количество полей совпадает с составом в табличной части справочника Наборы.
Я прошу прощения, что так глупо описал свою проблему. Сама проблема звучит очень легко, но я уже замучился, что не так.
Правильный код для вывода одного блюда
Код для вывода состава набора из ДВУХ справочников
Проблема только с последним кодом.
Я прошу прощения, что так глупо описал свою проблему. Сама проблема звучит очень легко, но я уже замучился, что не так.
Правильный код для вывода одного блюда
Прод = Объект.Блюдо.Продукты.Выгрузить();
Объект.Продукты.Загрузить(Прод);
Для Каждого Элемент Из Прод Цикл
Стр = Объект.Продукты.Добавить();
Прервать;
КонецЦикла;
Код для вывода состава набора из ДВУХ справочников
Набор = Объект.Блюдо.Состав.Выгрузить();
Объект.Продукты.Загрузить(Набор);
Для каждого Элемента Из Набор Цикл
СтрокаТЧ = Объект.Продукты.Добавить()
КонецЦикла;
Проблема только с последним кодом.
По теме из базы знаний
Найденные решения
Попробуйте заполнять ТЧ построчно, проверяя тип значения:
Объект.Продукты.Очистить();
Для Каждого СоставБлюда Из Объект.Блюдо.Состав Цикл
ДанныеОПродукте = Объект.Продукты.Добавить();
Если ТипЗнч(СоставБлюда.<ИмяВашегоРеквизита>) = Тип("СправочникСсылка.Продукты") Тогда
// код для заполнения реквизитов ТЧ документа из справочника Продукты
ИначеЕсли ТипЗнч(СоставБлюда.<ИмяВашегоРеквизита>) = Тип("СправочникСсылка.Наборы") Тогда
// код для заполнения реквизитов ТЧ документа из справочника Наборы
КонецЕсли;
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Ну если я правильно понял задачу, то проблема в том, что СтрокаТЧ имеет некорректный тип данных. Т.е. я думаю, что там тип СправочникСсылка.Продукты. Они загружаются корректно, а когда вы грузите строки из справочника "Наборы" то там типы данных отличаются, поэтому загрузка и не происходит.
Попробуйте заполнять ТЧ построчно, проверяя тип значения:
Объект.Продукты.Очистить();
Для Каждого СоставБлюда Из Объект.Блюдо.Состав Цикл
ДанныеОПродукте = Объект.Продукты.Добавить();
Если ТипЗнч(СоставБлюда.<ИмяВашегоРеквизита>) = Тип("СправочникСсылка.Продукты") Тогда
// код для заполнения реквизитов ТЧ документа из справочника Продукты
ИначеЕсли ТипЗнч(СоставБлюда.<ИмяВашегоРеквизита>) = Тип("СправочникСсылка.Наборы") Тогда
// код для заполнения реквизитов ТЧ документа из справочника Наборы
КонецЕсли;
КонецЦикла;
Показать
(13) Пробовал реализовать по вашему коду, но итог точно такой же. Я уже пытался поменять тип в табличной части, переписывал несколько раз код. Но в конечном результате выводится только состав из справочника Блюда. Если отдельно пробовать вывести состав из справочника Набор, ничего не меняется.
Что значит "итог точно такой же"? Имеет ли реквизит формы составной тип значения, чтобы правильно отображать то, что помещено в объект? Чем заполняется переменная Продукты? Нужен пример полного кода, с именами реквизитов, чтобы понять в чём причина. Без всей картины трудно сказать, что именно не выходит.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот