Имя: Пароль:
1C
1С v8
Обращение к модулю формы
,
0 ShramkoRS
 
06.12.22
12:25
В превый раз тут, ньюфаг в 1с.

Выдали следующую задачу: нужно при проведении документа автомтаически ставить галочки (флажки) отражатть в бух учете и в налоговом учете находящиеся на форме документа.

Дано:

1. Проведение документа вынесено в подписку на событие (подписка реализована в общем модуле)
2. При проставлении галочек нужно обязательно вызывать событие ПриИзменении у каждого из флажков, так как именно оно и осуществляет подключение к регистрам.

Сложность: я не понимаю как мне в подписке на событие обратится к процедуре в модуле формы документа. Экспорт не спасает.
1 Kassern
 
06.12.22
12:30
(0) конфигурация самописная? Если нет, то событий особых не должно происходить при изменении флага. Из общего модуля не надо пытаться вызывать логику формы. Вообще бизнес логику лучше в формах не хранить. В вашем случае я бы посмотрел кусок кода, который выполняется при изменении флагов. Если запускается какая-то экспортная процедура, то вызывал бы сразу ее, либо перенес логику в общий модуль.
3 Адинэснег
 
06.12.22
12:37
надо было заполнение реквизитов объекта реализовать в отдельном серверном методе и дергать его как из событий формы, так и перед записью в модуле объекта
4 ShramkoRS
 
06.12.22
12:41
(1) Полагаю что да. Я пытался изначально вызвать при записи если это новый документ и при открытии если уже созданный, но это вызвало несколько ошибок в работе кладовщиков, меня попросили переделать чтоб оно работало именно при проведении.
5 Ryzeman
 
06.12.22
13:36
(0) (4) Ты немного запутался в событиях и сущностях похоже. Уточни свою задачу.

Если у тебя >>Проведение документа вынесено в подписку на событие<< то, ни о каком события при изменении или модуле формы речи идти не должно. Тебе не нужна форма документа в принципе - подписка у тебя на сервере, там идёт работа с объектом. Сделай объект таким, каким он должен быть при проставлении всех нужных галочек, и когда его откроют - там уже как раз увидят что все галочки есть.


Если же речь идёт об интерактивном проведении самого документа, то ты там в любой удобный момент в модуле формы делаешь всё что положенно и меняешь - хоть перед записью хоть при записи
6 mikecool
 
06.12.22
13:53
(5) только передзаписью, какой после?
7 Ryzeman
 
06.12.22
13:56
(6) Я не писал после.

Можно перед записью, можно в обработке проверки заполнения, можно при записи на сервере - тут в зависимости от того что он там конкретно делает.
8 ShramkoRS
 
06.12.22
14:12
(5) в том то и проблема, мне мало чтоб стояли галочки, мне еще нужно чтоб скрипт при этом был отработанный. Я не знаю с какой целью но в скрипте, при изменении галочек вылазит окно с сообщением, спрашивающее подтверждение, если окно не вылезет, то никакой связи между документом и регистром не появится. То есть в любом случае нужно участие пользователя. Если б не это сообщение, я бы в тряпочку молчал. Мне просто нужно чтоб ставилась галочка и отрабатывал скрипт при проведении, ни при записи и не перед ней, а именно при проведении, если точнее то перед проведением, чтоб проведение проходило с уже отработанным скриптом. Выглядеть должно так. Пользователь открыл форму документа, если надо покопался в ней, записал, распечатал закрыл, галочки ни как не дали о себе знать. А вот если нажал провести, то галочки ставятся, вылазят эти уточняющие сообщения, пользователь соглашается и только потом проводка проходит.
9 Ryzeman
 
06.12.22
14:18
(8) Нет, не обижайся, но ты говоришь глупость. Без контекста никаких скриптов и галочек не существует от слова совсем. Есть объект - это набор таблиц который хранится в базе данных. Все эти скрипты на форме и прочая шняга в конце концов влияют какие данные в этот объект запишутся. Вне контекста ты не должен (и не можешь) вести никакой диалог с пользователем.

И именно поэтому я тебя и спрашиваю - у тебя вся эта логика должна отрабатываться в форме самого документа? Тогда у тебя есть модуль этой формы, спокойно делай в ней всё что хочешь, она и так доступна.

Если у тебя это происходит в какой-то совершенно другой форме по подписке события ДРУГОГО объекта, то незачем трогать модуль формы вообще (хотя это возможно, но в твоём случае не нужно), у тебя уже есть сам объект, меняй его как хочешь
10 magicSan
 
06.12.22
14:24
в расширение форму.
11 ShramkoRS
 
06.12.22
14:36
(9) Я не обидчивый. Я ж говорю, изначально я все реализовал в форме. Для новых документов сделал при записи, для уже созданых при открытии. Но из-за этого у кладовщицы одной случилась накладка, когда ей надо было распечтать документ, который был без БУ и НУ, он у нее открылся, галочки проставилсь, ддя печати док попросил записать и провести, но у нее было прав для проведения и ей нужен был документ проведенный изначальным числом, а сегодняшним. Может вы хотите донести до меня, то что мне стоило в обоих случаях ставить эти галочки при записи документа?
12 Ryzeman
 
06.12.22
14:43
(11) Нет, я хочу сказать что вот эти слова

>>Проведение документа вынесено в подписку на событие (подписка реализована в общем модуле)

Тогда вообще не в тему.

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

Во-вторых, если процитировать:

>>Выдали следующую задачу: нужно при проведении документа автомтаически ставить галочки (флажки) отражатть в бух учете и в налоговом учете находящиеся на форме документа.

Опустим все нюансы и предположим что у задача состоит в том, что бы у всех проведённых документов стояли эти галки. Реализовать можно двумя путями - либо в модуле объекта\подписке, либо на форме.
На форме это можно сделать при записи, там проверяешь режим записи, и если проведение - выполняешь код. При открытии это делать НЕ надо, тем более там какой то диалог у тебя. Его же не просто так придумали?

Если будешь делать в модуле объекта (это нужно например что бы это правило работало и для программно созданных документов, вне зависимости что там его создатель захотел) - тогда всё что я писал выше справедливо - тебе не нужен модуль формы. Смотришь откуда эти галки берутся и что делается при их нажатии - и повторяешь то же в модуле события - запись или проведение или что ты там решил. Это либо реквизиты объекта либо запись в регистре сведений соответсвующем, я не знаю как конкретно в твоей конфе это реализовано. Посмотри сам по коду что происходит.
13 Обработка
 
06.12.22
14:54
(0) Ваша задача сводится к тому что:
1. Есть записанные или проведенные документы без включения галочек.
Тут надо выяснить это только небольшое количество доков которые по случайной невнимательности были записаны?
Или же это намеренный  с чем то обоснованный метод записи доков чтоб потом как-то программа сама включала галочки и провела.

В любом случае вам нужно написать обработку по изменению реквизита доков и проведению. Сделайте это без использования методов процедур и функции формы документа. Не важно разово или постоянно но нужно это написать и протестировать.
2. Если писать обработку то нужно быть уверенным что все должно быть предопределено. никаких диалогов.
3. Все это делать надо в событии перед записью. Ни в коем случае при проведении. ТАк не кошерно!.
14 Обработка
 
06.12.22
14:56
+ (13)
Даже если это подписка на событие то событие передзаписью.
Там все пропишите и если надо придется скопипастить все функции из формы или написать такой же с изменениями.
15 ShramkoRS
 
06.12.22
14:57
(12) понял спасибо
16 Ryzeman
 
06.12.22
14:58
(14) Ну, диалог в подписке он вести не сможет, если на кой то чёрт он действительно нужен (хотя очень вряд ли).
Программист всегда исправляет последнюю ошибку.