Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как использовать один и тот же программный блок с небольшими изменениями несколько раз? 1с 7.7 конф 7.7.00          
ZUBR Подменю пользователя
сообщение 16.08.20, 17:28
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 229
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

Можно ли оптимизировать программу?
У меня есть примерно следующий программный блок

Процедура ПоискПТФ()
Расх = СоздатьОбъект("Документ.РасходнаяНакладная");
    ТЗ = СоздатьОбъект ("ТаблицаЗначений");    
    Телефон_=СокрЛП(Телефон);
    ......................................................................
Пока Расх.ПолучитьДокумент()=1 Цикл
                Если ((Найти(Расх.Телефон,Телефон_)>0)и(Расх.ПометкаУдаления()=0)) Тогда
.................................................................................
    ТЗ.НоваяКолонка("Модель");
    ТЗ.НоваяКолонка("СерийныйНомер");    
    ...........................................................................
....................................................................................
    Расх.ВыбратьДокументы(НачДата,КонДата);
    Если ШД=0 Тогда
        Если ДТ=0 Тогда                                                                                                        
            Пока Расх.ПолучитьДокумент()=1 Цикл
                Если ((Найти(Расх.Телефон,Телефон_)>0)и(Расх.ПометкаУдаления()=0)) Тогда
                                        ТЗ.НоваяСтрока();
                    ТЗ.Модель = Расх.Модель;
                    ТЗ.СерийныйНомер = Расх.СерийныйНомер;
                    ТЗ.Телефон = Расх.Телефон;
                    ТЗ.Контрагент=Расх.Контрагент;  
                    ТЗ.ДопТелефон = Расх.ДопТелефон;
......................................................................................................................
......................................................................................................................
КонецПроцедуры


Затем мне нужно с этих же документов сделать выборку по другому условию. Например
Если ((Найти(Расх.Имя,Имя_)>0)и(Расх.ПометкаУдаления()=0)) Тогда


И далее все то же самое.
И так 4 раза по разным условиям.

Сейчас я пишу 4 почти одинаковых процедуры, которые идут одна за другой в модуле отчета.
Вопрос.
Как сделать так, чтобы процедура была одна, а программно менялись только условия в зависимости от нажатой кнопки в диалоге? Или, хотя бы, как сделать так, чтобы таблица значений и другие созданные объекты в одной процедуре, были видны в других процедурах? В пределах модуля.
Или это невозможно?
Спасибо!



Pepe Подменю пользователя
сообщение 16.08.20, 19:26
Сообщение #2

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1408
Из: Ужгород
Спасибо сказали: 750 раз
Рейтинг: 221

Вызывайте процедуру передавая параметры.
Процедура ПоискПТФ() на типа Процедура ПоискПТФ(РасхНакл,Имя,Удаление)
В самой процедуре анализируете передаваемые параметры и выполняете.

ZUBR Подменю пользователя
сообщение 16.08.20, 23:51
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 229
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

Pepe @ Сегодня, 20:26 * ,
трудно понять. Долго возился, не смог. Гугл не помог, синтакс тоже... Дайте пжлст, маааленький примерчик.
Вот, к примеру, при нажатии кнопки ПоискТФ процедура работает с условием
Если ((Найти(Расх.Телефон,Телефон_)>0)и(Расх.ПометкаУдаления()=0)) Тогда

А при нажатии кнопки ПоискИмя процедура работает с условием
Если ((Найти(Расх.Имя,Имя_)>0)и(Расх.ПометкаУдаления()=0)) Тогда

Как и какие параметры указывать и где объявлять?
Спасибо!!!

denis84 Подменю пользователя
сообщение 17.08.20, 8:31
Сообщение #4

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 223
Из: Украина
Спасибо сказали: 58 раз
Рейтинг: 58

ZUBR @ Сегодня, 0:51 * ,
Добрый день! А если при выборке документов - эти все условия вставить, если конечно я правильно Вас понял
Если ((Найти(Расх.Телефон,Телефон_)>0)и(Расх.ПометкаУдаления()=0)) Тогда
ТЗ.НоваяСтрока();
...........................
ИначеЕсли ((Найти(Расх.Имя,Имя_)>0)и(Расх.ПометкаУдаления()=0)) Тогда
ТЗ.НоваяСтрока();
...........................

И так далее.
Или на форме отчета сделать переключатель "почем осуществлять поиск" сделать и все это писать в ТЗ


Сообщение отредактировал denis84 - 17.08.20, 8:32

volodya1122 Подменю пользователя
сообщение 17.08.20, 8:59
Сообщение #5

Оратор
Иконка группы
Группа: Местный
Сообщений: 302
Из: Тернопіль
Спасибо сказали: 116 раз
Рейтинг: 118.4

Я так зрозумів, що ця процедура визивається різними кнопками. Тому щоби знати якою кнопкою визвана процедура на кожній кнопці визиваємо приблизно так:
ПоискПТФ(1) -на першій кнопці
ПоискПТФ(2) - на другій кнопці
......


В самому модулі навзву процедури пишемо так;
ПоискПТФ(НомерВызова)

І в тексті процедури, перед Вашою умовою пишем
Если НомерВызова=1 тогда
РеквизитСправочника=Расх.Имя;
РеквизитФормы=Имя_;
ИначеЕсли НомерВызова=2 тогда
РеквизитСправочника=Расх.Телефон;
РеквизитФормы=Телефон_;
Иначе..............
..........
КонецЕсли;

Если ((Найти(РеквизитСправочника,РеквизитФорми)>0)и(Расх.ПометкаУдаления()=0)) Тогда  // замінити замість Вашої умови


Сообщение отредактировал volodya1122 - 17.08.20, 9:00

Спасибо сказали: ZUBR,

Pepe Подменю пользователя
сообщение 17.08.20, 10:32
Сообщение #6

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1408
Из: Ужгород
Спасибо сказали: 750 раз
Рейтинг: 221

Если параметры (телефон и имя) присуиствуют на форме, а условие меняется по кнопке, как вариант:
В кнопке пишете ПоискПТФ(0), во второй ПоискПТФ(1)
В процедуре:
ПоискПТФ(Парам)
Если Парам =0 Тогда // Имя
.....
Иначе // Телефон
.....
КонецЕсли
Типа так или воспользуйтесь советом Volodya1122 из предыдущего поста/

andrew76 Подменю пользователя
сообщение 17.08.20, 18:30
Сообщение #7

Оратор
*****
Группа: Пользователи
Сообщений: 378
Из: Казахстан
Спасибо сказали: 39 раз
Рейтинг: 39

Pepe @ Сегодня, 13:32 * ,

1.Переносите на форму новый объект - "Флажок".
2.В свойствах объекта "Флажок" прописываете переменную -в поле Идентификатор.Например: ПоискПоТелефону.
3.В процедуре ниже пишете примерно следующее:

Расх = СоздатьОбъект("Документ.РасходнаяНакладная");
    ТЗ = СоздатьОбъект ("ТаблицаЗначений");    
    Телефон_=СокрЛП(Телефон);
    ......................................................................
Пока Расх.ПолучитьДокумент()=1 Цикл
                
Если ПоискПоТелефону=1  //в элементе управления флажок Включена галочка - выбран поиск по телефону //
       Если ((Найти(Расх.Телефон,Телефон_)>0)и(Расх.ПометкаУдаления()=0)) Тогда
      
       КонецЕсли;

ИначеЕсли ////


если еще 3 варианта поиска, то надо сделать как в пунктах 1,2 ,только меняйте имя переменных:
ПоискПоФамилии,поискПоПриметам и т.д.
и в процедуре добавляете условия,если выставлены флажки.


КонецЕсли;
..............................................................................
ТЗ.НоваяКолонка("Модель");
ТЗ.НоваяКолонка("СерийныйНомер");


Не видя всей процедуры,сложно посоветовать оптимальное решение.
Можно было бы попробовать отборами отобрать доки.
Такой вот псевдокод:

Расх = СоздатьОбъект("Документ.РасходнаяНакладная");

Если ПоискПоТелефону=1  //в элементе управления флажок Включена галочка - выбран поиск по телефону
       Расх.ВыбратьПоЗначению(НачДата,КонДата,"Телефон",Телефон_);
ИначеЕсли ПоискПоФамилии=1 //выбран 2-й флажок на форме
       Расх.ВыбратьПоЗначению(НачДата,КонДата,"Имя",Имя_);
ИначеЕсли.... //3 условие

ИначеЕсли ... //4 условие

КонецЕсли...

ZUBR Подменю пользователя
сообщение 18.08.20, 0:30
Сообщение #8

Завсегдатай
****
Группа: Пользователи
Сообщений: 229
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

volodya1122 @ Вчера, 9:59 * ,
дякую! Ще питання. А якщо в умові я хочу використати кілька реквізитів форми одночасно? Як їх назвати? РеквизитФормы1 не працює. Дякую!

volodya1122 Подменю пользователя
сообщение 18.08.20, 8:21
Сообщение #9

Оратор
Иконка группы
Группа: Местный
Сообщений: 302
Из: Тернопіль
Спасибо сказали: 116 раз
Рейтинг: 118.4

ZUBR @ Сегодня, 1:30 * ,
Що значить не працює? Реквізит можете назвати хоч АбраКадабраАхалайМахалай.... це немає ніякого значення. Якщо на формі є такий реквізит то і в умові так само писати.
Я в прикладі нааписав змінну "РеквізитФорми" щоб в одній основній умові де йде перевірка, можна було використати різні реквізити форми (відповідно до нажатої кнопки).

Хоча я не зовсім зрозумів запитання що саме мається на увазі

volodya1122 Подменю пользователя
сообщение 18.08.20, 9:28
Сообщение #10

Оратор
Иконка группы
Группа: Местный
Сообщений: 302
Из: Тернопіль
Спасибо сказали: 116 раз
Рейтинг: 118.4

Цитата(ZUBR @ 16.08.20, 18:28) *
Или, хотя бы, как сделать так, чтобы таблица значений и другие созданные объекты в одной процедуре, были видны в других процедурах?

Це робиться досить просто.
в самому верху модуля (до всіх процедур) робиться обявлення всіх реквізитів які повинні бути доступні у всіх процедурах і функціях даного модуля:
Перем: ТЗ, МояПерем1, МояПерем2;


Сообщение отредактировал volodya1122 - 18.08.20, 9:29

Спасибо сказали: ZUBR,

ZUBR Подменю пользователя
сообщение 19.08.20, 0:49
Сообщение #11

Завсегдатай
****
Группа: Пользователи
Сообщений: 229
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

volodya1122 @ Вчера, 9:21 * ,
Мені треба в умові використати два реквізити форми. Якщо один я називаю РеквизитФормы, то як назвати другий?
Якщо другий я назву РеквизитФормы2, вискочить помилка

volodya1122 Подменю пользователя
сообщение 19.08.20, 8:49
Сообщение #12

Оратор
Иконка группы
Группа: Местный
Сообщений: 302
Из: Тернопіль
Спасибо сказали: 116 раз
Рейтинг: 118.4

ZUBR @ Сегодня, 1:49 * ,
Зрозуміліше не стало від цього пояснення. Пропробую здогадатися.
І так і вас на формі обробки (чи де саме використовуєте даний код) є реквізити Имя_, Телефон, АдресаОбласть, АдресаНаселенийПункт, АдресаВулиця.
В залежності від нажатої кнопки потрібно зробити три різних пошуки.
1. по реквізиту форми Имя_
2. по реквізиту форми Телефон
3. одночасно по співпадінню зразу трьох реквізитів АдресаОбласть, АдресаНаселенийПункт, АдресаВулиця
Тоді потрібно ось так прописати

Если НомерВызова=1 тогда
РеквизитДокумента=Расх.Имя;
РеквизитФормы=Имя_;
ИначеЕсли НомерВызова=2 тогда
РеквизитДокумента=Расх.Телефон;
РеквизитФормы=Телефон_;
ИначеЕсли НомерВызова=3 тогда
РеквизитДокумента=Расх.АдресОбл+Расх.НасПункт+Расх.АдресВул;
РеквизитФормы=АдресаОбласть+АдресаНаселенийПункт+АдресаВулиця;
КонецЕсли;

Если ((Найти(РеквизитДокумента,РеквизитФормы)>0)и(Расх.ПометкаУдаления()=0)) Тогда  // замінити замість Вашої умови
// РеквизитДокумента, РеквизитФормы придумані довільні
// відповідно у Вашому докумеенті РасходнаяНакладная повинні бути ці реквізити (або вони називаються по іншому) Телефон, Имя, АдресОбл, НасПункт , АдресВул
// або можливо це реквізити контрагента який є на формі документа. Поді відповідно буде Расх.Контрагент.АдресОбл , ..........
// можливо для рексвізитів в даному коді потрібно буде застосувати СокрЛП


Спасибо сказали: ZUBR,

volodya1122 Подменю пользователя
сообщение 19.08.20, 10:39
Сообщение #13

Оратор
Иконка группы
Группа: Местный
Сообщений: 302
Из: Тернопіль
Спасибо сказали: 116 раз
Рейтинг: 118.4

Ще добавлю, можливо не зрозуміли.
РеквизитДокумента, РеквизитФормы на формі не потрібно розміщувати взагалі. вини існують тільки в межах даної процедури

Naghual Подменю пользователя
сообщение 19.08.20, 11:45
Сообщение #14

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 21

Вам прямая дорога в Запросы. Вот там оптимизация будет заметна.


Signature
Я желаю всем Счастья!

ZUBR Подменю пользователя
сообщение 23.08.20, 11:18
Сообщение #15

Завсегдатай
****
Группа: Пользователи
Сообщений: 229
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

volodya1122 @ 19.08.20, 9:49 * ,
дуже дякую! Все вийшло.
РеквизитДокумента=Расх.АдресОбл+Расх.НасПункт+Расх.АдресВул;

Це якраз те, що мені треба було! icon_beer17.gif

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 18.06.21, 19:26
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!