Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Клиент-банк: поиск по ОКПО поменять на поиск по комментарию
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Dima999222
Доброго Всем времени суток!

Если Вам не сложно, помогите пожалуйста в решении одной маленькой проблемы.

Есть Клиент-Банк, в нем в процедуре "ИмпортВыписки" присутствует поиск по ОКПО контрагента.
Как сделать что бы искало в первую очередь по комментарию контрагента, а ежели он пуст обращалось к поиску по ОКПО????

Конфигурация: УТП Релиз: 1.2.12.3 Платформа: 8.2.16.363

Заранее благодарен за Вашу помощь!!!


 ! 

Правила, 4
 
Vofka
В чем конкретно трудность?
Dima999222
Цитата(Vofka @ 08.01.13, 13:46) необходимо зарегистрироваться для просмотра ссылки
В чем конкретно трудность?


Некоторая компания хочет раздать своим клиентам ID и что бы они их обязательно указывали во время оплаты за те или иные услуги.
Этот ID буде попадать в назначение платежа. От куда будет считываться в реквизит "УникальныйИД". Во время чтения выписки Клиент-банком он (Клиент банк) ищет контрагента согласно ОКПО (ЕГРПОУ) а необходимо что бы искал по ID Который записан в комментарий контрагента. Ежели комментарий пуст то по ОКПО.

Проблема в том как искать по комментарию???
Поиск по ОКПО в форме:
ВыборкаПоОКПО = НайтиПоОКПО(Строка.УникальныйИД, Строка.Контрагент);
        НайденКонтрагент = Ложь;
        Если ВыборкаПоОКПО.Следующий() Тогда //есть хоть один
            
            Контрагент     = ВыборкаПоОКПО.Ссылка;
            НайденКонтрагент = Истина;


И в модуле объекта:
Функция НайтиПоОКПО(ОКПО, Наименование) Экспорт
        
    Запрос = Новый Запрос;
    ТекстЗапросаОКПО = "";
    
    // Если ОКПО пусто, не ищем по нему, только по Наименованию юр лица.
    
    Если Не ПустаяСтрока(ОКПО) Тогда
        
        Запрос.УстановитьПараметр("ОКПО", Формат(Число(ОКПО),"ЧГ=0"));
        Запрос.УстановитьПараметр("ОКПО8", Формат(Число(ОКПО),"ЧЦ=8;ЧВН=;ЧГ=0"));
        Запрос.УстановитьПараметр("ОКПО12", Формат(Число(ОКПО),"ЧЦ=12;ЧВН=;ЧГ=0"));
        
        ТекстЗапросаОКПО = "
        |    КодПоЕДРПОУ = &ОКПО ИЛИ
        |    КодПоЕДРПОУ = &ОКПО8 ИЛИ
        |    КодПоЕДРПОУ = &ОКПО12 ИЛИ";
    КонецЕсли;

    
    
    Запрос.УстановитьПараметр("Имя", Наименование);
    
    ТекстЗапроса = "ВЫБРАТЬ
    |    Ссылка
    |ИЗ
    |    Справочник." + ПолучитьИмяОбъектаКонфигурации("ТипСправочникаКонтрагенты") + "
    |
    |ГДЕ" + ТекстЗапросаОКПО + "
    |    Наименование = &Имя ИЛИ
    |    НаименованиеПолное ПОДОБНО &Имя";
    
        
    
    //// объединяем с физическими лицами
    //ТекстЗапросаДРФО = "";
    //
    //Если Не ПустаяСтрока(ОКПО) Тогда
    //    Запрос.УстановитьПараметр("ДРФО", Формат(Число(ОКПО),"ЧГ=0"));
    //    Запрос.УстановитьПараметр("ДРФО10", Формат(Число(ОКПО),"ЧЦ=10;ЧВН=;ЧГ=0"));
    //    Запрос.УстановитьПараметр("ДРФО12", Формат(Число(ОКПО),"ЧЦ=12;ЧВН=;ЧГ=0"));
    //    ТекстЗапросаДРФО = "
    //    |    КодПоДРФО = &ДРФО ИЛИ
    //    |    КодПоДРФО = &ДРФО10 ИЛИ
    //    |    КодПоДРФО = &ДРФО12 ИЛИ";
    //КонецЕсли;
    
    Запрос.Текст = ТекстЗапроса;
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Возврат Выборка;
    
КонецФункции // НайтиПоОКПО()
Petre
Написать код поиска по строке, а код поиска по ОКПО после включить в условие отсутствия результата первого поиска.
Ardi
Нужны два программиста. Одним не обойтись.
Vofka
Мне сама идея не нравится, но ладно, то такое.

В НайтиПоОКПО вместо

Если Не ПустаяСтрока(ОКПО) Тогда
        
        Запрос.УстановитьПараметр("ОКПО", Формат(Число(ОКПО),"ЧГ=0"));
        Запрос.УстановитьПараметр("ОКПО8", Формат(Число(ОКПО),"ЧЦ=8;ЧВН=;ЧГ=0"));
        Запрос.УстановитьПараметр("ОКПО12", Формат(Число(ОКПО),"ЧЦ=12;ЧВН=;ЧГ=0"));
        
        ТекстЗапросаОКПО = "
        |    КодПоЕДРПОУ = &ОКПО ИЛИ
        |    КодПоЕДРПОУ = &ОКПО8 ИЛИ
        |    КодПоЕДРПОУ = &ОКПО12 ИЛИ";
    КонецЕсли;


Напишите это

Если Не ПустаяСтрока(ОКПО) Тогда
        
        Запрос.УстановитьПараметр("ОКПО", Формат(Число(ОКПО),"ЧГ=0"));
        Запрос.УстановитьПараметр("ОКПО8", Формат(Число(ОКПО),"ЧЦ=8;ЧВН=;ЧГ=0"));
        Запрос.УстановитьПараметр("ОКПО12", Формат(Число(ОКПО),"ЧЦ=12;ЧВН=;ЧГ=0"));

        Запрос.УстановитьПараметр("ОКПО_ХЗ", "%"+Формат(Число(ОКПО),"ЧГ=0")+"%");
        Запрос.УстановитьПараметр("ОКПО8_ХЗ", "%"+Формат(Число(ОКПО),"ЧЦ=8;ЧВН=;ЧГ=0")+"%");
        Запрос.УстановитьПараметр("ОКПО12_ХЗ", "%"+Формат(Число(ОКПО),"ЧЦ=12;ЧВН=;ЧГ=0")+"%");
        
        ТекстЗапросаОКПО = "
        |    КодПоЕДРПОУ = &ОКПО ИЛИ Комментарий ПОДОБНО &ОКПО_ХЗ ИЛИ
        |    КодПоЕДРПОУ = &ОКПО8 ИЛИ Комментарий ПОДОБНО &ОКПО8_ХЗ ИЛИ
        |    КодПоЕДРПОУ = &ОКПО12 ИЛИ Комментарий ПОДОБНО &ОКПО12_ХЗ ИЛИ";
    КонецЕсли;


* малёхо подправил
Dima999222
Вот так?
конт = Справочники.Контрагенты.НайтиПоКоду(Строка.УникальныйИД);
            
        Если Конт.Пустая() тогда
Ardi
1. Из комментариев считываем СпецКода в ТЗ.
2. Перебираем строки ТЗ и ищем в назначении платежа СпецКод.
Dima999222
Цитата(Vofka @ 08.01.13, 15:03) необходимо зарегистрироваться для просмотра ссылки
Мне сама идея не нравится, но ладно, то такое.

В НайтиПоОКПО вместо

Если Не ПустаяСтрока(ОКПО) Тогда
        
        Запрос.УстановитьПараметр("ОКПО", Формат(Число(ОКПО),"ЧГ=0"));
        Запрос.УстановитьПараметр("ОКПО8", Формат(Число(ОКПО),"ЧЦ=8;ЧВН=;ЧГ=0"));
        Запрос.УстановитьПараметр("ОКПО12", Формат(Число(ОКПО),"ЧЦ=12;ЧВН=;ЧГ=0"));
        
        ТекстЗапросаОКПО = "
        |    КодПоЕДРПОУ = &ОКПО ИЛИ
        |    КодПоЕДРПОУ = &ОКПО8 ИЛИ
        |    КодПоЕДРПОУ = &ОКПО12 ИЛИ";
    КонецЕсли;


Напишите это

Если Не ПустаяСтрока(ОКПО) Тогда
        
        Запрос.УстановитьПараметр("ОКПО", Формат(Число(ОКПО),"ЧГ=0"));
        Запрос.УстановитьПараметр("ОКПО8", Формат(Число(ОКПО),"ЧЦ=8;ЧВН=;ЧГ=0"));
        Запрос.УстановитьПараметр("ОКПО12", Формат(Число(ОКПО),"ЧЦ=12;ЧВН=;ЧГ=0"));

        Запрос.УстановитьПараметр("ОКПО_ХЗ", "%"+Формат(Число(ОКПО),"ЧГ=0")+"%");
        Запрос.УстановитьПараметр("ОКПО8_ХЗ", "%"+Формат(Число(ОКПО),"ЧЦ=8;ЧВН=;ЧГ=0")+"%");
        Запрос.УстановитьПараметр("ОКПО12_ХЗ", "%"+Формат(Число(ОКПО),"ЧЦ=12;ЧВН=;ЧГ=0")+"%");
        
        ТекстЗапросаОКПО = "
        |    КодПоЕДРПОУ = &ОКПО ИЛИ Комментарий ПОДОБНО &ОКПО_ХЗ ИЛИ
        |    КодПоЕДРПОУ = &ОКПО8 ИЛИ Комментарий ПОДОБНО &ОКПО8_ХЗ ИЛИ
        |    КодПоЕДРПОУ = &ОКПО12 ИЛИ Комментарий ПОДОБНО &ОКПО12_ХЗ ИЛИ";
    КонецЕсли;


* малёхо подправил


Огромная Вам благодарность!!!! Все работает!
Vofka
Цитата(Dima999222 @ 08.01.13, 15:45) необходимо зарегистрироваться для просмотра ссылки
Огромная Вам благодарность!!!! Все работает!

Жмите палец wink.gif
svinuk
Когда-то делал поиск ИНН в комментарии. Выглядело примерно так:
Функция НайтиКодИННВСтрокеНазначенияПлатежа(Строка) Экспорт
    
    //длина ИНН 10 символов
    
    ДлинаСтроки        =    СтрДлина(Строка);
    СчетчикЦифр        =    0;
    ИНН                =    "";
    
    Для а = 1 По ДлинаСтроки Цикл
        
        Если Найти("0123456789", Сред(Строка, а, 1)) = 0 Тогда
            
            Если СчетчикЦифр = 10 Тогда
                Возврат ИНН;
            КонецЕсли;
            СчетчикЦифр    =    0;
            ИНН            =    "";
            Продолжить;
            
        Иначе
            
            ИНН            =    ИНН + Сред(Строка, а, 1);
            СчетчикЦифр    =    СчетчикЦифр + 1;
            
        КонецЕсли;
        
    КонецЦикла;  
    
    Если СчетчикЦифр = 10 Тогда
        Возврат ИНН;
    КонецЕсли;
            
    Возврат "";    
        
КонецФункции
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.