Вход | Регистрация



произвольная форма . требуется использовать функцию описанную в основной.

произвольная форма . требуется использовать функцию описанную в основной.
Я
   andron81_81
 
21.12.18 - 12:07
Я в 1с собаку не съел, опыта очень мало, поэтому мой вопрос скорее всего глупость полная .

Есть документ с основной формой . у него открывается произвольная форма по нажатию на кнопку в основной.
1. в произвольную передаются некоторые параметры из документа - с этим проблем никаких.
2. Но в произвольной форме так же производится расчет и нужны кое-какие данные документа уже после открытия произвольной формы исходя из того как заполнены пользователем данные в этой произвольной форме (поэтому передать до этого то есть в п.1 не представляется возможным ).  Ситуация осложняется тем, что эти данные ещё надо найти , а функции поиска определены в модуле основной формы.

Вопрос как воспользоваться функциями основной формы. Может их перенести куда-то ?
 
 
   Конструктор1С
 
1 - 21.12.18 - 12:11
Ищи в синтаксис-помощнике методы Оповестить() и ОповеститьОВыборе()
   FIXXXL
 
2 - 21.12.18 - 12:11
(0) начни с простого: зачем тебе целая отдельная Форма? может страницы в основной форме хватит?
   palsergeich
 
3 - 21.12.18 - 12:13
(2) Ой страница путь в ад. Потом все это обрастает костылями .
   FIXXXL
 
4 - 21.12.18 - 12:14
(3) отдельными формами с копипастом выслана дорога в ад :)
   Alexandr_U1982
 
5 - 21.12.18 - 12:19
(0)Функции, которые определены в основной форме и нужны в дополнительной, можно вынести в модуль менеджера документа или в общий модуль.
   andron81_81
 
6 - 21.12.18 - 12:31
(2) так и сделано. в результате основная форма представляет собой такую кашу , я там мучу с панелями - отображать / скрывать. редкостное г....
   andron81_81
 
7 - 21.12.18 - 12:32
(5) Конструктивно. попробую, спасибо
   palsergeich
 
8 - 21.12.18 - 12:33
(4) Число отдельных форм конечно.
Копипаста - откройте для себя стандарты разработки и общие модули, единственное дублирование кода - вызов этих общих модулей.
   palsergeich
 
9 - 21.12.18 - 12:34
А эти формы с секретными, а иногда и с програмно генерируемыми закладками - путь в адище
   andron81_81
 
10 - 21.12.18 - 12:41
(9) я тоже против мутить всё в одной форме - основной !
 
 Рекламное место пустует
   andron81_81
 
11 - 21.12.18 - 12:54
(5) а как я должен в общем модуле прописать процедуру ? если у меня ругань идет на обращение к табличной части документа ?
вот тут ругается на эту строку (на Лист)
НайтиЛист=Листы.НайтиСтроки(Новый структура("ИДЛиста",ИДЛиста1));


Функция ПечатнаяМашинаСпуска(ИДСпуска1) Экспорт
    ИДЛиста1=ОпределитьИДЛистаПоСпуску(ИДСпуска1);
    
    НайтиЛист=Листы.НайтиСтроки(Новый структура("ИДЛиста",ИДЛиста1));
    Если ОпределитьСторонуСпускаПоСпуску(ИДСпуска1)=1 тогда
     Если НайтиЛист.Количество()> 0 тогда Возврат НайтиЛист[0].ПечатнаяМашинаЛицо;  КонецЕсли;

    Иначе  Если НайтиЛист.Количество()> 0 тогда  Возврат НайтиЛист[0].ПечатнаяМашинаОборот; КонецЕсли;
    конецЕсли;
КонецФункции
   andron81_81
 
12 - 21.12.18 - 12:56
пишет "переменная не определена (Листы)"

а Листы это таб. часть документа.
   Alexandr_U1982
 
13 - 21.12.18 - 12:57
(11)Передавай "Листы" в качестве параметра.
   Alexandr_U1982
 
14 - 21.12.18 - 13:03
Судя по всему, у тебя обычная форма, значит весь код выполняется на клиенте.
Общий модуль, в который переносишь процедуру, должен быть клиентским. Должен стоять флаг "Клиент (обычное приложение)".
   andron81_81
 
15 - 21.12.18 - 13:17
(13) блин, это переделывать всё !!! процедур и функций очень много наколбашено ))
   FIXXXL
 
16 - 21.12.18 - 13:24
(15) есть великолепная возможность расколбасить эту форму и "открыть для себя стандарты разработки"
   palsergeich
 
17 - 21.12.18 - 13:26
Из модуля формы перенос в общие модули с рефакторингом - не такая уж и сложная задача.
   FIXXXL
 
18 - 21.12.18 - 13:28
(17) если изначально написано нормально, квалификация и время позволяет, почему бы и нет
   palsergeich
 
19 - 21.12.18 - 13:33
Рано или поздно прийдется.
У автора такой момент настал)
   andron81_81
 
20 - 21.12.18 - 13:43
(16) то есть ? можно хоть немного подробнее ?
   Alexandr_U1982
 
21 - 21.12.18 - 14:09
(20) Он говорит, что у тебя появилась прекрасная возможность переписать эту форму под стандарты разработки для платформы 1С:Предприятие.
https://its.1c.ru/db/v8std

А заодно и изучить их.
   FIXXXL
 
22 - 21.12.18 - 14:44
(20) если не нравится нынешнее состояние, вариант один - переписать как нравится
   andron81_81
 
23 - 21.12.18 - 16:02
(13) а могу я "объект" передать в качестве параметра функции из модуля менеджера ? а уже из него доставать что захочу ?

можно ли его использовать не только на чтение ?
   Alexandr_U1982
 
24 - 21.12.18 - 16:05
(23)Можно
   andron81_81
 
25 - 21.12.18 - 16:26
(24) вот я в модуле менеджера объявил процедуру 
Процедура Тест (Объект)  Экспорт 
    Сообщить (Объект.Дата)
КонецПроцедуры    

столкнулся с незнанием теорий 1с совсем. может быть подскажите , а не пошлёте в учебники :)

как я должен прописать 
-в модуле главной формы 
-в модуле произвольной формы
   andron81_81
 
26 - 21.12.18 - 16:27
(25) вызов я имею ввиду этой процедуры
   FIXXXL
 
27 - 21.12.18 - 16:28
(25) Документы.ТвойДок.Тест()

НО, в модуле ПРОИЗВОЛЬНОЙ формы не будет Объекта
   hhhh
 
28 - 21.12.18 - 16:30
(25) Документы.ТвойДокумент.Тест(Объект);
   andron81_81
 
29 - 21.12.18 - 16:53
(28) а передать смогу объект при помощи реквитата формы? Или же мне проще форму документа сделать, а там Обьект доступен будет
   FIXXXL
 
30 - 21.12.18 - 17:13
(29) делай форму документа
   andron81_81
 
31 - 21.12.18 - 21:28
(30) а ещё есть проблемнамна. ))

у меня в основной форме данные хранятся не в табличных частях документа , а в переменных типа таблица значений
:)

у меня таких переменных там пять штук: .
ТЗРеквизитыЗаказа,
ТЗРеквизитыЛиста,
ТЗРеквизитыДетали,
ТЗРеквизитыОперации,
ТЗРеквизитыСпуска.
И расчеты должны использовать их.

Вопрос :
Если меня в модуле менеджера большинство функций или процедур будет оформлю так :

Функция МояФункция (...,
ТЗРеквизитыЗаказа,
ТЗРеквизитыЛиста,
ТЗРеквизитыДетали,
ТЗРеквизитыОперации,
ТЗРеквизитыСпуска
)
//телофункции

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

Насколько это будет бить по ресурсам (хотя могу предположить, что это ссылки) ?
   hhhh
 
32 - 21.12.18 - 22:38
(31) да, ссылки. Вообще-то это массив структур на самом деле, если тип реквизита формы таблица значений.
   andron81_81
 
33 - 21.12.18 - 23:08
(32) просто в моем случае придеться фактически в каждую функцию передавать объект документа - но это полбеды, а еще вот все глобальные пепеменные док-а, это тз. И это типа "правильно", "по понятиям"))
 
 
   andron81_81
 
34 - 21.12.18 - 23:14
(32) а массив из таблиц значений? Нельзя сделать?
   palsergeich
 
35 - 21.12.18 - 23:17
(33) Глобальные переменные - по сути уже являются изъяном архитектуры
   palsergeich
 
36 - 21.12.18 - 23:18
Я слабо себе представляю что же должно твориться на форме - если надо постоянно передавать вообще всё
   palsergeich
 
37 - 21.12.18 - 23:26
Если не происходит смена контекста - то передаются ссылки и влияние на производительность вызовов ну скажем так надо еще постараться смоделировать что бы заметить.
В этом плане очень хорошо и наглядный пример - посмотреть как в БСП реализована подсистема КонтактнаяИнформация.
По факту в двух местах подключение, в одном запись и область которую можно просто тупо скопировать не думая.
Внедрение подсистемы на новую форму - 2 минуты
   palsergeich
 
38 - 21.12.18 - 23:28
(33) Можно передать всю форму как параметр, вместе со ссылкой на форму (а по факту передается именно ссылка) будут доступны все реквизиты.
   andron81_81
 
39 - 21.12.18 - 23:30
(36) передавать может и не надо постоянно всё. Но функции отвечающие за нормирование расчетные по идее должны постоянно редактироваться. что там прилетит в алгоритме из какой таблицы значения или из какого реквизита док-а надо взять данные - непредсказуемо. поэтому ради универсальности и гибкости передаем ВСЁ.

теперь почему я использую глобальные переменные это потому что у меня таб. поля на форме выводят не табличные части документа, а строки из регистра сведений, то есть эти строки в доку-те не сохраняются, поэтому я их храню в ТабЗначений.
   andron81_81
 
40 - 21.12.18 - 23:31
(38) я с этим поэкспериментировал с реквизитами проблем никаких. вопрос как передать в форму таблицы значений. Возможно наверно их впихнуть в массив и обращаться к таблицам по индексам на той форме .
   andron81_81
 
41 - 21.12.18 - 23:32
таблицы значений имеется ввиду значения глобальных переменных, которые набиваются данными в основной форме
   palsergeich
 
42 - 21.12.18 - 23:38
(39) Вы не путаете понятия реквизит формы и глобальная переменная?
   palsergeich
 
43 - 21.12.18 - 23:39
(40) Смена контекста есть или нет.
Если смена контекста есть - то через массив структур
   andron81_81
 
44 - 21.12.18 - 23:46
(42) нет !

примерно вот так представляю себе это :
перем ТЗ1 экспорт;
перем ТЗ2 экспорт;



Процедура ПриОткрытии()
    // Вставить содержимое обработчика.

    ТЗ1.Колонки.Добавить("ИД");
    ТЗ1.Колонки.Добавить("Наименование");
    ТЗ1.Колонки.Добавить("Количество");
    
    ТЗ2.Колонки.Добавить("ИД2");
    ТЗ2.Колонки.Добавить("Наименование2");
    ТЗ2.Колонки.Добавить("Масса");
    
    Р=ТЗ1.Добавить();
    р.ИД=0;
    р.Наименование="ку-ку";
    р.Количество=2001;
    
    
    Р=ТЗ1.Добавить();
    р.ИД=2;
    р.Наименование="ку-ку2";
    р.Количество=20001;
    Р=ТЗ1.Добавить();
    р.ИД=3;
    р.Наименование="ку-ку3";
    р.Количество=10001;
    
    Р=ТЗ2.Добавить();
    р.ИД2=0;
    р.Наименование2="абра-катабра";
    р.Масса=12;
    
    Р=ТЗ2.Добавить();
    р.ИД2=2;
    р.Наименование2="абра-катабра2";
    р.Масса=120;
    Р=ТЗ2.Добавить();
    р.ИД2=3;
    р.Наименование2="абра-катабра3";
    р.Масса=102;
    Документы.Документ1.Тесть(ДокументОбъект);
    
    Массив = Новый Массив;
    Массив.Добавить(ТЗ1);
    Массив.Добавить(ТЗ2);
    
       
КонецПроцедуры

ТЗ1=Новый ТаблицаЗначений;
ТЗ2=Новый ТаблицаЗначений;
   andron81_81
 
45 - 22.12.18 - 00:02
(43) фантастика, всё передаёт корректно. в массив запихнул 2 таблицы значений разных по структуре(см. код) и передал в реквизит формы дополнительной формы . там прозвонил при помощи табло. да, там всё четко.

Массив "умеет" хранить таблицы значений причем разные по структуре !
перем ТЗ1 экспорт;
перем ТЗ2 экспорт;



Процедура ПриОткрытии()
    // Вставить содержимое обработчика.

    ТЗ1.Колонки.Добавить("ИД");
    ТЗ1.Колонки.Добавить("Наименование");
    ТЗ1.Колонки.Добавить("Количество");
    
    ТЗ2.Колонки.Добавить("ИД2");
    ТЗ2.Колонки.Добавить("Наименование2");
    ТЗ2.Колонки.Добавить("Масса");
    
    Р=ТЗ1.Добавить();
    р.ИД=0;
    р.Наименование="ку-ку";
    р.Количество=2001;
    
    
    Р=ТЗ1.Добавить();
    р.ИД=2;
    р.Наименование="ку-ку2";
    р.Количество=20001;
    Р=ТЗ1.Добавить();
    р.ИД=3;
    р.Наименование="ку-ку3";
    р.Количество=10001;
    
    Р=ТЗ2.Добавить();
    р.ИД2=0;
    р.Наименование2="абра-катабра";
    р.Масса=12;
    
    Р=ТЗ2.Добавить();
    р.ИД2=2;
    р.Наименование2="абра-катабра2";
    р.Масса=120;
    Р=ТЗ2.Добавить();
    р.ИД2=3;
    р.Наименование2="абра-катабра3";
    р.Масса=102;
    Документы.Документ1.Тесть(ДокументОбъект);
    
    Парам = Новый Массив;
    Парам.Добавить(ТЗ1);
    Парам.Добавить(ТЗ2);
    
    Форма = ПолучитьФорму("ФормаДокумента1");
    Форма.Реквизит = Парам;
    Форма.Открыть();
       
КонецПроцедуры

ТЗ1=Новый ТаблицаЗначений;
ТЗ2=Новый ТаблицаЗначений;
   andron81_81
 
46 - 22.12.18 - 00:09
но всё равно это ЖЕСТЬ !!! передавать все данные основной в дополнительную . это просто ппц.
   Сияющий в темноте
 
47 - 22.12.18 - 00:32
Храните все данные в одной структуре,тогда передавать придется только ее.
Главное-не напороться на изьяны сериализации,когда из одной структуры получится две.
   Конструктор1С
 
48 - 22.12.18 - 07:39
(44) в УФ такое не прокатывает. Таблица значений не доступна на клиенте
   andron81_81
 
49 - 22.12.18 - 09:54
(48) попробую сейчас
 
 Рекламное место пустует
   andron81_81
 
50 - 22.12.18 - 11:05
(47) теоретически можно в одной тз все хранить. Ее и передать в форму.
   andron81_81
 
51 - 22.12.18 - 15:35
(48) да в УФ всё сложнее. и кто их только придумал.
   andron81_81
 
52 - 22.12.18 - 19:11
а почему никто не подсказал , что можно из вспомогательной запускать функции и процедуры (обычные формы) ?

достаточно эту функцию объявить как экспортную, а во вспомогательной сделать так :

     ВладелецФормы.МояФункция();

и она выполнится на форме владельца , будет возможность забрать всё : объект, глобальне переменные в общем что угодно.
   andron81_81
 
53 - 22.12.18 - 19:22
Из дополнительной формы запускать функции основной имел ввиду


Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует