| 
    
        
     
     | 
    
    
  | 
Отображение изменений на управляемой форме | ☑ | ||
|---|---|---|---|---|
| 
    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 
 | 
         
        Возможно, что я не очень понимаю принцип данных функций.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |