Имя: Пароль:
1C
1С v8
Справочник "Номенклатура" + вывод наименование контрагента
0 Pavel55555
 
14.12.16
15:53
Доброго дня!
Платформа 8.3 Толстый клиент. УТ 10.3
Данные:
Справочник "Номенклатура", созданы колонки "НаименованиеНоменклатурыКонтрагента" "КодНоменклатурыКонтрагента", хочу их заполнить из "РегистрСведений.НоменклатураКонтрагентов.
Пытаюсь вывести хотя бы Наименование контрагента.
Вот что пока получилось:

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


Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
Если ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) Тогда
        НоменклатураКонтрагентов = ПолучитьНоменклатуруКонтрагентов(ДанныеСтроки.Номенклатура);
        Если НЕ НоменклатураКонтрагентов = Неопределено Тогда            ОформлениеСтроки.Ячейки.НоменклатураКонтрагентов.УстановитьТекст(НаименованиеНоменклатурыКонтрагента);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Данный код выдает:
{Справочник.Номенклатура.Форма.ФормаСписка.Форма(938,25)}: Недостаточно фактических параметров (ПолучитьНоменклатуруКонтрагентов)
        МестоХранения = <<?>>ПолучитьНоменклатуруКонтрагентов(ДанныеСтроки.Номенклатура); (Проверка: Толстый клиент (обычное приложение))

Не могу понять, что то не то сделал!
Дело в том, что в ТЧ Номенклатуры контрагента несколько, как сделать что бы выводил хотя бы первую строку ТЧ?

PS
Админам портала можете удалить предыдущею тему?
"ВЫВОД НОМЕНКЛАТУРЫ КОНТРАГЕНТА В СПРАВОЧНИКЕ"
Спасибо!
1 Анютик
 
14.12.16
15:54
Вы объявляете функцию с двумя параметрами Функция ПолучитьНоменклатуруКонтрагентов(Номенклатура, НоменклатураКонтрагентов) Экспорт
а вызываете с одним
МестоХранения = <<?>>ПолучитьНоменклатуруКонтрагентов(ДанныеСтроки.Номенклатура); (Проверка: Толстый клиент (обычное приложение))
2 Анютик
 
14.12.16
15:55
Система же написала русским языком "недостаточно фактических параметров".
з.ы. а еще на пользователей ругаемся, что не читают сообщения системы...
3 Pavel55555
 
14.12.16
16:20
Функция ПолучитьНоменклатуруКонтрагента(Номенклатура) Экспорт
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    НоменклатураКонтрагентов.Номенклатура,
                   |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента,
                   |    НоменклатураКонтрагентов.КодНоменклатурыКонтрагента
                   |ИЗ
                   |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатурыКонтрагента
                   |ГДЕ
                   |    НоменклатураКонтрагентов.Номенклатура = &Номенклатура";
                  
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    //Запрос.УстановитьПараметр("НаименованиеНоменклатурыКонтрагента", НаименованиеНоменклатурыКонтрагента);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Возврат Выборка.НоменклатурыКонтрагента;    
    Иначе
      Возврат неопределено
    КонецЕсли;

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

Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
Если ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) Тогда
        НоменклатураКонтрагентов = ПолучитьНоменклатуруКонтрагента(ДанныеСтроки.Номенклатура);
        Если НЕ НоменклатураКонтрагентов = Неопределено Тогда
        ОформлениеСтроки.Ячейки.НоменклатураКонтрагентов.УстановитьТекст(НоменклатураКонтрагентов);
        КонецЕсли;
    КонецЕсли;

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

Вывдает:
{Справочник.Номенклатура.Форма.ФормаСписка.Форма(937)}: Значение не является значением объектного типа (Номенклатура)
        Если ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) Тогда
4 portowyi
 
14.12.16
16:21
(0) В выборке поля "НоменклатураКонтрагентов" нет, да и количество установленных параметров запроса смущает...
5 portowyi
 
14.12.16
16:22
(3) Может так?

Если Выборка.Следующий() Тогда
        Возврат Выборка.КодНоменклатурыКонтрагента;    
    Иначе
      Возврат неопределено
    КонецЕсли;
6 Михаил Козлов
 
14.12.16
16:25
1. Попробуйте заполнить основного поставщика в справочнике Номенклатура и по паре (Номенклатура, Номенклатура.ОсновнойПоставщик) получить данные из РС "НоменклатураКонтрагентов".
2. Берите первую запись из РС "НоменклатураКонтрагентов" с отбором по номенклатура.
(3) ДЛЯ каждого оф ИЗ ОформленияСтрок Цикл
        Номенклатура = оф.данныеСтроки.Ссылка;
7 Pavel55555
 
14.12.16
16:33
(6) Основной есть поставщик в Справочнике
8 Анютик
 
14.12.16
16:33
(3) значит поле в данных не Номенклатура называется:)
9 Анютик
 
14.12.16
16:33
включите остановку по ошибке, посмотрите отладчиком, что там
10 Pavel55555
 
14.12.16
16:38
(9) Отладчик в конфигураторе не нашел ошибку!
Это сообщение из 1С
11 h-sp
 
14.12.16
16:40
(10) а конфигуратор не от 1с у вас?
12 Михаил Козлов
 
14.12.16
16:41
(7) Тогда
Запрос.Текст = "ВЫБРАТЬ
| РС.НаименованиеНоменклатурыКонтрагента,
| РС.КодНоменклатурыКонтрагента
|ИЗ РегистрСведений.НоменклатураКонтрагентов КАК РС
|ГДЕ РС.Номенклатура = &Номенклатура И РС.Контрагент = &Контрагент";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Контрагент", Номенклатура.ОсновнойПоставщик);
13 Fish
 
14.12.16
16:42
(10) "Отладчик в конфигураторе не нашел ошибку! " - Что, прямо такое сообщение 1С выдаёт?
14 Pavel55555
 
14.12.16
16:43
(11) Я имею введу что в конфигураторе "Проверка модуля" - Синтаксических ошибок не обнаружено!
А после кнопки "Начать отладку" загрузилать прога, открываю Номенклатуру и тут ошибка.
15 Pavel55555
 
14.12.16
16:45
(12) Сейчас попробую!
16 Анютик
 
14.12.16
16:51
(10) это не отладчик...Отладчик включается отдельно
17 Анютик
 
14.12.16
16:52
Отладка - Остановка по ошибке, не забудьте подключить к отладке свой сеанс
18 Pavel55555
 
14.12.16
17:09
(12) Что я не то делаю!
Уже крыша едет не спеша...
Путаюсь...
Функция ПолучитьНоменклатуруКонтрагента(Номенклатура, ОсновнойПоставщик) Экспорт
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
| РС.НаименованиеНоменклатурыКонтрагента,
| РС.КодНоменклатурыКонтрагента
|ИЗ РегистрСведений.НоменклатураКонтрагентов КАК РС
|ГДЕ РС.Номенклатура = &Номенклатура И РС.Контрагент = &Контрагент";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Контрагент", Номенклатура.ОсновнойПоставщик);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Возврат Выборка.НоменклатураКонтрагента;    
    Иначе
      Возврат неопределено
    КонецЕсли;

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

Если ЗначениеЗаполнено(ДанныеСтроки.ОсновнойПоставщик) Тогда
       НоменклатураКонтрагентов = ПолучитьНоменклатуруКонтрагента(Номенклатура);
       Если НЕ НоменклатураКонтрагентов = Неопределено Тогда
       ОформлениеСтроки.Ячейки.НоменклатураКонтрагентов.УстановитьТекст(НоменклатураКонтрагента);
        КонецЕсли;
    КонецЕсли;
19 Pavel55555
 
14.12.16
17:11
Номенклатура, ОсновнойПоставщик на Номенклатура, Номенклатура.ОсновнойПоставщик
20 Михаил Козлов
 
14.12.16
17:23
(19) Если в качестве Контрагента для РС Вы хотите использовать основного поставщика номенклатуры, тогда 2-ой параметр в ПолучитьНоменклатуруКонтрагента(Номенклатура, ОсновнойПоставщик) не нужен: хватит только ссылки на справочник "Номенклатура". Тем более, вы к этой функции обращаетесь, передавая только 1 параметр.
Проверьте еще, есть ли у Вас в ДанныеСтроки реквизит ОсновнойПоставщик.
21 Pavel55555
 
14.12.16
17:29
(12) мне кажется что я вызов функции не так делаю!
22 mehfk
 
14.12.16
17:31
Функция ПолучитьНоменклатуруКонтрагента(Номенклатура)
23 mehfk
 
14.12.16
17:32
Читать любую книгу по программированию про формальные и фактическиепараметры.
24 Pavel55555
 
14.12.16
17:50
(20) {Справочник.Номенклатура.Форма.ФормаСписка.Форма(942,33)}: Недостаточно фактических параметров (ПолучитьНоменклатуруКонтрагента)
        НоменклатураКонтрагентов = <<?>>ПолучитьНоменклатуруКонтрагента(ДанныеСтроки.Номенклатура);

Что еще ему надо.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.