Имя: Пароль:
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) Ну, диалог в подписке он вести не сможет, если на кой то чёрт он действительно нужен (хотя очень вряд ли).
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший