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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

теперь почему я использую глобальные переменные это потому что у меня таб. поля на форме выводят не табличные части документа, а строки из регистра сведений, то есть эти строки в доку-те не сохраняются, поэтому я их храню в ТабЗначений.
40 andron81_81
 
21.12.18
23:31
(38) я с этим поэкспериментировал с реквизитами проблем никаких. вопрос как передать в форму таблицы значений. Возможно наверно их впихнуть в массив и обращаться к таблицам по индексам на той форме .
41 andron81_81
 
21.12.18
23:32
таблицы значений имеется ввиду значения глобальных переменных, которые набиваются данными в основной форме
42 palsergeich
 
21.12.18
23:38
(39) Вы не путаете понятия реквизит формы и глобальная переменная?
43 palsergeich
 
21.12.18
23:39
(40) Смена контекста есть или нет.
Если смена контекста есть - то через массив структур
44 andron81_81
 
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=Новый ТаблицаЗначений;
45 andron81_81
 
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=Новый ТаблицаЗначений;
46 andron81_81
 
22.12.18
00:09
но всё равно это ЖЕСТЬ !!! передавать все данные основной в дополнительную . это просто ппц.
47 Сияющий в темноте
 
22.12.18
00:32
Храните все данные в одной структуре,тогда передавать придется только ее.
Главное-не напороться на изьяны сериализации,когда из одной структуры получится две.
48 Конструктор1С
 
22.12.18
07:39
(44) в УФ такое не прокатывает. Таблица значений не доступна на клиенте
49 andron81_81
 
22.12.18
09:54
(48) попробую сейчас
50 andron81_81
 
22.12.18
11:05
(47) теоретически можно в одной тз все хранить. Ее и передать в форму.
51 andron81_81
 
22.12.18
15:35
(48) да в УФ всё сложнее. и кто их только придумал.
52 andron81_81
 
22.12.18
19:11
а почему никто не подсказал , что можно из вспомогательной запускать функции и процедуры (обычные формы) ?

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

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

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