Имя: Пароль:
1C
1С v8
общий метод для формы и объекта
0 qeos
 
23.10.13
13:28
1. Модуль объекта 40% (4)
2. Модуль менеджера 30% (3)
3. Модуль формы 10% (1)
4. Общий модуль 10% (1)
5. Другой вариант 10% (1)
Всего мнений: 10

8.2 УФ БП 3.0
есть у меня заполнение ТЧ. по феншую куда я этот метод должен вставить чтобы вызвать его и из формы и из кода при создании объекта?
Чтото функции не доступны ни в модуле обекта ни менеджера...
1 Maxus43
 
23.10.13
13:28
в модуле объекта конечно, что где недоступно - непонятно
2 Maxus43
 
23.10.13
13:29
вот

Модуль объекта
3 qeos
 
23.10.13
13:31
(1) а из формы вызывать через РеквизитФормыВЗначение??
4 Maxus43
 
23.10.13
13:35
(3) например так. можно по разному
5 Lenka_Boo
 
23.10.13
13:35
(0) к имени функции слово "Экспорт" дописать не забыл?

Модуль объекта
6 qeos
 
23.10.13
13:36
(5) не забыл
не видна она из формы
7 Зойч
 
23.10.13
13:37
(1) создатели бп30 с тобой не согласны
8 Maxus43
 
23.10.13
13:38
9 Maxus43
 
23.10.13
13:38
(7) фу на них
10 zak555
 
23.10.13
13:39
(8) только РеквизитФормыВЗначение/ЗначениеВРеквизитФормы делает два лишних движения
11 qeos
 
23.10.13
13:39
(8) вот и я думаю что так -- это изврат
12 Euguln
 
23.10.13
13:40
(0) А в форме когда вызывается? По команде?
13 zak555
 
23.10.13
13:41
> чтобы вызвать его и из формы

перезаполнить существующий документ ?
14 Maxus43
 
23.10.13
13:41
дак тогда надо дублировать код, и в форме и в объекте, чтоб телодвижений не было... или как?
15 qeos
 
23.10.13
13:41
(12) ну да. а есть другие варианты? тогда №5 и прошу изложить мысль.
16 qeos
 
23.10.13
13:42
(13) да. перезаполнить табличную часть
17 Euguln
 
23.10.13
13:43
Я бы в менеджер запихал.

Модуль менеджера
18 qeos
 
23.10.13
13:44
(17) вызывать также через РеквизитФормыВЗначение?
19 BlueSky
 
23.10.13
13:45
Менеджер не катит. Работаем ведь с объектом?

1. Модуль объекта
20 BlueSky
 
23.10.13
13:46
Менеджер не катит. Работаем ведь с объектом?

Модуль объекта
21 Euguln
 
23.10.13
13:46
(18) нет, напрямую через менеджер. Только момент один, в менеджере нет контекста объекта, его передавать надо.
22 Euguln
 
23.10.13
13:47
(19) не вижу противоречий. Можно передавать как сам объект, так и просто нужную инфу.
23 Maxus43
 
23.10.13
13:47
в стандартах разработки 1с как раз упоминается что если работаем с конкретным экземпляром объекта - то модуль объекта, если нет - то менеджер
24 Spieluhr
 
23.10.13
13:48
имхо удобнее

Модуль менеджера
25 Euguln
 
23.10.13
13:49
(23) заполнение ТЧ суть не есть работа с объектом. Задача - получит ТЗ и залить в ТЧ ))))
26 qeos
 
23.10.13
13:49
(21) хм. вроде вариант не плох, можно же данные формы..
27 Maxus43
 
23.10.13
13:49
(25) не передёргивайте понятия) это работа с конкретным экзэмпляром объекта
28 qeos
 
23.10.13
13:50
с тем же успехом и в общий модуль

Общий модуль
29 Euguln
 
23.10.13
13:52
(27) Тогда чегой-то в типовых заполнения документов зачастую в менеджер вынесены, и передается объект.
30 qeos
 
23.10.13
13:53
(29) я с ними еще не плотно общался, поэтому и спрашиваю.
31 Maxus43
 
23.10.13
13:55
(29) открою секрет - типовые не прошли бы тест на 1с совместимо, двойные стандарты сэр. разработчики типовых не сдадут экзамен даже на специалиста
32 Maxus43
 
23.10.13
13:56
(31) сдать то сдадут конечно, но за реализацию некоторых штук как в типовых - режут на экзамене
33 Euguln
 
23.10.13
13:57
(31) Это не новость, большая часть прошедших 1С:Совместимо на самом деле тоже бы не прошли тест, если все делать по букве требований.
34 Maxus43
 
23.10.13
13:58
(33) вот и осталось понять - делать согласно стандартам, или быдлокодить как в типовых
35 Euguln
 
23.10.13
14:03
(34) с этой точки зрения конструкцию вида
Документ = РеквизитФормыВЗначение("Объект");
Документ.Пересчитать();
ЗначениеВРеквизитФормы(Документ, "Объект");

Можно считать быдлокодом априори ))
36 Maxus43
 
23.10.13
14:04
(35) ну тут надо смотреть кстати, если именно полностью перезаполнить ТЧ не используя данные текущие в ней - имхо будет проще, перезаполняем ТЧ, обновляем данные на форме. На сервер тянуть что уже в ТЧ не надо
37 Maxus43
 
23.10.13
14:07
хотя не... ну короче делать как велит сердце а не разум, благо везде делают по разному
38 zak555
 
23.10.13
14:11
(36) на сервер же можно передать только ТП ?
39 Maxus43
 
23.10.13
14:17
(38) вроде нет, по крайней мере смысла в этом не вижу что-то
40 Infsams654
 
23.10.13
14:47
что такое "есть у меня заполнение ТЧ" - имеется в виду заполнение по команде ? Тогда, т.к. обозначено что это УФ БП 3.0 , то делай, как там. Например, в документе "Возврат товаров от покупателя".
Т.е. для того, чтоб все было как в БП 3.0 - все в форме делается.

Модуль формы
41 qeos
 
23.10.13
14:59
(40) а если создается группа документов? у меня ТЧ заполняется из файла.
42 qeos
 
23.10.13
15:01
у меня тут еще возникла проблема. я разве не могу вызвать функцию в том же модуле менеджера, но из функции &НаКлиенте вызвать &НаСервере?
43 zak555
 
24.10.13
08:06
(42) езё раз
44 Rovan
 
гуру
24.10.13
08:09
(10) в УФ стало больше лишних движений - привыкай
45 zak555
 
24.10.13
08:13
(44) проще тогда (38) в ОМ
ведь работа с ФТ и ТЧ одинакова
46 Feunoir
 
24.10.13
08:24
(0) Я тут поднимал такую тему полгодика назад. Тогда тоже долго обсуждали. Я для себя принял решение v8: Вызов метода модуля объекта из управляемой формы

И нормально оно работает. Из модуля объекта в процедуру заполнения передается объект, из модуля формы - структура данных формы. Внутри для процедуры заполнения они выглядят одинаково, при этом объект лишний раз не создается.

Модуль менеджера
47 jsmith82
 
24.10.13
08:29
На самом деле без разницы где
Когда данные объекта передаются на форму (при открытии объекта в режиме предприятия), форма объекта сама становится неким объектом
Это концептуальный вопрос в рамках технологии УФ
Если считать, что форма это лишь каркас объекта, то тогда нужно все абсолютно методы вызывать в сочетании с

РеквизитФормыВЗначение
ЗначениеВРеквизитФормы

что, конечно же, будет абсолютно некошерно.
Поэтому разработчик должен выходить на следующий уровень абстракции и не гнушаться даже дублированием функций (например, один и тот же метод и в модуле формы, и в модуле объекта).
Что касается модуля менеджера или общего модуля, то тут тоже зависит от того, откуда передаётся управление. Например, это может быть и ДанныеФормыКоллекция и ДокументОбъект. То есть вызываемая процедура должна проверять тип значения. Ну это если писать код в рамках инкапсуляции. Самый безобидный вариант это создание какого-то класса, который будет оперировать таблицей значений, но тут тоже могут быть нюансы.

Другой вариант
48 zak555
 
24.10.13
08:32
(46) так ты когда из модуля формы вызываешь модуль менеджера -- данные на форме меняются ?
49 jsmith82
 
24.10.13
08:33
(48) конечно
50 zak555
 
24.10.13
08:36
(49) вон, смотри его пост v8: Вызов метода модуля объекта из управляемой формы

Процедура ЗаполнитьСервер()
    Документы.гт_ВыполнениеРабот.ЗаполнитьДокумент(Объект);

ТипЗНЧ(Объект) <> ДокументОбъект
51 jsmith82
 
24.10.13
08:40
(50) ну это то, что я говорил в (47)
>>Что касается модуля менеджера или общего модуля, то тут тоже зависит от того, откуда передаётся управление. Например, это может быть и ДанныеФормыКоллекция и ДокументОбъект. То есть вызываемая процедура должна проверять тип значения.
52 jsmith82
 
24.10.13
08:42
имхо, модуль манагера вообще в таких случаях трогать не надо
это же статические методы как бы
хотя не труъ статические
53 zak555
 
24.10.13
08:46
(51) и как автор перезаполнять ДанныеФормыКоллекция  ?
54 zak555
 
24.10.13
08:46
*ДанныеФормыСтруктура
55 Feunoir
 
24.10.13
08:49
(51) Не должна, если не вызываются какие то специфические методы объекта или структуры данных. Очистить, добавить они одинаковы и для объекта и для коллекции.
56 jsmith82
 
24.10.13
08:49
(55) ну так-то да, при прочих равных условиях
57 jsmith82
 
24.10.13
08:50
но это всё равно против феншуя ;)
58 Feunoir
 
24.10.13
08:53
(57) Зато унификация и минимизация кода. Не надо помнить, что в случае изменений надо менять в нескольких местах.
59 jsmith82
 
24.10.13
08:54
(58) утилитарность
60 jsmith82
 
24.10.13
08:54
дёшево и сердито
61 jsmith82
 
24.10.13
08:57
а вот ответьте на другой коварный вопрос
когда нужно использовать табличную часть обработки, а когда реквизит формы?
если ТЧ, то можно использовать модуль объекта, а когда реквизит формы, то только модуль формы
где здесь феншуй?
62 jsmith82
 
24.10.13
09:01
и вообще, не является ли табличная часть обработки лишней? ;))
ТЧ документа хранит данные в базе, ТЧ обработки ничего не хранит ))
63 zak555
 
24.10.13
09:02
(62) например, в ТЧ обработки хранить "список" организаций по которым нужно сделать свёртку
64 jsmith82
 
24.10.13
09:03
(63) но данные в базу не записываются, с таким же успехом можно юзать реквизит формы типа таблица значений
65 Feunoir
 
24.10.13
09:04
(61) Феншуя нет.

(62) А вариант, что обработка может быть без формы ты не рассматриваешь?
66 jsmith82
 
24.10.13
09:05
(65) рассматриваю, конечно, но форма существует и на сервере
67 zak555
 
24.10.13
09:05
(64) так обработку можно вызвать программно
68 zak555
 
24.10.13
09:06
(66) если её открыть
69 Поросенок Петр
 
24.10.13
09:19
Объект и коллекция данных это разные объекты, с различными методами (ВыгрузитьКолонку() в ТЧ и т.п.) Передавать это в одну функцию, а в ней проверять типы это мастурбация.

Модуль объекта
70 zak555
 
24.10.13
09:26
(69) так есть

ДанныеФормыКоллекция (FormDataCollection)
Выгрузить (Unload)
Вариант синтаксиса: Выгрузить колонки

Синтаксис:

Выгрузить(<Строки>, <Колонки>)
71 Поросенок Петр
 
24.10.13
09:36
(70) ВыгрузитьКолонку

Да и вообще копаться в кишках переданного в параметрах объекта не комильфо.
72 Feunoir
 
24.10.13
09:41
(71) А зачем выгружать колонку, если и у коллекции, и у табличной части объекта есть просто Выгрузить? Выгружают они обе таблицу значений, так что дальнейшая работа будет одинаковая.
73 zak555
 
24.10.13
09:43
(72) +1

есть же загрузить