|
УФ Как правильно написать код , чтобы работал на сервер без контекста? | ☑ | ||
---|---|---|---|---|
0
Ivan_495
23.09.14
✎
15:11
|
УФ Как правильно написать код , чтобы работал на сервер без контекста?
&НаКлиенте Процедура ЗаполнитьПоСпецификациям(Команда) Объект.Материалы.Очистить(); ЗаполнитьПоСпецификациямСервер(Объект.Ссылка,Объект.Материалы); КонецПроцедуры &НаСервереБезКонтекста Процедура ЗаполнитьПоСпецификациямСервер(Ссылка,Коллекция) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СпецификацииСрезПоследних.Сырье, | СУММА(СпецификацииСрезПоследних.Количество) КАК КоличествоСЫрьяЗаЕд, | СУММА(ОтчетПроизводстваЗаСменуПродукция.Количество) КАК КоличествоПродукцииКг, | СУММА(ОтчетПроизводстваЗаСменуПродукция.Количество * СпецификацииСрезПоследних.Количество) КАК КолСырьяНавсюПродукцию, | СпецификацииСрезПоследних.Сырье.ЕдиницаИзмерения КАК ЕдИзм |ИЗ | Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСменуПродукция | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Спецификации.СрезПоследних КАК СпецификацииСрезПоследних | ПО ОтчетПроизводстваЗаСменуПродукция.Номенклатура = СпецификацииСрезПоследних.Номенклатура |ГДЕ | ОтчетПроизводстваЗаСменуПродукция.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | СпецификацииСрезПоследних.Сырье, | СпецификацииСрезПоследних.Сырье.ЕдиницаИзмерения"; Запрос.УстановитьПараметр("Ссылка",Ссылка); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи тек=Коллекция.Добавить(); тек.Номенклатура=ВыборкаДетальныеЗаписи.Сырье; тек.Количество=ВыборкаДетальныеЗаписи.КолСырьяНавсюПродукцию; тек.ЕдИзм=ВыборкаДетальныеЗаписи.ЕдИзм; КонецЦикла; //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА КонецПроцедуры |
|||
1
KSN
23.09.14
✎
15:12
|
Откуда у тебя на клиенте объект??
|
|||
2
Ivan_495
23.09.14
✎
15:14
|
+0 ошибка
Документ.ОтчетПроизводстваЗаСмену.Форма.ФормаДокумента.Форма(118)}: Ошибка при установке значения атрибута контекста (Материалы) ЗаполнитьПоСпецификациямСервер(Объект.Ссылка,Объект.Материалы); по причине: Нельзя изменять поле, содержащее объект данных формы |
|||
3
lodger
23.09.14
✎
15:14
|
с тч на клиенте не работай.
отправь его на сервер со всем контекстом, там уже делай бесконтекстный к данным базы. с клиента на сервер без контекста имеет смысл идти если тебе ограниченный набор данных ннада. |
|||
4
lodger
23.09.14
✎
15:15
|
(3) + или сделать там пакость через процедуру.
|
|||
5
Ivan_495
23.09.14
✎
15:19
|
(4) ты предлагаешь так?
&НаКлиенте Процедура ЗаполнитьПоСпецификациям(Команда) ЗаполнитьПоСпецификациямСервер(Объект); КонецПроцедуры &НаСервереБезКонтекста Процедура ЗаполнитьПоСпецификациямСервер(Объект) |
|||
6
kosts
23.09.14
✎
15:22
|
(5) Перейди на сервер с контекстом. И там заполни документ.
|
|||
7
H A D G E H O G s
23.09.14
✎
15:24
|
ппц
|
|||
8
lodger
23.09.14
✎
15:24
|
(5)
&НаКлиенте Процедура ЗаполнитьПоСпецификациям(Команда) ЗаполнитьПоСпецификациямСервер(); КонецПроцедуры &НаСервере Процедура ЗаполнитьПоСпецификациямСервер() Объект.Материалы.Загрузить(СпецификацииССервера(Ссылка)); КонецПроцедуры &НаСервереБезКонтекста Функция СпецификацииССервера(Ссылка) ... твой запрос ... возврат запрос.выполнить().выгрузить(); КонецФункции ну или около того ) КонецФункции |
|||
9
H A D G E H O G s
23.09.14
✎
15:25
|
Процедура ЗаполнитьПоСпецификациямСервер(Ссылка,Коллекция)
заменить на Процедура ЗаполнитьПоСпецификациямСервер(ЗНАЧ Ссылка,Коллекция) |
|||
10
H A D G E H O G s
23.09.14
✎
15:25
|
Ааа, там еще материалы.
|
|||
11
H A D G E H O G s
23.09.14
✎
15:29
|
Тут только 2 пути:
1) Контекстно заполнить ТЧ. 2) Безконтекстно вернуть массив структур и заполнить ТЧ на клиенте. |
|||
12
kosts
23.09.14
✎
15:29
|
(0) Если делать так как в (0), то можно вернуть с сервера структуру с данными (Структура структур). Как-то так делал, вполне работало. Может так плохо делать, но работало.
|
|||
13
Defender aka LINN
23.09.14
✎
15:31
|
Всяческие заполнения лучше сразу размещать в модуле менеджера и довольно насвистывать, когда ВНЕЗАПНО потребуется заполнить документ не из формы.
|
|||
14
H A D G E H O G s
23.09.14
✎
15:33
|
(13) Потом впилят копию этого кода.
Потом, если будут правки и они достатчно заип---ся синхронно править, а лучше у них будет несколько решений - унифицируют. Как будто не плавали... |
|||
15
Euguln
23.09.14
✎
15:34
|
(11) Есть еще РеквизитФормыВЗначение
|
|||
16
Drac0
23.09.14
✎
15:35
|
(15) На клиенте-то?
|
|||
17
Euguln
23.09.14
✎
15:36
|
(16) Нет, с клиента на сервер, с сервера на сервер без контекста
|
|||
18
Ivan_495
23.09.14
✎
15:39
|
(13) и как выглядит код с использование модуля менеджера?
|
|||
19
Defender aka LINN
23.09.14
✎
15:46
|
(18) Отлично выглядит.
|
|||
20
H A D G E H O G s
23.09.14
✎
15:46
|
(18) Ну он такой... кодистый... Красно-синий, в основном.
|
|||
21
Ivan_495
23.09.14
✎
15:49
|
(13(и зачем модуль менеджера, если кроме как из формы я заполнять табличную часть не собираюсь?
|
|||
22
H A D G E H O G s
23.09.14
✎
15:51
|
(21) Ну ты же не знаешь будущего. Ты - не собираешься, твой собрат-потомок-наследник конфы - собереться и вспомнит тебя добрыми словами, когда увидит его в Модуле менеджера.
|
|||
23
Ivan_495
23.09.14
✎
15:55
|
получается массив структур
|
|||
24
Ivan_495
23.09.14
✎
16:00
|
а если процедуру заполнения разметить в модуле объекта?
|
|||
25
Defender aka LINN
23.09.14
✎
16:12
|
(24) За такое тебя твой собрат-потомок-наследник конфы проклянет до седьмого колена и будет прав.
Пихай в модуль менеджера, говорят тебе. |
|||
26
Drac0
23.09.14
✎
16:42
|
(17) Какой хитрый план.
|
|||
27
Ivan_495
23.09.14
✎
16:43
|
(25) создать не долго, как к ней обратиться не умею
|
|||
28
Drac0
23.09.14
✎
16:44
|
(27) Документы.ТвойДокумент.ТвояФункция()
|
|||
29
Drac0
23.09.14
✎
16:45
|
+(28) не забудь Экспорт указать для функции.
|
|||
30
Ivan_495
23.09.14
✎
16:48
|
(28)Документы.ОтчетПроизводстваЗаСмену.ЗаполнитьПоСпецификациямСервер(
ругается документы переменая не определена |
|||
31
Fish
23.09.14
✎
16:50
|
И почему люди думают, что пару-тройку лет побыдлокодив на 8.1 они влёгкую разберутся в УФ "методом тыка" не читая никаких материалов?
|
|||
32
MrStomak
23.09.14
✎
16:51
|
(0) Вообще, чисто технически,у тебя на клиенте может не быть всех значений коллекции и он неявно сделает контекстный серверный вызов, получить все недостающие элементы коллекции, а потом уже будет выполнять твой безконтекстный серверный вызов. Зачем это нужно, если просто можно сразу вызвать сервер с контекстом?
|
|||
33
Ivan_495
23.09.14
✎
16:55
|
(32) да наслушался тут лекций , что безконтекстный работает быстрее, вот думаю
контекстный все уже работает. |
|||
34
MrStomak
23.09.14
✎
16:57
|
(33) Ну в твоём случае ты меняешь как раз контекст. Безконтекстные вызовы нужны для других целей.
|
|||
35
Ivan_495
23.09.14
✎
16:59
|
(34) логично, а зачем тогда эти советы про модуль менеджера?
|
|||
36
Drac0
23.09.14
✎
17:01
|
(30) Документы не доступны на Клиенте. Делай безконтекстный вызов в качестве прослойки.
|
|||
37
MrStomak
23.09.14
✎
17:03
|
(35) Делаешь контекстный серверный вызов, из него вызываешь процедуру в модуле менеджера, которая заполнить что тебе надо. Потом использовать эту процедуру в модуле менеджера можно из других мест будет - например, из других форм объекта.
|
|||
38
Defender aka LINN
23.09.14
✎
17:05
|
(35) Это в продолжение темы. Чтобы потом ВНЕЗАПНО не выяснилось, что весь функционал документа, включая проведение, находится в форме.
|
|||
39
Ivan_495
23.09.14
✎
17:15
|
модуль формы
&НаКлиенте Процедура ЗаполнитьПоСпецификациям(Команда) // ЗаполнитьПоСпецификациямС(); КонецПроцедуры &НаСервере Процедура ЗаполнитьПоСпецификациямС() // Документы.ОтчетПроизводстваЗаСмену.ЗаполнитьПоСпецификациямСервер(объект.Ссылка,Объект.Материалы); КонецПроцедуры модуль менеджера Процедура ЗаполнитьПоСпецификациямСервер(ссылка,коллекция) ЭКСПОРТ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СпецификацииСрезПоследних.Сырье, | СУММА(СпецификацииСрезПоследних.Количество) КАК КоличествоСЫрьяЗаЕд, | СУММА(ОтчетПроизводстваЗаСменуПродукция.Количество) КАК КоличествоПродукцииКг, | СУММА(ОтчетПроизводстваЗаСменуПродукция.Количество * СпецификацииСрезПоследних.Количество) КАК КолСырьяНавсюПродукцию, | СпецификацииСрезПоследних.Сырье.ЕдиницаИзмерения КАК ЕдИзм |ИЗ | Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСменуПродукция | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Спецификации.СрезПоследних КАК СпецификацииСрезПоследних | ПО ОтчетПроизводстваЗаСменуПродукция.Номенклатура = СпецификацииСрезПоследних.Номенклатура |ГДЕ | ОтчетПроизводстваЗаСменуПродукция.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | СпецификацииСрезПоследних.Сырье, | СпецификацииСрезПоследних.Сырье.ЕдиницаИзмерения"; Запрос.УстановитьПараметр("Ссылка",Ссылка); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); коллекция.Очистить(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи тек=коллекция.Добавить(); тек.Номенклатура=ВыборкаДетальныеЗаписи.Сырье; тек.Количество=ВыборкаДетальныеЗаписи.КолСырьяНавсюПродукцию; тек.ЕдИзм=ВыборкаДетальныеЗаписи.ЕдИзм; КонецЦикла; //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА КонецПроцедуры |
|||
40
Ivan_495
23.09.14
✎
17:24
|
вообщем оптимизации кода не получилось
|
|||
41
Ivan_495
23.09.14
✎
17:37
|
(36) если безконтекстный в качестве прослойки, как передать объект.ссылка в модуль менеджера?
|
|||
42
Defender aka LINN
23.09.14
✎
17:47
|
(41) Сделай контекстным и не люби никому моск. И передавай целиком Объект.
|
|||
43
Drac0
23.09.14
✎
18:26
|
(41) Хм, параметром функции же.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |