0
- 13.06.2012 - 11:26
|
Есть документ Реализация, В нем имеется реквизит спецификация (Документ.СпецификацияСсылка).Как сделать чтобы док Реализация заполнялся по данным выбранного документа Спецификация. Создаем процедуры ПриИзменении реквизита Спецификация. В данной обработки я должен указать функцию которая будет на сервере делать запрос по доку Спецификация &НаСервере Функция ЗаполнитьДокументНаСервере(Спецификация); ТЗ = Новый ТаблицаЗначений; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СпецификацияНоменклатураДокумента.Ссылка.Контраген т, | СпецификацияНоменклатураДокумента.Номенклатура, | СпецификацияНоменклатураДокумента.КоличествоТонн, | СпецификацияНоменклатураДокумента.Цена, | СпецификацияНоменклатураДокумента.Сумма |ИЗ | Документ.Спецификация.НоменклатураДокумента КАК СпецификацияНоменклатураДокумента |ГДЕ | СпецификацияНоменклатураДокумента.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Спецификация); Результат = Запрос.Выполнить(); ТЗ = Результат.Выгрузить(); Возврат ТЗ; КонецФункции Далее на основании ТЗ заполняем документ Реализация. Так делается или я Извращаюсь сильно и есть гораздо проще способ? | |
1
- 13.06.2012 - 11:44
| 2(0) Если это работает и сам понимаешь, как это работает - значит уже хорошо. | |
2
- 13.06.2012 - 11:53
|
Да я походу тут сильно извращаюсь. Подскажите а как то так можно сделать: Процедура СпецификацияПриИзменении(Элемент) ЗаполнитьДокументНаСервере(Объект); КонецПроцедуры &НаСервере Процедура ЗаполнитьДокументНаСервере(Документ); Для каждого СтрокаТЧ из Документ.Спецификация.НоменклатураДокумента Цикл НоваяСтрока = Документ.Реализация.Добавить(); НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура; .................. КонецЦикла; КонецПроцедуры Выдает ошибку Нельзя изменять поле, содержащее объект данных формы. | |
3
- 13.06.2012 - 13:21
| 2-GODed > Основной реквизит формы (Объект) доступен на сервере | |
4
- 13.06.2012 - 13:27
| Разобрался все оказалось еще проще :) | |
5
- 13.06.2012 - 13:28
| 4-GODed > И как ? | |
6
- 13.06.2012 - 14:07
|
&НаКлиенте Процедура СпецификацияПриИзменении(Элемент) Ответ = Вопрос("Заполнить документ на основании спецификации. ", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда Объект.Реализация.Очистить(); ЗаполнитьДокументНаСервере(); Иначе Возврат; КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗаполнитьДокументНаСервере(); Для каждого СтрокаТЧ из Объект.Спецификация.НоменклатураДокумента Цикл Объект.Контрагент = Объект.Спецификация.Контрагент; НоваяСтрока = Объект.Реализация.Добавить(); НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура; НоваяСтрока.КоличествоТонн = СтрокаТЧ.КоличествоТонн; НоваяСтрока.ЦенаСНДС = СтрокаТЧ.Цена ; НоваяСтрока.Сумма = СтрокаТЧ.Сумма ; КонецЦикла; КонецПроцедуры | |
7
- 13.06.2012 - 14:12
| Объект.Реализация.Очистить() рекомендуется выполнять так же на сервере, как и остальной алгоритм заполнения. Это снизит объем передачи данных с клиента на сервер | |
8
- 13.06.2012 - 14:15
| 7.Спасибо за совет. Перенесу на сервер. | |
| Интернет-форум Краснодарского края и Краснодара |