Пятница, 03.05.2024, 03:13
Приветствую Вас Гость | RSS
Главная "Не достаточно фактических параметров". - Форум Регистрация Вход
[Новые сообщенияУчастникиПравила форумаПоискRSS ]

Если форум не содержит интересующего Вас раздела, пожалуйста напишите мне об этом.
Активным пользователям я буду активно повышать рейтинги, так что это Ваш реальный шанс стать модератором или даже администратором проекта.

  • Страница 1 из 1
  • 1
Модератор форума: MainGuru  
Форум » Раздел для разработчиков и внедренцев продуктов 1С » Программирование на 1С:Предприятие 8 » "Не достаточно фактических параметров".
"Не достаточно фактических параметров".
asd34Дата: Вторник, 23.06.2009, 10:34 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 5
Репутация: 0
Статус: Offline
Привет всем! Волшебники программирования, подскажите, плиз, нетямущему sad ламателю программного кода. Ситуация такая, состряпал такую функцию:

Функция обПолучитьСтатьиЗатратНоменклатуры(Организация = Неопределено,Номенклатура, СтатьяПрихода)Экспорт
Если Организация = Неопределено Тогда
Организация = Справочники.Организации.ПустаяСсылка();
КонецЕсли;
Отбор = Новый Структура("Организация,Номенклатура,СтатьяПрихода", Организация, Номенклатура,СтатьяПрихода);
СтатьяЗатрат = РегистрыСведений.СчетаУчетаНоменклатуры.Получить(Отбор);
Если СтатьяПрихода.Свойство("СтатьяПрихода")Тогда
СтатьяПрихода = СтатьяЗатрат.СтатьяЗатрат;
Иначе
СтатьяПрихода = Справочники.СтатьиЗатрат.ПустаяСсылка();
КонецЕсли;
Возврат СтатьяПрихода;
КонецФункции

Далее при попытке использовать данную функцию в модуле одного из док-тов:

Если ЗначениеНеЗаполнено (ТД.ВидТоплива) Тогда
Возврат;
Иначе Для ном = 1 По 3 Цикл
Если ТипЗнч (ТД["Субконто"+ном])= Тип ("СправочникСсылка.СтатьиЗатрат")Тогда
ТД["Субконто"+ном]= обПолучитьСтатьиЗатратНоменклатуры(Элемент.Значение);
КонецЕсли;
КонецЦикла;
КонецЕсли;

наблюдаю такое ругательство:

{Документ.ПутевойЛист.Форма.ФормаДокумента(1307,26)}: Недостаточно фактических параметров (обПолучитьСтатьиЗатратНоменклатуры)ТД["Субконто"+ном]=<<?>>обПолучитьСтатьиЗатратНоменклатуры(Элемент.Значение);

Вопрос о каких параметрах идет речь? Кому не трудно, просветите, пожалуйста ...

 
MainGuruДата: Вторник, 23.06.2009, 11:01 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 17
Репутация: 0
Статус: Offline
Функция обПолучитьСтатьиЗатратНоменклатуры имеет 3 параметра (первый не обязательный), а Вы передаёте при вызове только 1.

Сравните:

Code

Функция                    обПолучитьСтатьиЗатратНоменклатуры(Организация = Неопределено, Номенклатура, СтатьяПрихода)
ТД["Субконто"+ном]= обПолучитьСтатьиЗатратНоменклатуры(Элемент.Значение);

в параметре Элемент.Значение вы пытаетесь передать Организацию.

 
asd34Дата: Вторник, 23.06.2009, 11:54 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 5
Репутация: 0
Статус: Offline
Функцией обПолучитьСтатьиЗатратНоменклатуры(Организация = Неопределено,Номенклатура, СтатьяПрихода)Экспорт
я пытаюсь получить реквизит "СтатьяПрихода" из регистра для конкретной Организации и конкретной Номенклатуры.
ТД["Субконто"+ном] должно равняться значению "СтатьяПрихода". Как мне это правильно написать в модуле документа?
Ведь если я рисую все три параметра обПолучитьСтатьиЗатратНоменклатуры(Организация,Номенклатура,СтатьяПрихода) тогда: "Переменная не определена"...
 
MainGuruДата: Вторник, 23.06.2009, 14:52 | Сообщение # 4
Admin
Группа: Администраторы
Сообщений: 17
Репутация: 0
Статус: Offline
Честно говоря, по Вашему коду не понятны Ваши намерения. Разберем код более подробно:

Code
Если Организация = Неопределено Тогда
  Организация = Справочники.Организации.ПустаяСсылка();
КонецЕсли;

т.к. параметр функции Организация не является обязательным и может быть не указан (например так обПолучитьСтатьиЗатратНоменклатуры(,Номенклатура, СтатьяПрихода)) значение переменной с именем Организация будет Неопределено. В этих строках производится переприсвоение значения на пустую ссылку.

Code
Отбор=Новый Структура("Организация,Номенклатура,СтатьяПрихода",Организация,Номенклатура,СтатьяПрихода);
СтатьяЗатрат=РегистрыСведений.СчетаУчетаНоменклатуры.Получить(Отбор);

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

Дальше хуже:

Code
Если СтатьяПрихода.Свойство("СтатьяПрихода")Тогда
  СтатьяПрихода = СтатьяЗатрат.СтатьяЗатрат;
Иначе
  СтатьяПрихода = Справочники.СтатьиЗатрат.ПустаяСсылка();
КонецЕсли;

В первой строке подразумевается что в функцию в качестве параметра СтатьяПрихода передана структура (т.к. метод Свойство() это метод объекта типа "Структура") и проверяется есть ли в переданной структуре значение с ключем "СтатьяПрихода". А дальше вообще не понятно: если значение присутствует - значение переданного параметра СтатьяПрихода (кстати передан по ссылке) заменяется на значение ресурса СтатьяЗатрат (надеюсь есть такой ресурс в регистре) полученное из регистра по отбору, иначе - значение переданного параметра СтатьяПрихода заменяется на пустую ссылку на справочник СтатьиЗатрат.

Здесь наблюдается ещё один конфликт: в этом блоке подразумевается, что в параметре СтатьяПрихода - структура, а в предыдущем блоке - что какое-то ссылочное значение (иначе отбор не отработает)!!!

Code
Возврат СтатьяПрихода;

Собственно возврат результата функции, в котором может быть:
1) Неопределено - до результата дело не дошло smile - ошибка в строке Если СтатьяПрихода.Свойство("СтатьяПрихода") Тогда потому что передана не структура в параметре СтатьяПрихода;
2) Неопределено - ошибка в строке СтатьяПрихода = СтатьяЗатрат.СтатьяЗатрат; потому что в регистре нет ресурса "СтатьяЗатрат";
3) Пустая ссылка на справочник СтатьиЗатрат - во всех остальных случаях.

Что касается способа вызова - даже сказать сложно, зачем это может понадобиться.

 
MainGuruДата: Вторник, 23.06.2009, 14:56 | Сообщение # 5
Admin
Группа: Администраторы
Сообщений: 17
Репутация: 0
Статус: Offline
Будет намного проще, если Вы опишете задачу и укажете конфигурацию (а более предпочтительно - структуру используемых объектов конфигурации).
 
asd34Дата: Пятница, 03.07.2009, 18:17 | Сообщение # 6
Рядовой
Группа: Пользователи
Сообщений: 5
Репутация: 0
Статус: Offline
Было не красиво с моей стороны не поблагодарить Вас, MainGuru, за столь исчерпывающую консультацию. Пишу коряво (код) т.к. зелен еще в программированнии. А задачку, по которой был вопрос я решил (сам как не странно :)). Как говорится: если долго мучаться что-нибудь получится. Так что, СПАСИБЮ!
 
Форум » Раздел для разработчиков и внедренцев продуктов 1С » Программирование на 1С:Предприятие 8 » "Не достаточно фактических параметров".
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2024 Конструктор сайтов - uCoz