Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 дек 2021, 08:17

Не правильное автоматическое заполнение табличной части.

Автор ShaEv, 27 мая 2021, 10:51

0 Пользователей и 1 гость просматривают эту тему.

ShaEv

Здравствуйте, пытаюсь заполнить табличную часть документа из справочника. Использую для этого следующий код:
&НаКлиенте
Процедура РассчитываемыйПоказательПриИзменении(Элемент)
   Запись = Объект.РассчитываемыйПоказатель;
   ЗаполнитьТабличнуюЧасть(Запись);
КонецПроцедуры

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

Проблема в том что в итоге в документ вносится не только нужные строки таблицы, но и строки из всех предыдущих записей справочника. То есть имеется у меня в справочнике две записи в одной 3 строки таблицы, а во второй 2. Мне нужны строки из второй записи, а мне выдаёт все 5.

alexandr_ll

Цитата: ShaEv от 27 мая 2021, 10:51
Здравствуйте, пытаюсь заполнить табличную часть документа из справочника. Использую для этого следующий код:
&НаКлиенте
Процедура РассчитываемыйПоказательПриИзменении(Элемент)
   Запись = Объект.РассчитываемыйПоказатель;
   ЗаполнитьТабличнуюЧасть(Запись);
КонецПроцедуры

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

Проблема в том что в итоге в документ вносится не только нужные строки таблицы, но и строки из всех предыдущих записей справочника. То есть имеется у меня в справочнике две записи в одной 3 строки таблицы, а во второй 2. Мне нужны строки из второй записи, а мне выдаёт все 5.
Что собой представляет переменная "Запись" в вашем запросе?

LexaK

нужно добавить соединение между таблицами

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

ShaEv

Цитата: alexandr_ll от 27 мая 2021, 11:00
Что собой представляет переменная "Запись" в вашем запросе?
Переменная "Запись" задаётся при изменении "Объект.РассчитываемыйПоказатель;" который имеет тип "СправочникСсылка.ПоказательСвоихРасчетов".

ShaEv

Цитата: LexaK от 27 мая 2021, 11:45
нужно добавить соединение между таблицами

Это не две таблицы, "План" это сам справочник, а "ПланПоказатели" это его табличная часть.

LexaK

ЦитироватьЭто не две таблицы, "План" это сам справочник, а "ПланПоказатели" это его табличная часть.
да все правильно, более подробно
данные шапки/реквизиты справочника лежат в одной таблице
данные таб.частей лежат в другой
ну просто это так называется
и связь между самим справочником и его табличной частью делают как раз через соединение!
вы попробовали исправленный код который вам выложили?
ответ Понравился? (в смысле пригодился?)

ShaEv

Цитата: LexaK от 27 мая 2021, 13:21
да все правильно, более подробно
данные шапки/реквизиты справочника лежат в одной таблице
данные таб.частей лежат в другой
ну просто это так называется
и связь между самим справочником и его табличной частью делают как раз через соединение!
вы попробовали исправленный код который вам выложили?

{Документ.РасчетПоказателейСвоихФормул.Форма.ФормаДокумента.Форма(115)}: Ошибка при вызове метода контекста (Выполнить)
   Объект.Показатели.Загрузить(Запрос.Выполнить().Выгрузить());
по причине:
{(8, 69)}: Ожидается имя таблицы
Справочник.ПоказательСвоихРасчетов.Показатели КАК ПланПоказатели<<?>>,

по причине:
{(8, 69)}: Ожидается имя таблицы
Справочник.ПоказательСвоихРасчетов.Показатели КАК ПланПоказатели<<?>>,

antoneus

Тут даже соединения не надо, достаточно

Запрос.Текст =
    "ВЫБРАТЬ
    |    ПланПоказатели.ПоказательСвоихРасчетов,
    |    ПланПоказатели.Обозначение,
    |    ПланПоказатели.Ссылка
    |ИЗ
    |    Справочник.ПоказательСвоихРасчетов.Показатели КАК ПланПоказатели
    |ГДЕ
    |    ПланПоказатели.Ссылка = &Ссылка";

LexaK

ааа, ошибка, куда без них
запятая не нужна, попробуйте так

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

ответ Понравился? (в смысле пригодился?)

ShaEv

Цитата: ShaEv от 27 мая 2021, 13:26

{Документ.РасчетПоказателейСвоихФормул.Форма.ФормаДокумента.Форма(115)}: Ошибка при вызове метода контекста (Выполнить)
   Объект.Показатели.Загрузить(Запрос.Выполнить().Выгрузить());
по причине:
{(8, 69)}: Ожидается имя таблицы
Справочник.ПоказательСвоихРасчетов.Показатели КАК ПланПоказатели<<?>>,

по причине:
{(8, 69)}: Ожидается имя таблицы
Справочник.ПоказательСвоихРасчетов.Показатели КАК ПланПоказатели<<?>>,

Если убрать запятую:
{Документ.РасчетПоказателейСвоихФормул.Форма.ФормаДокумента.Форма(115)}: Ошибка при вызове метода контекста (Выполнить)
   Объект.Показатели.Загрузить(Запрос.Выполнить().Выгрузить());
по причине:
{(9, 13)}: Поле не найдено "План.Ccылка"
по План.<<?>>Ccылка = ПланПоказатели.Ссылка

по причине:
{(9, 13)}: Поле не найдено "План.Ccылка"
по План.<<?>>Ccылка = ПланПоказатели.Ссылка

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск