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

Вывод в форме значения из регистра сведений

Автор Opty, 06 мая 2015, 17:16

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

Opty

Всем доброго времени суток! Я совсем совсем начинающий в 1С программер, пробую сделать первую программку по отчетности для друга, столкнулся с проблемой:

Подскажите плиз совсем начинающему программеру...

  • Есть справочник РазмерыДверей (там только ширина).
  • Есть справочник Двери (только наименование).
  • Создан зависимый регистр сведений СебестоимостьДверей, который заполняется при вставке значений в документ СебестоимостьДверей (указывается дата, выбирается наименование двери и ее размер, затем проставляется цена на  эту дату)
  • Есть документ Заказы, в котором в табличной части построчно можно выбрать дверь и размер.

Вопрос: как в табличной части автоматически вывести стоимость двери на интересующую дату? Сорри, если не очень понятно изложил суть вопроса, пока что я полный нуп)

Подскажите, пожалуйста, кто может!

Opty

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

Rasty

Ну а тут тебе нужен "Запрос", в конфигураторе нажми Ctrl+F1, откроется Синтаксис Помощник,  там найди запрос, а там есть примеры  и подробно описано что куда зачем и почему
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

herosmart

Добрый вечер. Как я понял, у Вас все поля табличной части документы Заказы подгружаются из регистра, а поле стоимость не хочет? Если так, то проверьте, чтобы у реквизита табличной части Стоимость и реквизита одноименного из регистра сведений был одинаковый тип.

Opty

Цитата: herosmart от 06 мая 2015, 21:03
Добрый вечер. Как я понял, у Вас все поля табличной части документы Заказы подгружаются из регистра, а поле стоимость не хочет? Если так, то проверьте, чтобы у реквизита табличной части Стоимость и реквизита одноименного из регистра сведений был одинаковый тип.
Вы об этом?:
Ресурс "Стоимость" в регистре сведений ЦеныНаДвери - число 15,2
Реквизит табличной части "Себестоимость" в документе Заказы - число 15,2


Добавлено: 08 мая 2015, 13:02


Цитата: Rasty от 06 мая 2015, 17:46
Ну а тут тебе нужен "Запрос", в конфигураторе нажми Ctrl+F1, откроется Синтаксис Помощник,  там найди запрос, а там есть примеры  и подробно описано что куда зачем и почему
Покопался, покопался, но не выходит каменная чаша(



Это документ СебестоимостьДверей


Это - регистр сведений ЦеныНаДвери

Судя по скриншоту - данные в него записываются, значит конструктор движений работает как надо, да?

Вот программный код Модуля ФормыДокумента (я специально пока не передавал никакие параметры, чтоб понять что вообще выводится)


Однако результат выполнения запроса удручает - не там никаких цены на двери....


Где я опять туплю?)

vitasw

Запрос.Выполнить().Выгрузить() = ТЗ, смотрите там

Opty

Цитата: vitasw от 08 мая 2015, 13:24
Запрос.Выполнить().Выгрузить() = ТЗ, смотрите там

Спасибо за пинок в нужную сторону)

Покопал, нашел, сделал у себя так:
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для каждого Строка Из РезультатЗапроса Цикл
Сообщить (Строка);
КонецЦикла;


По Останове Строка выдает тот что нужно, значит функция рабочая. Осталось видимо параметрами набить запрос!
Только странно, что РезультатЗапроса не выводит по shifr+f9 все строки сразу....
Добавлено: 08 мая 2015, 14:53


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


C вашей помощью дело двигается, ура) Себестоимость из регистра сведений в принципе находится.
Однако не могу впихнуть дату заказа, на которую надо искать сведения. Начал просто с ТекущаяДата() и получаю ошибку

{Документ.Заказы.Форма.ФормаДокумента.Форма(34)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
по причине:
{(1, 56)}: Синтаксическая ошибка
ВЫБРАТЬ * ИЗ РегистрСведений.ЦеныНаДвери.СрезПоследних(<<?>>ТекущаяДата())

vitasw

(&ТекущаяДата)
и установить параметр запроса

Opty

Цитата: vitasw от 08 мая 2015, 15:10
(&ТекущаяДата)
и установить параметр запроса

Пробовал и с амперсантами и без них, со скобками и без, с кавычками и без...
Даже так делал)))))
ДатаЗапроса = ТекущаяДата();
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.ЦеныНаДвери.СрезПоследних(&ТекущаяДата=ДатаЗапроса)";


результат один(

Kironten

Цитата: Opty от 08 мая 2015, 15:56
Цитата: vitasw от 08 мая 2015, 15:10
(&ТекущаяДата)
и установить параметр запроса

Пробовал и с амперсантами и без них, со скобками и без, с кавычками и без...
Даже так делал)))))
ДатаЗапроса = ТекущаяДата();
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.ЦеныНаДвери.СрезПоследних(&ТекущаяДата=ДатаЗапроса)";


результат один(


жесть!
Вы если не умеете писать текст запроса, ну воспользуйтесь хотя бы конструктором. Они для этого и предназначены
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.ЦеныНаДвери.СрезПоследних(&ТекущаяДата,)"
Запрос.УстановитьПараметр("ТекущаяДата", ДатаЗапроса);

Теги:

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

Рейтинг@Mail.ru

Поиск