Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 0
Можно ли оптимизировать программу? У меня есть примерно следующий программный блок
Процедура ПоискПТФ() Расх = СоздатьОбъект("Документ.РасходнаяНакладная"); ТЗ = СоздатьОбъект ("ТаблицаЗначений"); Телефон_=СокрЛП(Телефон); ...................................................................... Пока Расх.ПолучитьДокумент()=1 Цикл Если ((Найти(Расх.Телефон,Телефон_)>0)и(Расх.ПометкаУдаления()=0)) Тогда ................................................................................. ТЗ.НоваяКолонка("Модель"); ТЗ.НоваяКолонка("СерийныйНомер"); ........................................................................... .................................................................................... Расх.ВыбратьДокументы(НачДата,КонДата); Если ШД=0 Тогда Если ДТ=0 Тогда Пока Расх.ПолучитьДокумент()=1 Цикл Если ((Найти(Расх.Телефон,Телефон_)>0)и(Расх.ПометкаУдаления()=0)) Тогда ТЗ.НоваяСтрока(); ТЗ.Модель = Расх.Модель; ТЗ.СерийныйНомер = Расх.СерийныйНомер; ТЗ.Телефон = Расх.Телефон; ТЗ.Контрагент=Расх.Контрагент; ТЗ.ДопТелефон = Расх.ДопТелефон; ...................................................................................................................... ...................................................................................................................... КонецПроцедуры
Затем мне нужно с этих же документов сделать выборку по другому условию. Например
Если ((Найти(Расх.Имя,Имя_)>0)и(Расх.ПометкаУдаления()=0)) Тогда
И далее все то же самое. И так 4 раза по разным условиям.
Сейчас я пишу 4 почти одинаковых процедуры, которые идут одна за другой в модуле отчета. Вопрос. Как сделать так, чтобы процедура была одна, а программно менялись только условия в зависимости от нажатой кнопки в диалоге? Или, хотя бы, как сделать так, чтобы таблица значений и другие созданные объекты в одной процедуре, были видны в других процедурах? В пределах модуля. Или это невозможно? Спасибо!
Вызывайте процедуру передавая параметры. Процедура ПоискПТФ() на типа Процедура ПоискПТФ(РасхНакл,Имя,Удаление) В самой процедуре анализируете передаваемые параметры и выполняете.
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 0
Pepe @ Сегодня, 20:26
, трудно понять. Долго возился, не смог. Гугл не помог, синтакс тоже... Дайте пжлст, маааленький примерчик. Вот, к примеру, при нажатии кнопки ПоискТФ процедура работает с условием
Если ((Найти(Расх.Телефон,Телефон_)>0)и(Расх.ПометкаУдаления()=0)) Тогда
А при нажатии кнопки ПоискИмя процедура работает с условием
Если ((Найти(Расх.Имя,Имя_)>0)и(Расх.ПометкаУдаления()=0)) Тогда
Как и какие параметры указывать и где объявлять? Спасибо!!!
Группа: Местный
Сообщений: 462
Из: Украина
Спасибо сказали: 151 раз
Рейтинг: 152.8
ZUBR @ Сегодня, 0:51
, Добрый день! А если при выборке документов - эти все условия вставить, если конечно я правильно Вас понял
Если ((Найти(Расх.Телефон,Телефон_)>0)и(Расх.ПометкаУдаления()=0)) Тогда ТЗ.НоваяСтрока(); ........................... ИначеЕсли ((Найти(Расх.Имя,Имя_)>0)и(Расх.ПометкаУдаления()=0)) Тогда ТЗ.НоваяСтрока(); ...........................
И так далее. Или на форме отчета сделать переключатель "почем осуществлять поиск" сделать и все это писать в ТЗ
Я так зрозумів, що ця процедура визивається різними кнопками. Тому щоби знати якою кнопкою визвана процедура на кожній кнопці визиваємо приблизно так:
ПоискПТФ(1) -на першій кнопці ПоискПТФ(2) - на другій кнопці ......
В самому модулі навзву процедури пишемо так;
ПоискПТФ(НомерВызова)
І в тексті процедури, перед Вашою умовою пишем
Если НомерВызова=1 тогда РеквизитСправочника=Расх.Имя; РеквизитФормы=Имя_; ИначеЕсли НомерВызова=2 тогда РеквизитСправочника=Расх.Телефон; РеквизитФормы=Телефон_; Иначе.............. .......... КонецЕсли;
Если ((Найти(РеквизитСправочника,РеквизитФорми)>0)и(Расх.ПометкаУдаления()=0)) Тогда // замінити замість Вашої умови
Сообщение отредактировал volodya1122 - 17.08.20, 9:00
Если параметры (телефон и имя) присуиствуют на форме, а условие меняется по кнопке, как вариант: В кнопке пишете ПоискПТФ(0), во второй ПоискПТФ(1) В процедуре: ПоискПТФ(Парам) Если Парам =0 Тогда // Имя ..... Иначе // Телефон ..... КонецЕсли Типа так или воспользуйтесь советом Volodya1122 из предыдущего поста/
Группа: Пользователи
Сообщений: 445
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43
Pepe @ Сегодня, 13:32
,
1.Переносите на форму новый объект - "Флажок". 2.В свойствах объекта "Флажок" прописываете переменную -в поле Идентификатор.Например: ПоискПоТелефону. 3.В процедуре ниже пишете примерно следующее:
Расх = СоздатьОбъект("Документ.РасходнаяНакладная"); ТЗ = СоздатьОбъект ("ТаблицаЗначений"); Телефон_=СокрЛП(Телефон); ...................................................................... Пока Расх.ПолучитьДокумент()=1 Цикл
Если ПоискПоТелефону=1 //в элементе управления флажок Включена галочка - выбран поиск по телефону // Если ((Найти(Расх.Телефон,Телефон_)>0)и(Расх.ПометкаУдаления()=0)) Тогда
КонецЕсли;
ИначеЕсли ////
если еще 3 варианта поиска, то надо сделать как в пунктах 1,2 ,только меняйте имя переменных: ПоискПоФамилии,поискПоПриметам и т.д. и в процедуре добавляете условия,если выставлены флажки.
Если ПоискПоТелефону=1 //в элементе управления флажок Включена галочка - выбран поиск по телефону Расх.ВыбратьПоЗначению(НачДата,КонДата,"Телефон",Телефон_); ИначеЕсли ПоискПоФамилии=1 //выбран 2-й флажок на форме Расх.ВыбратьПоЗначению(НачДата,КонДата,"Имя",Имя_); ИначеЕсли.... //3 условие
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 0
volodya1122 @ Вчера, 9:59
, дякую! Ще питання. А якщо в умові я хочу використати кілька реквізитів форми одночасно? Як їх назвати? РеквизитФормы1 не працює. Дякую!
ZUBR @ Сегодня, 1:30
, Що значить не працює? Реквізит можете назвати хоч АбраКадабраАхалайМахалай.... це немає ніякого значення. Якщо на формі є такий реквізит то і в умові так само писати. Я в прикладі нааписав змінну "РеквізитФорми" щоб в одній основній умові де йде перевірка, можна було використати різні реквізити форми (відповідно до нажатої кнопки).
Хоча я не зовсім зрозумів запитання що саме мається на увазі
Или, хотя бы, как сделать так, чтобы таблица значений и другие созданные объекты в одной процедуре, были видны в других процедурах?
Це робиться досить просто. в самому верху модуля (до всіх процедур) робиться обявлення всіх реквізитів які повинні бути доступні у всіх процедурах і функціях даного модуля:
Перем: ТЗ, МояПерем1, МояПерем2;
Сообщение отредактировал volodya1122 - 18.08.20, 9:29
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 0
volodya1122 @ Вчера, 9:21
, Мені треба в умові використати два реквізити форми. Якщо один я називаю РеквизитФормы, то як назвати другий? Якщо другий я назву РеквизитФормы2, вискочить помилка
ZUBR @ Сегодня, 1:49
, Зрозуміліше не стало від цього пояснення. Пропробую здогадатися. І так і вас на формі обробки (чи де саме використовуєте даний код) є реквізити Имя_, Телефон, АдресаОбласть, АдресаНаселенийПункт, АдресаВулиця. В залежності від нажатої кнопки потрібно зробити три різних пошуки. 1. по реквізиту форми Имя_ 2. по реквізиту форми Телефон 3. одночасно по співпадінню зразу трьох реквізитів АдресаОбласть, АдресаНаселенийПункт, АдресаВулиця Тоді потрібно ось так прописати
Если НомерВызова=1 тогда РеквизитДокумента=Расх.Имя; РеквизитФормы=Имя_; ИначеЕсли НомерВызова=2 тогда РеквизитДокумента=Расх.Телефон; РеквизитФормы=Телефон_; ИначеЕсли НомерВызова=3 тогда РеквизитДокумента=Расх.АдресОбл+Расх.НасПункт+Расх.АдресВул; РеквизитФормы=АдресаОбласть+АдресаНаселенийПункт+АдресаВулиця; КонецЕсли;
Если ((Найти(РеквизитДокумента,РеквизитФормы)>0)и(Расх.ПометкаУдаления()=0)) Тогда // замінити замість Вашої умови // РеквизитДокумента, РеквизитФормы придумані довільні // відповідно у Вашому докумеенті РасходнаяНакладная повинні бути ці реквізити (або вони називаються по іншому) Телефон, Имя, АдресОбл, НасПункт , АдресВул // або можливо це реквізити контрагента який є на формі документа. Поді відповідно буде Расх.Контрагент.АдресОбл , .......... // можливо для рексвізитів в даному коді потрібно буде застосувати СокрЛП
Ще добавлю, можливо не зрозуміли. РеквизитДокумента, РеквизитФормы на формі не потрібно розміщувати взагалі. вини існують тільки в межах даної процедури
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!