Имя: Пароль:
1C
1С v8
Доступ к реквизиту формы из модуля менеджера
0 user321
 
29.02.20
02:43
Как из модуля менеджера документа узнать значение реквизита(элемента, не связан с объектом) открытой формы. От этого будет зависеть логика процедуры в ММ ?
УНФ, управляемые формы.
1 ДенисЧ
 
29.02.20
06:08
Никак. ММ работает на сервере.
2 MiniMuk
 
29.02.20
06:34
(1)  Зачем вводите в заблуждение,
его можно передать параметром
3 Ненавижу 1С
 
гуру
29.02.20
14:14
(1) форма тоже частично живёт на сервере. Но дело не в этом. Нужен экземпляр формы
4 Cthulhu
 
29.02.20
14:30
для получения в любом модуле данных компонента формы (не связанного с данными объекта данных) - необходимым условием является выполнение следующих требований:
1) форма должна быть создана (в смысле - экземпляр формы а не компонент метаданных).
2) в этом самом "любом модуле" должна быть доступна ссылка на созданный экземпляр формы, или на нужные модулю ее реквизиты (ну или на копии этих значений).
выполнение этих условий "в лоб" - создание/открытие формы и передача из этой формы нужного значения в нужный модуль (например, в параметре вызываемой из модуля формы процедуры/функции этого самого "любого модуля" - при прямом или опосредованном - предопределенно или по подписке вызове этой самой процедуры/функции этого самого "любого модуля").
как-то так.
5 user321
 
29.02.20
14:52
// Функция проверяет, проведен документ или нет, и вызывает процедуру печати
// документа.
//
Функция ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, ИмяМакета)

Это функция типовой УНФ, в которой мне в зависимости от состояния чекбокса надо менять создание печатной формы.
В этих параметрах ссылка на форму документа?
6 Cthulhu
 
29.02.20
15:47
(5): сказать-то что хотел?
7 Cthulhu
 
29.02.20
15:48
(6)+: в смысле - без указания на то, в каком модуле эта функция - твой комментарий - просто выпуск желудочных газов в мелкий водоем, не более того
8 palsergeich
 
29.02.20
15:50
(7) Это как я понял стандартная подиситема печати.
В модуле команды можно пробросить учто угодно (5) это один из шагов печати же
9 palsergeich
 
29.02.20
15:50
Открывай БСП подсистема Печать и читай мануалы
10 palsergeich
 
29.02.20
15:59
(9) Зависит много отчего,возможно тебе придется стандартную команду убрать или сделать новую командуформы, куда в параметры печати будешь передавать свой реквизит
11 palsergeich
 
29.02.20
16:00
(10) Значение своего реквизита точнее.
Ты просто неверно выбрал точку модификации, она раньше. Глянь по стеку вызова откуда именно происходит вызов и модифицируй его или делай новую точку вызова.
12 D_E_S_131
 
29.02.20
16:03
+ к (11), там есть прям ПараметрыПечати, куда можно передать нужное значение и уже в ММ его обрабатывать.
13 Cthulhu
 
29.02.20
16:09
(9),(10),(11): попробуй по слогам перечитать то, на что ты отвечаешь. попробуй ответить на вопрос - в каком модуле приведенная тобой процедура. сам изучи мануалы сначала. а потом берись возражать (если такое желание еще останется). если, конечно, ты заинтересован в том, чтобы не выглядеть глупо.
14 palsergeich
 
29.02.20
16:11
(13) И что это меняет?
Если подход неверен в принципе.
Начинать модификацию надо раньше
15 palsergeich
 
29.02.20
16:14
Парень хочет что бы типоавя печать работала по другому, ну и пусть это делает раньше, это вполне себе возможно.
16 Cthulhu
 
29.02.20
16:15
(14): что "это"? какой "подход"? какую "модификацию"? кто на ком стоял?
(какая-то каша у вас в голове. извините, но по теме уже сформулировано и отвечено как минимум в основном, ваши унылые попытки спорить ради спора а потом постараться сохранить лицо - скучны. есть вопросы по существу - спрашивайте содержательно, иначе - будьте здоровы и удач вам)
17 palsergeich
 
29.02.20
16:17
(16) Ужас какой.
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати - вот вызов самой печати и там проведен документ или нет по процедуре не проверяется, а идет до непосредственного вызова обработчика печати и на всем пути доступны ПараметрыПечати.
18 palsergeich
 
29.02.20
16:19
А то что у него скорее всего в можуле команды есть вызов УправлениеПечатьюКлиент.ПроверитьДокументыПроведены - такя именно про это.
Зайди в команду и при необходимости на значении каких то реквизитов делай вызов этой функции или нет
19 palsergeich
 
29.02.20
16:21
В конце концов всегда можно под уникальных ход мыслей сделать новую команду печати
20 palsergeich
 
29.02.20
16:23
По факту задача стоит так - есть печ форма, сейчас она формируется так.
А хочу что бы про одном значении реквизита она формировалась так, а по другому - так.
точка входа - модуль команды или обработчик, где идет непосредственный вызов УправлениеПечатьюКлиент.ВыполнитьКомандуПечати
21 user321
 
29.02.20
16:23
Cthulhu
В форме документа изменили чекбокс. Значение чекбокса есть только в реквизите формы. Потом нажали ПЕЧАТЬ.
Вызвалась стандартная функция ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, ИмяМакета)
В отладчике вижу, что в параметре МассивОбъектов[0] есть ссылка на мой документ.
Мне же нужен, как ты пишешь, экземпляр формы, для доступа к значению реквизита.
Вопрос: Как мне здесь экземпляр получить?
22 palsergeich
 
29.02.20
16:24
(21) До вызова ПечатнаяФорма - происходит много интересного
23 user321
 
29.02.20
16:26
(22) Согласен. Но значение реквизита нужно здесь для формирования печатной формы
24 user321
 
29.02.20
16:28
(7) Модуль менеджера
25 palsergeich
 
29.02.20
16:30
(23) Смотри. В этой процедуре происходит проверка проведенности и вызов УправлениеПечатью
ИМХО не зная документа в общем я бы решил это так: вместо вызова команды печать на уровень раньше по стеку написал бы код по проверке и вызвал бы УправлениеПечатью уже оттуда
26 vde69
 
29.02.20
16:32
(21)

1. кто тебе сказал, что печатать не сохраненные данные это гуд? в 1с другая идеология печатать можно только то, что записано в базу...
2. печать - это команда и ее совсем не обязательно захотят вызывать из формы объекта, например все типовые предусматриваюи печать нескольких ссылок сразу (форма списка - выделяем несколько строк и нажимаем печать), в этом случае какую форму ты хочешь получить в принцепе?
27 palsergeich
 
29.02.20
16:41
Даже специально открыл УНФ. Так и есть, печатнаяФорма - делает проверку и потом по условию возвращает табДок.
Нужно уникальное поведение - придется отказаться от Функции Печать в этом документе и написать аналог.
там где вызывается функция Печать - параметры ПечатиДоступны.
28 palsergeich
 
29.02.20
16:41
Причем сама функция печатнаяФорма - очень простая и написать ее аналог не должно вызвать проблем
29 palsergeich
 
29.02.20
16:42
(16) Пока в лужу набздел только ты
30 user321
 
29.02.20
16:43
(26)
Документ сохранен неделю назад. Сегодня пользователь открыл документ, на форме чекбокс не отметил, нажал ПЕЧАТЬ и
распечаталась вся табличная часть документа. После этого отметил чекбокс, нажал ПЕЧАТЬ и распечаталась первая строчка табличного документа. Формирование печатной формы происходит в функции ПечатнаяФорма ММ. Значит там мне требуется значение чекбокса.
31 palsergeich
 
29.02.20
16:48
(30) а я про что.
Модифицируешь или пишешь новую команду печати.
Передаешь в параметры печати свои чекбоксы и модифицируешь строчку где вызывается Печатная форма и в зависимости от условий вызываешь стандартную или свою.
В лоб то что ты хочешь сделать нельзя, ибо архитектура по другому сделана, благо модификаций надо минимуи
32 vde69
 
29.02.20
16:50
(30) для этого делается ДВЕ разные печатные формы, полная и краткая.... никакие чекбоксы не нужны
33 palsergeich
 
29.02.20
16:51
34 user321
 
29.02.20
16:52
(31) Буду пробовать. Может через глобальную переменную получится
35 palsergeich
 
29.02.20
16:53
(32) Я об этом еще когда написал)
36 user321
 
29.02.20
16:56
(32) Через три дня пользователь скажет "Вместо чекбокса хочу поле для ввода числа от одного до ста, чтоб указать какие строки печатать!"
37 palsergeich
 
29.02.20
16:58
(36) Ну обычно стандартную и правдане трогают.
А все извращения пишут в доп команду и называют ее соответствующе печать(По чекбокасм и числу) например
38 vde69
 
29.02.20
16:59
(36) тогда сделаешь по технологии внешних обработок вызов ОТДЕЛЬНОЙ формы (не отчет а обработка) и в нее напихаешь и галочек и палочек
39 vde69
 
29.02.20
17:01
(36) если ты для этого будешь модифицировать форму объекта - то тебе надо пальцы линейкой отбить :)))
40 user321
 
29.02.20
17:03
(39) Пользователя не устраивает форма элемента, приходится.
41 vde69
 
29.02.20
17:06
(40) послать пользователя в лес и все, делай правильно или не делай совсем....
42 user321
 
01.03.20
02:32
При трассировке столкнулся с кодом в функции:
// Возвращает описание команды по имени элемента формы.
Команды = ПолучитьИзВременногоХранилища(АдресНастроек);
Думаю хранилище инициализируется при запуске программы.
В каком модуле может происходить инициализация?
43 Провинциальный 1сник
 
01.03.20
06:49
(26) "кто тебе сказал, что печатать не сохраненные данные это гуд? в 1с другая идеология печатать можно только то, что записано в базу..."
Вот только до появления чюда под названием "управляемое приложение" идеология была другая и процедура печати документа была в модуле объекта, и она не требовала наличия ссылки. Новая идеология - попытка объяснить ситуацию "мы ввязались в гонку за веб-технологиями, из-за чего множество фич стало недоступно, и теперь отсутствие возможности мы назовем новой прогрессивной идеологией".
44 Провинциальный 1сник
 
01.03.20
06:59
А по сути, среда 1с стала значительно сложнее и запутаннее, объединив в себе всё худшее из традиционных подходов веб-программирования и 1с-разработки. Все эти костыли РеквизитФормыВЗначение, не имеющие никакого смысла в рамках бизнес-логики, но необходимые для связи контекста клиента с контекстом сервера, а далее - отказ от модальности и синхронных вызовов, в результате то что было реализовано 3 строчками - теперь требует 30.

БСП не облегчила ситуацию ничуть - просто перенесла узлы сложности на другой уровень.
45 ProxyInspector
 
01.03.20
08:17
(44) +
   И если раньше выполнялось за 3 сек, то теперь требуется 30 сек
46 palsergeich
 
01.03.20
08:44
(42) Смотри ПриСозданииНаСервере
Как правило БСП шные вызовы обрамлены. Тебе нужна та часть, которая Управление печатью.
47 palsergeich
 
01.03.20
08:46
Но на самом деле, скорее всего тебе и это не надо - тебе надо найти процедуру обработчик команды, это делается проще.
Отладка->остановить в конфигураторе и тут же жми на кнопку в пользовательском. Так ты быстро попадешь в обработчик
48 vde69
 
01.03.20
11:32
(44) я с тобой согласен, что 1с обосрало все, что можно со своей совершенно тупой реализации разделения контекста на клиентский и серверный...

но это не как не говорит о том, что концепция "печатаю только то, что записано" не верная, лично я считаю ее вполне правильной для компаний где в базе работает не 3 человека а поболее, ибо она не позволяет печатать фиктивные документы.... а на 7.7 я несколько раз ловил пользователей которые печатали складские документы с измененным количеством товара и потом тупо воровали
49 user321
 
01.03.20
13:22
(47) Точку входа я нашел. Там структура с одной записью едет от начала до конца. Хочу вставить запись для себя. При инициализации Хранилища.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.