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

Заполнение данных документа из регистра сведений

Автор Анна Анисимова, 28 мая 2020, 17:16

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

Анна Анисимова

Здравствуйте.
В моей конфигурации есть регистр сведений (НормыТоплива1), в котором следующие измерения: Транспорт, Действует, ЗимнийКоэф и НормаПробег.
Так же есть документ (ПутевойЛист), в котором реквизиты НормаПробег и ЗимнийКоэф должны заполняться из регистра сведений ( или же это нужно делать из другого документа, из которого этот регистр заполняется?). Как это осуществить? Я так предполагаю, что через запрос, но не знаю как он правильно должен выглядеть и куда его вписать.
Уже имеется следующий код:

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

&НаСервере
Процедура АвтотранспортПриИзмененииНаСервере()
    Объект.Марка=Объект.Автотранспорт.Автотранспорт;
    Объект.ГосНомер=Объект.Автотранспорт.ГосНомер;
    Объект.Хранение=Объект.Автотранспорт.МестоХранения;
    Объект.Топливо=Объект.Автотранспорт.ТипТоплива;
    Объект.Водитель=Объект.Автотранспорт.Водитель;
    КонецПроцедуры


Так же нужно, чтобы соответсвующие данные заполнялись из записи в регистре не последней, а той, которая соответствует равенству Автотранспорт(реквезит заполняемого документа)=Транспорт(измерение регистра)

LexaK

какой-то бред!

&НаСервере
Процедура АвтотранспортПриИзмененииНаСервере()
    Объект.Марка=Объект.Автотранспорт.Автотранспорт;
    Объект.ГосНомер=Объект.Автотранспорт.ГосНомер;
    Объект.Хранение=Объект.Автотранспорт.МестоХранения;
    Объект.Топливо=Объект.Автотранспорт.ТипТоплива;
    Объект.Водитель=Объект.Автотранспорт.Водитель;
КонецПроцедуры

Автотранспорт какой-то элемент справочника, НЕ НАДО все его реквизиты копировать в Объект!
а что бы они были видны на форме, просто в конструкторе формы, в разделе Реквизиты, по плюсику раскройте Объект,
найдите и по плюсику раскройте реквизит Автотранспорт и вышкой перетащите на форму нужные данные (Марка,ГосНомер,Хранение...)
и тогда при выборе на форме Автотранспорта у вас автоматом будут обновляться все связанные с ним поля!
и ни какой г-программы при этом не надо писать!!!
если помогло нажмите: Спасибо!

Анна Анисимова

Цитата: LexaK от 28 мая 2020, 18:25
какой-то бред!

&НаСервере
Процедура АвтотранспортПриИзмененииНаСервере()
    Объект.Марка=Объект.Автотранспорт.Автотранспорт;
    Объект.ГосНомер=Объект.Автотранспорт.ГосНомер;
    Объект.Хранение=Объект.Автотранспорт.МестоХранения;
    Объект.Топливо=Объект.Автотранспорт.ТипТоплива;
    Объект.Водитель=Объект.Автотранспорт.Водитель;
КонецПроцедуры

Автотранспорт какой-то элемент справочника, НЕ НАДО все его реквизиты копировать в Объект!
а что бы они были видны на форме, просто в конструкторе формы, в разделе Реквизиты, по плюсику раскройте Объект,
найдите и по плюсику раскройте реквизит Автотранспорт и вышкой перетащите на форму нужные данные (Марка,ГосНомер,Хранение...)
и тогда при выборе на форме Автотранспорта у вас автоматом будут обновляться все связанные с ним поля!
и ни какой г-программы при этом не надо писать!!!

Спасибо за совет, так действительно удобнее и лучше. Но мой вопрос заключается не в этом.

antoneus

Набор = РегистрыСведений.НаборТоплива1.СоздатьНаборЗаписей();
Набор.Отбор.Транспорт.Установить(Объект.Автотранспорт);
Набор.Прочитать();
Если Набор.Количество() <> 0 Тогда
    Объект.ЗимнийКоэф = Набор[0].ЗимнийКоэф;
    Объект.НормаПробег= Набор[0].НормаПробег
КонецЕсли;


Вписать в процедуру АвтотранспортПриИзмененииНаСервере()

Еще, наверно, отбор надо устанавливать по измерению Действует. Это булево - Истина/Ложь?

Анна Анисимова

Цитата: antoneus от 28 мая 2020, 18:49
Вписать в процедуру АвтотранспортПриИзмененииНаСервере()
Не находит поле объекта Транспорт в Набор.Отбор.Транспорт.Установить(Объект.Автотранспорт);

antoneus

Цитата: Анна Анисимова от 28 мая 2020, 17:16
Здравствуйте.
В моей конфигурации есть регистр сведений (НормыТоплива1), в котором следующие измерения: Транспорт, Действует, ЗимнийКоэф и НормаПробег.

Не находит поле объекта Транспорт в Набор.Отбор.Транспорт.Установить(Объект.Автотранспорт);

Что-то не сходится (

Анна Анисимова

Цитата: antoneus от 28 мая 2020, 19:04
Цитата: Анна Анисимова от 28 мая 2020, 17:16
Здравствуйте.
В моей конфигурации есть регистр сведений (НормыТоплива1), в котором следующие измерения: Транспорт, Действует, ЗимнийКоэф и НормаПробег.

Не находит поле объекта Транспорт в Набор.Отбор.Транспорт.Установить(Объект.Автотранспорт);

Что-то не сходится (
Ладно, спасибо все равно

LexaK

Хм, ессстессственно, Отбор не будет работать!
Регистр НаборТоплива1 подчинен регистратору, отбор только по нему!
Это вам запрос надо писать примерно такой

&НаСервере
Процедура АвтотранспортПриИзмененииНаСервере()
//Запрос - шаблон
лкЗапрос = Новый Запрос;
лкЗапрос.Текст = "
    |Выбрать *
|//скорее всего регистр Периодический, если нет, то уберите СрезПоследних
|Из РегистрСведений.НаборТоплива1.СрезПоследних(, Транспорт = &Транспорт) КАК Рег ";
лкЗапрос.УстановитьПараметр("Транспорт",Объект.Автотранспорт);
лкРезультат = лкЗапрос.Выполнить().Выгрузить();
лкРезультат.Добавить();//для обнуления если данные не найдены
//заполняем либо обнуляем данные, при условии что имена реквизитов совпадают
ЗаполнитьЗначенияСвойств(Объект, лкРезультат[0]);
КонецПроцедуры
если помогло нажмите: Спасибо!

Анна Анисимова

Цитата: LexaK от 28 мая 2020, 19:29
Хм, ессстессственно, Отбор не будет работать!
Регистр НаборТоплива1 подчинен регистратору, отбор только по нему!
Это вам запрос надо писать примерно такой
Спасибо. Регистр подчинен регистратору, это так. Он непериодический, сделала как вы сказали.
Появилась следующая ошибка : Ошибка при вызове метода контекста (Выполнить)
                             лкРезультат = лкЗапрос.Выполнить().Выгрузить(); по причине:
Нельзя задавать параметры для таблицы "РегистрСведений.НормыТоплива1."
Из <<?>>РегистрСведений.НормыТоплива1.(, Транспорт = &Транспорт) КАК Рег

LexaK

Анна Анисимова,
ЦитироватьОн непериодический,
тогда так
&НаСервере
Процедура АвтотранспортПриИзмененииНаСервере()
    //Запрос - шаблон
    лкЗапрос = Новый Запрос;
    лкЗапрос.Текст = "
        |Выбрать первые 1 *
        |Из РегистрСведений.НаборТоплива1
        |Где Транспорт = &Транспорт ";
    лкЗапрос.УстановитьПараметр("Транспорт",Объект.Автотранспорт);
    лкРезультат = лкЗапрос.Выполнить().Выгрузить();
    лкРезультат.Добавить();//для обнуления если данные не найдены
    //заполняем либо обнуляем данные, при условии что имена реквизитов совпадают
    ЗаполнитьЗначенияСвойств(Объект, лкРезультат[0]);
КонецПроцедуры
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск