Имя: Пароль:
1C
1С v8
Кодинг в 1С 8
0 1Смучитель
 
11.05.12
14:40
Как правильно установить значение в качестве результата?
В приведенной функции значение не устанавливается

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

   Иначе
       
       
       
   КонецЕсли;

КонецФункции
1 Dzenn
 
гуру
11.05.12
14:43
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда

Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.НомерСчета;
Иначе

Возврат Неопределено;

КонецЕсли;
2 Jofa
 
11.05.12
14:44
Если Выборка.Следующий() Тогда  // Расчетный счет у текущего контрагента найден

          Счет = Выборка.НомерСчета;

         
       Возврат Выборка.НомерСчета;

   Иначе
       
       
       
   КонецЕсли;
3 Fragster
 
гуру
11.05.12
14:44
Если Выборка.Следующий() Тогда  // Расчетный счет у текущего контрагента найден
       Возврат Выборка.НомерСчета;
   Иначе
       Возврат "Интересно, почему функция называется НайтиИлиСоздатьБанковскийСчет?";
   КонецЕсли;
4 Fragster
 
гуру
11.05.12
14:45
БанковскиеСчета.Ссылка КАК НомерСчета
5 Fragster
 
гуру
11.05.12
14:45
(4)+ в запросе
6 1Смучитель
 
11.05.12
14:56
Функция НайтиИлиСоздатьБанковскийСчет(Владелец, НомСчета, БИК)  Экспорт
   
   БанкСсылка = Справочники.Банки.НайтиПоКоду(БИК);    
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                |    БанковскиеСчета.НомерСчета КАК НомерСчета
                |ИЗ
                |    Справочник.БанковскиеСчета КАК БанковскиеСчета
                |
                |ГДЕ
                |    БанковскиеСчета.Владелец    = &Владелец И
                |    БанковскиеСчета.НомерСчета    = &НомСчета И                
                |    БанковскиеСчета.Банк        = &БанкСсылка";
   
   Запрос.УстановитьПараметр("Владелец",   Владелец);
   Запрос.УстановитьПараметр("НомСчета",   НомСчета);
   Запрос.УстановитьПараметр("БанкСсылка",    БанкСсылка);
           
   Результат = Запрос.Выполнить();
   Если НЕ Результат.Пустой() Тогда

       Выборка = Результат.Выбрать();
       Выборка.Следующий();
       
       Возврат Выборка.НомерСчета;
   Иначе

       Возврат Неопределено;

   КонецЕсли;

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


вызываю:
         РасчетныйСчет = НайтиИлиСоздатьБанковскийСчет(Контрагент, РасчСч, БИК);    

Значения у параметров: Контрагент, РасчСч, БИК
есть, а сама функция = Неопределено, а должно быть значение = РасчСч
???
7 Fragster
 
гуру
11.05.12
14:59
пздц.
8 Fragster
 
гуру
11.05.12
14:59
замени функцию на
Функция НайтиИлиСоздатьБанковскийСчет(Владелец, НомСчета, БИК)  Экспорт
   Возврат НомСчета;
КонецФункции
9 Infsams654
 
11.05.12
15:00
Видимо (3)(6) потому, что

Иначе
СчетОбъект = Справочники.БанковскиеСчета.СоздатьЭлемент();
СчетОбъект.Владелец = Владелец;
СчетОбъект.НомерСчета = НомСчета;
СчетОбъект.Банк = БанкСсылка;
СчетОбъект.Записать();
Возврат СчетОбъект.Ссылка;
КонецЕсли;
10 Fragster
 
гуру
11.05.12
15:01
(9) весело будет в случае RLS по банкам, например
11 Fragster
 
гуру
11.05.12
15:01
(10)+ или по контрагентам
12 Infsams654
 
11.05.12
15:06
Если бы мучитель 1С про RLS слышал, то такие вопросы не задавал ...
13 1Смучитель
 
11.05.12
15:10
В таком варианте:

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

       Выборка = Результат.Выбрать();
       Выборка.Следующий();
       
       Возврат НомСчета;
   Иначе
       //Создание новой записи
       //Возврат Неопределено;
   КонецЕсли;

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

ничего не поменялось, значение функцией не возвращается
14 1Смучитель
 
11.05.12
15:11
(11)А в чем криминал? Записи о не найденных контрагентах создаются по данным из внешнего файла
15 Reset
 
11.05.12
15:11
В (7) правильный ответ
16 cViper
 
11.05.12
15:40
(8)ахахахаа зачетно fragster потролил ТС
17 1Смучитель
 
11.05.12
16:43
(16)Трольчишко хотел мучителя затроллить..:)))
18 Infsams654
 
11.05.12
16:55
(17) зачем тебе возврат НомерСчета, он и так уже есть. Нужно иметь ссылку на счет - если найден, то существующий, если нет, то вновь созданный.
19 1Смучитель
 
11.05.12
17:19
(18)Согласен. Я уже перетёр этот вопрос.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший