• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Найти склад по наименованию

  • Автор темы Xauren
  • Дата начала
X

Xauren

Здравствуйте.

Я новичок, сразу скажу. Суть задачи: имеются справочники контрагентов и складов. Есть определённая группа клиентов, наименование которых одинаково с наименованием складов. Нужно, чтобы при обнаружении такого контрагента при создании документа перемещения автоматически устанавливался соответствующий склад. То, что я пишу - не работает. Причина мне не ясна.

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

При создании документа перемещения:
Код:
Док.СкладПолучатель=СкладПалатки(ТЗОкДоки.Куст.Наименование);

ТЗОкДоки.Куст.Наименование имеет нужное значение согласно данным отладчика, а вот функция не работает. И после получения им управления модуль просто заканчивает свою работу. (Возможно, Возврат 0 этому способствует, не суть важно).

Альтернативным вариантом пробовалось создать дополнительный справочник соответствия клиентов складам, но мне показалось это не очень удобным. Но и не работало так же.

Подскажите, где именно я не так делаю?

Заранее спасибо.
 
V

VIKING

у тебя функция в любом случае возвращает 0. попробуй так

Код:
Функция СкладПалатки(Палатка)
Спр=СоздатьОбъект("Справочник.Склады");
Спр.НайтиПоНаименованию(Палатка,0);
Если Спр.Выбран()>0 Тогда
Возврат Спр.Склад;
иначе
Возврат 0;
КонецЕсли;
КонецФункции
 
G

gorlanovmax

а зачем ставить "возврат 0", если у тебя уже стоит "возврат спр.склад"?

получается что у тебя в условии возвращается значение, а после этого стоит "возврат 0" и в итоге в любом случае функция возвращает 0. какая бы проверка не была.
 
V

VIKING

а зачем ставить "возврат 0", если у тебя уже стоит "возврат спр.склад"?

получается что у тебя в условии возвращается значение, а после этого стоит "возврат 0" и в итоге в любом случае функция возвращает 0. какая бы проверка не была.

во и я о том же
 
V

vbs

для Viking
у тебя функция в любом случае возвращает 0. попробуй так...

Это неверно. Если склад найден по наименованию, функция вернет Реквизит "Склад" справочника "Склады"
 
G

gorlanovmax

Да. Ну тогда видимо так. Валерий Борисович, если я не прав то поправьте меня :rolleyes:

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

Zab

Хоспате, що вы гоните?
Код:
НайтиПоНаименованию(<?>,,);
FindByDescr(<?>,,);
Синтаксис:
НайтиПоНаименованию(<Наименование>,<Режим>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по наименованию.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Следовательно:
Код:
Функция СкладПалатки(Палатка)
Спр=СоздатьОбъект("Справочник.Склады");
Если Спр.НайтиПоНаименованию(Палатка,0) = 1 Тогда
Возврат Спр.ТекущийЭлемент();
КонецЕсли;
Возврат 0;
КонецФункции
 
V

vbs

Проблема, конечно, выеденного яйца не стоит. :)
Скорее всего, именно так.
Возврат Спр.ТекущийЭлемент();

Но вдруг ему нужен именно РЕКВИЗИТ "Склад" справочника "Склады" (всякое бывает !) ?
Тогда Возврат Спр.Склад написано корректно, но
Док.СкладПолучатель должен иметь тот же тип, что и Спр.Склад, вот и все :mellow:
 
V

VIKING

Следовательно:

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


После КонецЕсли у тебя стоит "Возврат 0" и как итог выход из функции со значением 0

для vbs

он спрашивал почему его функция заканчивает работу не давая нужных данных, я и ответил, а по одной функции тяжеловато понять чето он от нее ждет но явно не ноль
 
V

vbs

Для Viking
После КонецЕсли у тебя стоит "Возврат 0" и как итог выход из функции со значением 0
Разве не очевидно, что на Возврат 0 мы попадем ТОЛЬКО в случае, когда Склад не найден ?
 
X

Xauren

Тема тут появляется не сразу, оказывается. :) Я думал, что премодерация стоит и тема не прошла.
Вчера решил вопрос.

Да, проблема была в том, что нужно было ставить в возврат не Спр.Склад, а Спр.ТекущийЭлемент(). Ну и поменял в коде знак ">0" на "=1", хотя по-моему не суть важно.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!