Имя: Пароль:
1C
1С v8
Передать переменную из формы в процедуру ПередЗаписью модуля объекта
0 Dmitriy_
Kolesnikov
 
21.08.17
11:07
Есть очень тяжелая процедура ПередЗаписью, поэтому не хочу делить её функционал на две части - ту, что в форме и ту, что в модуле документа.
Задача - передать таблицу значений из формы документа в ПередЗаписью модуля документа.
Какие есть варианты?
1 h-sp
 
21.08.17
11:09
(0) через ДополнительныеСвойства. Ваш ко.
2 Dvoe4nik
 
21.08.17
11:13
(0) временное хранилище?
3 Irbis
 
21.08.17
11:29
Делить "тяжёлую процедуру" правильно! Желательно на процедурки, которыми можно пользоваться и из формы и из модуля.
Не сейчас, так в дальнейшем всё равно придётся.
4 Dmitriy_
Kolesnikov
 
21.08.17
11:42
(3) там не поделишь. Есть ТЗ, которая формируется при открытии формы, затем меняется и передается обратно в ДокументОбъект при записи. При этом хитро обрабатывается, что-то идет в ТЧ, но многие данные пишутся в "подчиненные" документы. если разделить синхронизацию ТЗ с ТЧ документа - нарушится целостность данных.

(1) ещё нашел вариант - экспортная переменная в ДокументОбъект. Пробую.
5 Irbis
 
21.08.17
11:45
(4) Налицо кривизна проектирования, и опять же налицо время устранения этой кривизны. Затраты на сохранение кривого решения уже даже разработчику кажутся излишними. Вам нужно крепко подумать.
6 Dmitriy_
Kolesnikov
 
21.08.17
11:59
(5) есть управляющий нетиповой документ, который создает, изменяет и контролирует штук 50 типовых документов.
Что тут криво?
Ящетаю, лезть напрямую в типовые регистры - ещё кривее. А с учетом того, что речь идет о финансовых документах, на которые завязан используемый типовой функционал - тем более. Сочинять своё СписаниеБезналичныхДенежныхСредств с блекджеком и шлюхами - значительно хуже.
7 Irbis
 
21.08.17
12:02
(6) Криво именно то, что один документ редактирует другой. Это не по феншую. Если не хотим лезть в чужие регистры, используем свои и, желательно, в рамках отдельной собственной подсистемы.
8 FIXXXL
 
21.08.17
12:03
(6) почему ТЗ не хранится как ТЧ документа?
9 Dmitriy_
Kolesnikov
 
21.08.17
14:41
(7) там автоматизируется создание большого количества платежек, например. А у документа СБДС есть много реквизитов, которые связаны с работой системы Клиент-Банк. Мне проще автоматизировать создание типовых документов по своим шаблонам, чем глубоко лезть в типовые механизмы.

(8) чтобы исключить дублирование данных. Каждое число хранится в базе только один раз, в каком-то одном документе. Если же оно нужно в форме другого документа - то берется из места хранения при открытии формы.
10 Dmitriy_
Kolesnikov
 
21.08.17
14:45
Господа, я чота туплю, подскажите.
Модуль формы,
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Объект.ДополнительныеСвойства.Свойство("тзРаспределение") и Объект.ДополнительныеСвойства.тзРаспределение.Количество() > 0 тогда
        Объект.Распределение.Загрузить(Объект.ДополнительныеСвойства.тзРаспределение);
    КонецЕсли;

Объект имеет тип УправляемыеФормыСтруктура и в нем нет ДополнительныеСвойства. Почему нет, когда все остальные реквизиты и табличные части есть?
11 Dmitriy_
Kolesnikov
 
21.08.17
15:21
(10)
ДокументОбъект = РеквизитФормыВЗначение("Объект");
и там всё есть.
12 lexasan
 
21.08.17
15:32
(11) Тут может возникнуть проблема с тем, что нужно записывать именно вот этот объект -
РеквизитФормыВЗначение("Объект"). Если запись вызывается методом формы Записать, то доп. сведения будут пустые, потому что объект может переполучается заново в модуле объекта.
13 drcrasher
 
21.08.17
15:49
(0) что происходит в форме, должно оставаться в форме
14 h-sp
 
21.08.17
16:10
(12) можно в типовой посмотреть. у них дополнительные свойства работают.
15 lodger
 
21.08.17
17:27
(0) гнать тз в тч уже предлагали?
16 Dmitriy_
Kolesnikov
 
21.08.17
20:14
(12) вся запись происходит в процедуре
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Соответственно, я использую ТекущийОбъект.ДополнительныеСвойства.вставить("тзРаспределениеС", тзРаспределениеС);
17 lexasan
 
22.08.17
12:32
(16) Так в итоге получилось передать или нет?
18 1dvd
 
22.08.17
12:41
ты кажется сайтом ошибся. Тебе сюда: http://govnokod.ru/
19 Dmitriy_
Kolesnikov
 
28.08.17
11:55
(18) критикуешь - предлагай.
А вешать ярлыки, не разобравшись, умеет любой дурак.
20 Dmitriy_
Kolesnikov
 
28.08.17
11:56
(17) да, всё через структуру ДокументОбъект.ДополнительныеСвойства - и туда, и обратно.
Очень удобно.
21 1dvd
 
28.08.17
12:41
(19) Как ты себе представляешь программную запись документа без участия пользователя и без создания формы?
22 Dmitriy_
Kolesnikov
 
28.08.17
21:21
(21) леХко.
ПередСохранением в модуле формы передаем измененные ТЧ обратно через ДополнительныеСвойства.
В ПередСохранением модуля объекта: смотрим, есть ли измененная ТЗ в ДополнительныеСвойства. Если нет: копируем её из ТЧ, добавляем недостающие колонки, заполняем их автоматически. Всё это легкие операции, производятся в памяти, без запросов к БД.
А потом уже проверяем, сравниваем и т. д.

Могу целиком привести код, но его очень много.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший