1. 1C / Говнокод #18802

    −94

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    Функция ПолучитьДоговорКонтрагента(Организация,Подразделение,Контрагент) Экспорт
    	
    	 ЗапросДоговор = Новый Запрос;
    		ЗапросДоговор.Текст = "ВЫБРАТЬ
    		               |	ДоговорыКонтрагентов.Ссылка
    		               |ИЗ
    		               |	Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    		               |ГДЕ
    		               |	ДоговорыКонтрагентов.Организация = &Организация
    		               |	И ДоговорыКонтрагентов.Подразделение = &Подразделение
    		               |	И ДоговорыКонтрагентов.Владелец = &Владелец
    		               |
    		               |СГРУППИРОВАТЬ ПО
    		               |	ДоговорыКонтрагентов.Ссылка";
    		ЗапросДоговор.УстановитьПараметр("Организация",Организация);
    		ЗапросДоговор.УстановитьПараметр("Подразделение",Подразделение);
    		ЗапросДоговор.УстановитьПараметр("Владелец",Контрагент);
    		Результат = ЗапросДоговор.Выполнить();
    		Если НЕ Результат.Пустой() Тогда
    			Возврат Результат.Выбрать().Следующий();
    		Иначе
    			
    			Возврат Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
    			
    		КонецЕсли;
    	
    КонецФункции

    Вот вроде функция общего модуля называется ПолучитьДоговорКонтрагента, и ты, не заглядывая в неё, конечно же, ждёшь возврата ссылки на спр-к ДоговорыКонтрагентов, но нет!!

    Запостил: SkyHunter, 02 Октября 2015

    Комментарии (16) RSS

    • ЗапросДоговор -> ДопросЗаговор
      Ответить
    • А что тут неправильного ?
      Ответить
      • Если результат не пустой, то возвращается следующая запись из результата запроса, а не ссылка, например.
        Ответить
        • Но ведь результат будет множество со столбцом ДоговорыКонтрагентов.Ссылка, т.е. Результат.Выбрать().Следующий() вернет ссылку. Вроде всё правильно.
          Ответить
          • Да, но функция называется ПолучитьДоговорКонтрагента, а не ПолучитьМножествоСоСтолбцом. Эта функция судя по названию должна возвращать ссылку, а возвращает не ссылку. Для получения ссылки нужно будет обратится через точку к результату запроса.
            Ответить
          • Метод .Следующий() возвращает Булево, а не ссылку.
            Ответить
            • Т.е. это ПерейтиКСледующему() на самом деле?
              Ответить
              • Шта? Речь о 8.2, если что. Рекомендую покурить Синтакс-Помощник, методы объекта ВыборкаИзРезультатаЗапроса.
                Ответить
                • Да я вообще 1с ни разу не запускал ;)

                  Что делает этот метод? Переходит к следующей записи и возвращает Ложь, если уже стояли на последней?
                  Ответить
                  • Ну да.

                    "Возвращаемое значение:

                    Тип: Булево.
                    Истина - следующая запись выбрана; Ложь - достигнут конец выборки.
                    Описание:

                    Получает следующую запись из результата запроса. Для обхода результата запроса нужно после получения выборки вызвать данный метод для позиционирования на первый элемент и далее вызывать до тех пор, пока не будет возвращено значение Ложь."
                    Ответить
                    • Ну вот поэтому я и обозвал его ПерейтиКСледующему ;)
                      Ответить
                      • Я просто не понял, что вы вообще не из "наших" ))
                        Ответить
      • Если функции возвращают значения различных типов в зависимости от звезд на небе - это, как минимум, быдлокод! Хочешь вернуть что-то отличающееся от основного типа возвращаемого значения - измени значения во входящих параметрах, как например определяют "Отказ".
        Ответить
    • Если в запросе из одного поля производится группировка, то на всякий случай можно использовать "ВЫБРАТЬ РАЗЛИЧНЫЕ" и ТаблицаЗначений.Свернуть("Ссылка").
      Ответить
      • Зачем группировка в запросе из одного поля, тем более, что это поле ссылка? "ВЫБРАТЬ РАЗЛИЧНЫЕ", как вы верно заметили, достаточно.
        Ответить

    Добавить комментарий