|
Отображение изменений на управляемой форме | ☑ | ||
---|---|---|---|---|
0
rosveta
16.10.14
✎
15:11
|
Добрый день. Я пишу внешнюю обработку по заполнению табличной части в документе Заказ клиента в УТ 11. Она зарегистрирована, на форме документа отображается и в общем-то код отрабатывает. Но мои изменения не отображаются на форме этого документа. Привожу код.
&НаКлиенте Процедура ВыполнитьКоманду(ЗаполнитьСклады, ОбъектыНазначенияМассив) Экспорт ЗаполнитьСкладыНаСервере(ОбъектыНазначенияМассив); КонецПроцедуры &НаСервере Процедура ЗаполнитьСкладыНаСервере(ОбъектыНазначенияМассив) // Получение массива складов, входящих в иерархию параметра "ГруппаСкладов" Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Склады.Ссылка КАК Ссылка, | Склады.ПометкаУдаления КАК ПометкаУдаления |ИЗ | Справочник.Склады КАК Склады |ГДЕ | Склады.Ссылка В ИЕРАРХИИ(&ГруппаСкладов) | И Склады.ЭтоГруппа = ЛОЖЬ | И ВЫБОР | КОГДА &ВыборВЗаказ = ИСТИНА | ТОГДА Склады.ВыборГруппы <> ЗНАЧЕНИЕ(Перечисление.ВыборГруппыСкладов.Запретить) | ИНАЧЕ Склады.ВыборГруппы = ЗНАЧЕНИЕ(Перечисление.ВыборГруппыСкладов.РазрешитьВЗаказахИНакладных) | КОНЕЦ"); Запрос.УстановитьПараметр("ВыборВЗаказ", Истина); Запрос.УстановитьПараметр("ГруппаСкладов", ОбъектыНазначенияМассив[0].Склад); ТаблицаСкладов = Запрос.Выполнить().Выгрузить(); МассивСкладов = ТаблицаСкладов.ВыгрузитьКолонку("Ссылка"); //Получение структуры остатков ОстаткиПоСкладам = Новый ТаблицаЗначений; ОстаткиПоСкладам.Колонки.Добавить("Склад"); ОстаткиПоСкладам.Колонки.Добавить("Остаток"); ОбъектЗаказ = ОбъектыНазначенияМассив[0].ПолучитьОбъект(); Для каждого СтрокаТовары Из ОбъектЗаказ.Товары Цикл СтруктураОстатков = ПодборТоваровСервер.ОстаткиНоменклатуры(СтрокаТовары.Номенклатура, СтрокаТовары.Характеристика, МассивСкладов); Для каждого СтрокаОстатков Из СтруктураОстатков.ТекущиеОстатки Цикл Если СтрокаОстатков.Свободно > 0 Тогда СтрокаОстаткиПоСкладам = ОстаткиПоСкладам.Добавить(); СтрокаОстаткиПоСкладам.Склад = СтрокаОстатков.Склад; СтрокаОстаткиПоСкладам.Остаток = СтрокаОстатков.Свободно; КонецЕсли; КонецЦикла; Для каждого СтрокаСформированныОстатки Из ОстаткиПоСкладам Цикл Если Найти(Строка(СтрокаСформированныОстатки.Склад), "возврат") > 0 И СтрокаСформированныОстатки.Остаток >= СтрокаТовары.Количество Тогда СтрокаТовары.Склад = СтрокаСформированныОстатки.Склад; Прервать; ИначеЕсли Найти(Строка(СтрокаСформированныОстатки.Склад), "склад №3 (ПМ)") > 0 И СтрокаСформированныОстатки.Остаток >= СтрокаТовары.Количество Тогда СтрокаТовары.Склад = СтрокаСформированныОстатки.Склад; Прервать; ИначеЕсли СтрокаСформированныОстатки.Остаток >= СтрокаТовары.Количество Тогда СтрокаТовары.Склад = СтрокаСформированныОстатки.Склад; Прервать; КонецЕсли; КонецЦикла; ОстаткиПоСкладам.Очистить(); КонецЦикла; Попытка ОбъектЗаказ.Записать(РежимЗаписиДокумента.Запись);//Для отладки. //ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); //ЗначениеВРеквизитФормы(ОбъектЗаказ, "Объект"); Исключение Сообщить("Не удалось записать документ"); КонецПопытки; КонецПроцедуры ОбъектыНазначенияМассив[0] - Это и есть документ Заказ Клиента |
|||
1
PR
16.10.14
✎
15:13
|
(0) У вас вторая сережка с уха в декольте уехала :))
|
|||
2
PR
16.10.14
✎
15:15
|
А по сабжу. Не нужно на сервере менять объект, который потом не перечитывается в форму на сервере.
|
|||
3
rosveta
16.10.14
✎
15:22
|
PR, Я правильно Вас понимаю, что на стороне сервера я только должна выполнить запрос и получить необходимые мне данные, потом на клиент передать массив, содержащий данные и там их уже и обработать?
|
|||
4
PR
16.10.14
✎
15:23
|
(3) Да
|
|||
5
rosveta
16.10.14
✎
15:23
|
Спасибо. Сейчас попробую
|
|||
6
PR
16.10.14
✎
15:24
|
+(4) Потому что на клиенте уже получен в форму объект, возможно даже отредактирован и менять нужно именно его, а не получать из базы еще раз объект и его менять.
|
|||
7
rosveta
17.10.14
✎
11:37
|
В итоге пришлось делать так. Такие варианты находила и в других темах, но думала, что ка-кто можно избежать поиска по окнам.
&НаКлиенте Процедура ВыполнитьКоманду(ЗаполнитьСклады, ОбъектыНазначенияМассив) Экспорт Для каждого Элемент из ОбъектыНазначенияМассив Цикл КлючПоиска = Новый Структура("Ключ", Элемент); Окна = ПолучитьОкна(); Для каждого Окно из Окна Цикл Если НЕ Окно.Основное И Найти(Окно.Заголовок, Элемент) Тогда Форма = ОткрытьФорму("Документ.ЗаказКлиента.Форма.ФормаДокумента",КлючПоиска,,,Окно); НовыйОбъект = Форма.Объект; ЗаполнитьСкладыНаСервере(НовыйОбъект); КопироватьДанныеФормы(НовыйОбъект, Форма.Объект); КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры &НаСервере Процедура ЗаполнитьСкладыНаСервере(ОбъектыНазначенияМассив) // Получение массива складов, входящих в иерархию параметра "ГруппаСкладов" Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Склады.Ссылка КАК Ссылка, | Склады.ПометкаУдаления КАК ПометкаУдаления |ИЗ | Справочник.Склады КАК Склады |ГДЕ | Склады.Ссылка В ИЕРАРХИИ(&ГруппаСкладов) | И Склады.ЭтоГруппа = ЛОЖЬ | И ВЫБОР | КОГДА &ВыборВЗаказ = ИСТИНА | ТОГДА Склады.ВыборГруппы <> ЗНАЧЕНИЕ(Перечисление.ВыборГруппыСкладов.Запретить) | ИНАЧЕ Склады.ВыборГруппы = ЗНАЧЕНИЕ(Перечисление.ВыборГруппыСкладов.РазрешитьВЗаказахИНакладных) | КОНЕЦ"); Запрос.УстановитьПараметр("ВыборВЗаказ", Истина); Запрос.УстановитьПараметр("ГруппаСкладов", ОбъектыНазначенияМассив.Склад); ТаблицаСкладов = Запрос.Выполнить().Выгрузить(); МассивСкладов = ТаблицаСкладов.ВыгрузитьКолонку("Ссылка"); //Получение структуры остатков ОстаткиПоСкладам = Новый ТаблицаЗначений; ОстаткиПоСкладам.Колонки.Добавить("Склад"); ОстаткиПоСкладам.Колонки.Добавить("Остаток"); ОбъектЗаказ = ОбъектыНазначенияМассив.Товары.Выгрузить(); Для каждого СтрокаТовары Из ОбъектыНазначенияМассив.Товары Цикл СтруктураОстатков = ПодборТоваровСервер.ОстаткиНоменклатуры(СтрокаТовары.Номенклатура, СтрокаТовары.Характеристика, МассивСкладов); Для каждого СтрокаОстатков Из СтруктураОстатков.ТекущиеОстатки Цикл Если СтрокаОстатков.Свободно > 0 Тогда СтрокаОстаткиПоСкладам = ОстаткиПоСкладам.Добавить(); СтрокаОстаткиПоСкладам.Склад = СтрокаОстатков.Склад; СтрокаОстаткиПоСкладам.Остаток = СтрокаОстатков.Свободно; КонецЕсли; КонецЦикла; Для каждого СтрокаСформированныОстатки Из ОстаткиПоСкладам Цикл Если Найти(Строка(СтрокаСформированныОстатки.Склад), "возврат") > 0 И СтрокаСформированныОстатки.Остаток >= СтрокаТовары.Количество Тогда СтрокаТовары.Склад = СтрокаСформированныОстатки.Склад; Прервать; ИначеЕсли Найти(Строка(СтрокаСформированныОстатки.Склад), "склад №3 (ПМ)") > 0 И СтрокаСформированныОстатки.Остаток >= СтрокаТовары.Количество Тогда СтрокаТовары.Склад = СтрокаСформированныОстатки.Склад; Прервать; ИначеЕсли СтрокаСформированныОстатки.Остаток >= СтрокаТовары.Количество Тогда СтрокаТовары.Склад = СтрокаСформированныОстатки.Склад; Прервать; КонецЕсли; КонецЦикла; ОстаткиПоСкладам.Очистить(); КонецЦикла; КонецПроцедуры |
|||
8
Simod
17.10.14
✎
18:17
|
||||
9
rosveta
20.10.14
✎
16:47
|
(8), у меня заполнение происходит из формы обработки заполнения табличного документа. А реквизиты не отображаются в заполняемой форме, поэтому я не совсем понимаю, каким образом я могу использовать то, что вы прислали.
|
|||
10
rosveta
21.10.14
✎
14:02
|
Возможно, что я не очень понимаю принцип данных функций.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |