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

Тема в разделе "1C и всё что с ней связано", создана пользователем Xauren, 10 июл 2008.

  1. Xauren

    Xauren Гость

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

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

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

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

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

    Заранее спасибо.
     
  2. VIKING

    VIKING Гость

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

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

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    а зачем ставить "возврат 0", если у тебя уже стоит "возврат спр.склад"?

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

    VIKING Гость

    во и я о том же
     
  5. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    для Viking
    у тебя функция в любом случае возвращает 0. попробуй так...

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

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    Да. Ну тогда видимо так. Валерий Борисович, если я не прав то поправьте меня :rolleyes:

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

    Zab Well-Known Member
    1C Team

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

    vbs Well-Known Member

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

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

    VIKING Гость


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

    для vbs

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

    vbs Well-Known Member

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

    Xauren Гость

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

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

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    ну и слава богу
     
Загрузка...

Поделиться этой страницей