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

Вытащить данные из табличной части документа

Автор jastreb, 03 июл 2013, 16:34

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

jastreb

Здравствуйте.
Только начал изучать 1С.
Возник такой вопрос.
Есть документ "Приходная накладная" в табличной части которого содержится информация о товаре (Артикул / Наименование / ЦенаНПА).
Наименование берется из справочника "Номенклатура".
Подскажите пожалуйста как вытащить из табличной части документа ЦенаНПА?
И как потом ЦенаНПА подставить автоматически в документ Продажи при выборе в этом документе номенклатуры?

Если я правильно понял, то сначала вытаскиваем из табличной части значение при помощи запроса

Функция ЦенаНПА(ЭлементНоменклатуры,ЦенаНПА) Экспорт
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
             |    ПриходнаяНакладаня.ЦенаНПА КАК ЦенаНПА
|ИЗ
|    Документ.ПриходнаяНакладаня.ЦенаНПА КАК ЦенаНПА
|ГДЕ
|    ПриходнаяНакладаня.ЦенаНПА = &ЦенаНПА";

   Запрос.УстановитьПараметр("ЦенаНПА",ЦенаНПА);
                   Результат=Запрос.Выполнить();
                   Выборка = Запрос.Выбрать();
                   Возврат Выборка;
КонецФункции

А затем в процедуре вставляем полученные данные в документ


&НаКлиенте
Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)
//ПОлчусить тек строку таб части
СтрТабЧасти=Элементы.ПереченьНоменклатуры.ТекущиеДанные;
СтрТабЧасти.ЦенаНПА = ТабЧастьДок.ЦенаНПА(СтрТабЧасти.Номенклатура)
КонецПроцедуры


И в итоге выдает ошишбку
{Документ.Продажа.Форма.ФормаДокумента.Форма(45)}: Недостаточно фактических параметров
   СтрТабЧасти.ЦенаНПА = ТабЧастьДок.ЦенаНПА(СтрТабЧасти.Номенклатура)

Подскажите пожалуйста как это поправить, я не понимаю.

Спасибо

Besart

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

выбирает цену с последней приходной
Добавлено: 03 июл 2013, 20:16


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

в этом случае выбирается из последней приходной, максимальная цена (если одана номенклатура присутствует в накладной несколько раз) выбранной номенклатуры
Добавлено: 03 июл 2013, 20:18


сорри, совсем запарился :xfbnsdfb:        
Функция ЦенаНПА(Номенклатура) Экспорт
    Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ ПЕРВЫЕ 1
        |    МАКСИМУМ(ПриходнаяНакладнаяСписокНоменклатуры.Цена) КАК Цена,
        |    ПриходнаяНакладная.Ссылка
        |ИЗ
        |    Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
        |        ПО ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = ПриходнаяНакладная.Ссылка
        |ГДЕ
        |    ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура = &Номенклатура
        |
        |СГРУППИРОВАТЬ ПО
        |    ПриходнаяНакладная.Ссылка
        |
        |УПОРЯДОЧИТЬ ПО
        |    ПриходнаяНакладная.Дата УБЫВ";
                 
                   Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
                   Результат=Запрос.Выполнить();
                   Выборка = Запрос.Выбрать();
                    Пока Выборка.Следующий Цикл
                       Возврат Выборка.Цена; \\здесь была небольшая ошибка
                    КонецЦикла;
КонецФункции

jastreb

2:Besart
Спасибо, подошел второй вариант, что вы предложили.
Все заработало.


Теги:

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

Рейтинг@Mail.ru

Поиск