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

Вывести список счетов в которых имеется нужна номенклатура

Автор kot488, 01 мар 2018, 15:41

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

kot488

Есть УТП для Украины, обычные формы. На форме номенклатуры имеется 2 кнопки Счета и Отгрузки. Если выбрать нужную номенклатуру и нажать Отгрузки откроется окно с документов и колличество отгруженых позиций данной номенклатуры. Если нажать счет то покажет информацию по счетам. Но если был выставлен счет но отгрузки еще не было, то соответственно окно с отчетом не откроется, так как нет записи в регистре.
Подскажите пожалуйста, как можно сделать, что бы показывало счета даже без движения?
Не получается вывести кол-во и цену, подскажите пожалуйста как правильно передать таблицу значений на форму?

Процедура ОткрытьВыписаныеСчета(ТекЗначение) Экспорт

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

Запрос.УстановитьПараметр("Номенклатура", ТекЗначение);

РезультатПоиска = Запрос.Выполнить().Выгрузить();
//.Выбрать();

ТаблицаПартий = Новый ТаблицаЗначений;

ТаблицаПартий.Колонки.Добавить("Документ",,, 70);
ТаблицаПартий.Колонки.Добавить("Контрагент",,, 30);
ТаблицаПартий.Колонки.Добавить("Цена",,, 20);
ТаблицаПартий.Колонки.Добавить("Расход",,, 20);

Для Каждого Стр Из РезультатПоиска Цикл

НоваяСтр = ТаблицаПартий.Добавить();
НоваяСтр.Документ = Стр.Ссылка;
НоваяСтр.Контрагент = Стр.Контрагент;
НоваяСтр.Цена = ?(Стр.Количество > 0,Окр(Стр.Стоимость/Стр.Количество,2),0);
НоваяСтр.Расход = Стр.Количество;

КонецЦикла;

Если ТаблицаПартий.Количество() > 0 Тогда
ФормаПартий  = ПолучитьОбщуюФорму("ФормаПартий");
ТП = ФормаПартий.ЭлементыФормы.Найти("ТабличноеПоле");
ТП.Значение = ТаблицаПартий;
ТП.СоздатьКолонки();
ФормаПартий.Открыть();
КонецЕсли;

КонецПроцедуры


AIFrame

НоваяСтр.Цена = ?(Стр.Количество > 0,Окр(Стр.Стоимость/Стр.Количество,2),0);
  "ВЫБРАТЬ
    |    СчетНаОплатуПокупателю.Товары.Количество КАК Количество,
    |    СчетНаОплатуПокупателю.Контрагент КАК Контрагент,
    |    СчетНаОплатуПокупателю.Ссылка

Где Стоимость?

Это раз.
Два - зачем в цикле обходить результат?
Создай эту таблицу, установи ширину колонок и просто выгрузи в нее запрос.

Добавлено: 02 мар 2018, 10:14


    ТаблицаПартий = Новый ТаблицаЗначений;
   
    ТаблицаПартий.Колонки.Добавить("Документ",,, 70);
    ТаблицаПартий.Колонки.Добавить("Контрагент",,, 30);
    ТаблицаПартий.Колонки.Добавить("Цена",,, 20);
    ТаблицаПартий.Колонки.Добавить("Расход",,, 20);

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

Добавлено: 02 мар 2018, 10:24


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

kot488

Цитата: AIFrame от 02 мар 2018, 10:08
Либо в запросе

А если так?

Процедура ОткрытьВыписаныеСчета(ТекЗначение) Экспорт

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
     |   СчетНаОплатуПокупателю.Товары.Количество КАК Расход,
     |   СчетНаОплатуПокупателю.Контрагент КАК Контрагент,
     |  ВЫРАЗИТЬ(ВЫБОР
     |               КОГДА СчетНаОплатуПокупателю.Товары.Количество > 0
     |                   ТОГДА СчетНаОплатуПокупателю.Товары.Сумма / СчетНаОплатуПокупателю.Товары.Количество
     |               ИНАЧЕ 0
     |           КОНЕЦ КАК ЧИСЛО(12, 2)) КАК Цена,
     |   СчетНаОплатуПокупателю.Ссылка КАК Документ
     |ИЗ
     |   Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
     |ГДЕ
     |   СчетНаОплатуПокупателю.Товары.Номенклатура = &Номенклатура
     |
     |УПОРЯДОЧИТЬ ПО
     |   СчетНаОплатуПокупателю.Дата";

Запрос.УстановитьПараметр("Номенклатура", ТекЗначение);

РезультатПоиска = Запрос.Выполнить().Выгрузить();
//.Выбрать();

ТаблицаПартий = Новый ТаблицаЗначений;

ТаблицаПартий.Колонки.Добавить("Документ",,, 70);
ТаблицаПартий.Колонки.Добавить("Контрагент",,, 30);
ТаблицаПартий.Колонки.Добавить("Цена",,, 20);
ТаблицаПартий.Колонки.Добавить("Расход",,, 20);

Для Каждого Стр Из РезультатПоиска Цикл

НоваяСтр = ТаблицаПартий.Добавить();
НоваяСтр.Документ = Стр.Документ;
НоваяСтр.Контрагент = Стр.Контрагент;
НоваяСтр.Цена = Стр.Цена;
НоваяСтр.Расход = Стр.Расход;

КонецЦикла;

Если ТаблицаПартий.Количество() > 0 Тогда
ФормаПартий  = ПолучитьОбщуюФорму("ФормаПартий");
ТП = ФормаПартий.ЭлементыФормы.Найти("ТабличноеПоле");
ТП.Значение = ТаблицаПартий;
ТП.СоздатьКолонки();
ФормаПартий.Открыть();
КонецЕсли;

КонецПроцедуры

Форма открыватеся, но вместо кол-во и цена пишет ТаблицаЗначений. Как эта значения можно вывести?

AIFrame

Цитата: kot488 от 02 мар 2018, 12:13ТП.Значение = ТаблицаПартий;
Да что это такое?
Кто тебя такому научил?
Работай с реквизитом формы, зачем тебе элемент?
Почитай как выгружать Таблицу значений в Таблицу значений.

Теги:

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

Рейтинг@Mail.ru

Поиск