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

Заполнение реквизита табличной части из регистра

Автор kah, 30 апр 2021, 06:30

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

kah

Здравствуйте, вопрос такой: как реализовать автоматическое заполнение реквизита в табличной части документа из регистра, когда мы выбираем определенное поле. То есть, в моем примере есть Номенклатура - является ссылкой на справочник и Тип учета товара - который берется из регистра. При заполнении документа, когда я из списка выбираю нужную мне Номенклатуру автоматически должно подставляться данные из регистра накопления.
Вот вроде код написал, а не работает:


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

&НаКлиенте
Процедура СписокНоменклатурыТипУчетаТовараПриИзменении(Элемент)

СписокНоменклатурыТипУчетаТовараПриИзмененииНаСервере();
КонецПроцедуры

antoneus

Если тип учета должен подставляться при изменении номенклатуры, то и обрабатывать надо событие ПриИзменении в столбце Номенклатура

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

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

&НаКлиенте
Процедура СписокНоменклатурыНоменклатураПриИзменении(Элемент)
    ТекДанные = Элементы.СписокНоменклатуры.ТекущиеДанные;
    ТекДанные.ТипУчетаТовара = СписокНоменклатурыНоменклатураПриИзмененииНаСервере(ТекДанные.Номенклатура);
КонецПроцедуры

kah

Цитата: antoneus от 30 апр 2021, 09:56
Если тип учета должен подставляться при изменении номенклатуры, то и обрабатывать надо событие ПриИзменении в столбце Номенклатура

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

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

&НаКлиенте
Процедура СписокНоменклатурыНоменклатураПриИзменении(Элемент)
    ТекДанные = Элементы.СписокНоменклатуры.ТекущиеДанные;
    ТекДанные.ТипУчетаТовара = СписокНоменклатурыНоменклатураПриИзмененииНаСервере(ТекДанные.Номенклатура);
КонецПроцедуры


Странно, выдает следующие ошибки:
{Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(12,48)}: Процедура не может возвращать значение
        Возврат РезультатЗапроса.ТипУчетаТовара<<?>>; (Проверка: Сервер)
{Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(12,48)}: Процедура не может возвращать значение
        Возврат РезультатЗапроса.ТипУчетаТовара<<?>>; (Проверка: Тонкий клиент)
{Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(19,32)}: Обращение к процедуре как к функции (СписокНоменклатурыНоменклатураПриИзмененииНаСервере)
    ТекДанные.ТипУчетаТовара = <<?>>СписокНоменклатурыНоменклатураПриИзмененииНаСервере(ТекДанные.Номенклатура); (Проверка: Тонкий клиент)
{Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(19,84)}: Слишком много фактических параметров (СписокНоменклатурыНоменклатураПриИзмененииНаСервере)
    ТекДанные.ТипУчетаТовара = СписокНоменклатурыНоменклатураПриИзмененииНаСервере(<<?>>ТекДанные.Номенклатура); (Проверка: Тонкий клиент)


antoneus

Потому что СписокНоменклатурыНоменклатураПриИзмененииНаСервере - это не процедура должна быть, а функция.

kah

Цитата: antoneus от 01 мая 2021, 18:46
Потому что СписокНоменклатурыНоменклатураПриИзмененииНаСервере - это не процедура должна быть, а функция.
Понял, спасибо

Теги:

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

Рейтинг@Mail.ru

Поиск