Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование общего модуля 1С 8.2
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
vlad_1984_vlad
Здравствуйте уважаемые господа, я в 1С самоучка. У меня вопрос…такая ситуация – есть много шаблонов Word у каждом из них, ну к примеру, есть надпись «<НазваЮридичноїОсоби>», есть обыкновенная форма документа на которой на кнопку «Друк» наложен программный код по замене этой надписи в шаблоне на значение базы 1С:
//…………………………………………..
~НазваЮридичноїОсоби: //Мітка коду
Диапазон = НовыйДокумент.Range();
Поиск = Диапазон.find;
Поиск.ClearFormatting();
Поиск.Forward = Истина;        
продолжать = Поиск.Execute("<НазваЮридичноїОсоби>");
Если продолжать Тогда
    Диапазон.text = ЭтаФорма.ЭлементыФормы.Заклад.Значение.ЗакладСкорочено;
Перейти ~НазваЮридичноїОсоби //Перехід до мітки    
КонецЕсли;
//…………………………………………..

ВНИМАНИЕ ВОПРОС: возможно такое чтобы этот фрагмент кода использовался в общем модуле 1С и вызывался в модуле кнопки «Друк», так как писать постоянно этот код в каждом модуле не очень удобно? Конечно, я могу его скопировать в буфер и постоянно его вставлять, где он только нужен, но это не професионально как-то =)?

P.S. Версія 1С – 8.2, локальная машина не имеющая подключения к другим ПК.
Заранее благодарен за любые ответы!
Vofka
1. Советую всётаки прочесть правила, ибо без них вы у нас долго не задержитесь продержитесь.
2. Если этот код перенести в общий модуль, то в каждом нужном документе прийдётся как минимум писать 1 строчку кода, которая будет вызывать эту процедуру.
vlad_1984_vlad
Цитата(Vofka @ 06.09.11, 15:52) необходимо зарегистрироваться для просмотра ссылки
1. Советую всётаки прочесть правила, ибо без них вы у нас долго не задержитесь продержитесь.
2. Если этот код перенести в общий модуль, то в каждом нужном документе прийдётся как минимум писать 1 строчку кода, которая будет вызывать эту процедуру.

Прочёл, про виделение кода, но после того как уже выложил, сорри =(.
Ну это понятно что мне нужно всётаки обращатся как-то в общий модуль, но я показал лишь часть кода, у меня примерно получается около 20 таких значений, и то только по самом учреждении, а ещё + ЮРЛица + ФизЛица многовато будет, я хотел-бы к этим данным обращатся одной строкой а не пол-дюженою =)
Fynjy
Вау велкий и могучий гоуту в коде 69000000.gif 07000000.gif
vlad_1984_vlad
Цитата(Fynjy @ 06.09.11, 16:10) необходимо зарегистрироваться для просмотра ссылки
Вау велкий и могучий гоуту в коде 69000000.gif 07000000.gif

Я в курсе что много меток в коде не очень хорошо, но дело в том что в одном документе может быть несколько таких слов которые потребуют замены, без меток он лишь раз миняется, а с метками столько встречается сколько и меняется, правда видел примеры более умные, но они что-то меня не очень слушались =(
Vofka
По поводу меток я промолчал, т.к. не по этому поводу вопрос. vlad_1984_vlad, добавляете функцию в общий модуль с суффиксом Экспорт и вызываете её из нужных мест. Что именно у вас не получается?
pablo
Диапазон = НовыйДокумент.Range();
Поиск = Диапазон.find;
Поиск.ClearFormatting();
Поиск.Forward = Истина;        
продолжать = Поиск.Execute("<НазваЮридичноїОсоби>");
Пока Продолжать цикл
Диапазон.text = ЭтаФорма.ЭлементыФормы.Заклад.Значение.ЗакладСкорочено;
Диапазон = НовыйДокумент.Range();
Поиск = Диапазон.find;
Поиск.ClearFormatting();
Поиск.Forward = Истина;        
продолжать = Поиск.Execute("<НазваЮридичноїОсоби>");
КонецЦикла;

Здесь все просто организуется без метки smile.gif
vlad_1984_vlad
Цитата(Vofka @ 06.09.11, 16:28) необходимо зарегистрироваться для просмотра ссылки
По поводу меток я промолчал, т.к. не по этому поводу вопрос. vlad_1984_vlad, добавляете функцию в общий модуль с суффиксом Экспорт и вызываете её из нужных мест. Что именно у вас не получается?

Меня интересует как обращатся к процедурам общего модуля в котрых не производится некаких расчётов.

Цитата(pablo @ 06.09.11, 16:30) необходимо зарегистрироваться для просмотра ссылки
Диапазон = НовыйДокумент.Range();
Поиск = Диапазон.find;
Поиск.ClearFormatting();
Поиск.Forward = Истина;        
продолжать = Поиск.Execute("<НазваЮридичноїОсоби>");
Пока Продолжать цикл
Диапазон.text = ЭтаФорма.ЭлементыФормы.Заклад.Значение.ЗакладСкорочено;
Диапазон = НовыйДокумент.Range();
Поиск = Диапазон.find;
Поиск.ClearFormatting();
Поиск.Forward = Истина;        
продолжать = Поиск.Execute("<НазваЮридичноїОсоби>");
КонецЦикла;

Здесь все просто организуется без метки smile.gif

ооооо, за это огромное спасибо, попробую, а то знаю беду задумчывости ПК когда много меток, хотя и циклы не особо им уступают, проверю на быстродействие, спасибо.
vlad_1984_vlad
Междупрочим вот более лучший вариант, только-что разобрался, может кому-то пригодится, здесь не используются не метки, не циклы:
Поиск = НовыйДокумент.Content.Find;
Поиск.Execute("<НазваЮридичноїОсоби>" ,,,,,,,,,""+СокрЛП(ЭтаФорма.ЭлементыФормы.Заклад.Значение.ЗакладСкорочено),2);
kivals
vlad_1984_vlad, этот код основан уже на знании VBA. Да и пояснить неплохо бы, что метод Execute() может в зависимости от параметра заменять все вхождения строки поиска.

pablo, я бы конструкцию вида
Поиск = Диапазон.find;
Поиск.ClearFormatting();
Поиск.Forward = Истина;        
продолжать = Поиск.Execute("<НазваЮридичноїОсоби>");
Пока Продолжать цикл
...
Диапазон = НовыйДокумент.Range();
Поиск = Диапазон.find;
Поиск.ClearFormatting();
Поиск.Forward = Истина;        
продолжать = Поиск.Execute("<НазваЮридичноїОсоби>");
КонецЦикла;


Заменил бы на:
Диапазон = НовыйДокумент.Range();
Пока Истина цикл
    Поиск = Диапазон.find;
    Поиск.ClearFormatting();
    Поиск.Forward = Истина;
    Если НЕ Поиск.Execute("<НазваЮридичноїОсоби>") Тогда Прервать; КонецЕсли; // Вот здесь условие прерывания цикла
    ...
КонецЦикла;


Причина в следующем: если этот код менять, то можно забыть заменить текст во втором вхождении и получить головную боль при отладке
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.