Заполнение дока на основании другого Есть документ Реализация, В нем имеется реквизит спецификация (Документ.СпецификацияСсылка).Как сделать чтобы док Реализация заполнялся по данным выбранного документа Спецификация. Создаем процедуры ПриИзменении реквизита Спецификация. В данной обработки я должен указать функцию которая будет на сервере делать запрос по доку Спецификация &НаСервере Функция ЗаполнитьДокументНаСервере(Спецификация); ТЗ = Новый ТаблицаЗначений; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СпецификацияНоменклатураДокумента.Ссылка.Контрагент, | СпецификацияНоменклатураДокумента.Номенклатура, | СпецификацияНоменклатураДокумента.КоличествоТонн, | СпецификацияНоменклатураДокумента.Цена, | СпецификацияНоменклатураДокумента.Сумма |ИЗ | Документ.Спецификация.НоменклатураДокумента КАК СпецификацияНоменклатураДокумента |ГДЕ | СпецификацияНоменклатураДокумента.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Спецификация); Результат = Запрос.Выполнить(); ТЗ = Результат.Выгрузить(); Возврат ТЗ; КонецФункции Далее на основании ТЗ заполняем документ Реализация. Так делается или я Извращаюсь сильно и есть гораздо проще способ? |
2(0) Если это работает и сам понимаешь, как это работает - значит уже хорошо. |
Да я походу тут сильно извращаюсь. Подскажите а как то так можно сделать: Процедура СпецификацияПриИзменении(Элемент) ЗаполнитьДокументНаСервере(Объект); КонецПроцедуры &НаСервере Процедура ЗаполнитьДокументНаСервере(Документ); Для каждого СтрокаТЧ из Документ.Спецификация.НоменклатураДокумента Цикл НоваяСтрока = Документ.Реализация.Добавить(); НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура; .................. КонецЦикла; КонецПроцедуры Выдает ошибку Нельзя изменять поле, содержащее объект данных формы. |
2-GODed > Основной реквизит формы (Объект) доступен на сервере |
Разобрался все оказалось еще проще :) |
4-GODed > И как ? |
&НаКлиенте Процедура СпецификацияПриИзменении(Элемент) Ответ = Вопрос("Заполнить документ на основании спецификации. ", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда Объект.Реализация.Очистить(); ЗаполнитьДокументНаСервере(); Иначе Возврат; КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗаполнитьДокументНаСервере(); Для каждого СтрокаТЧ из Объект.Спецификация.НоменклатураДокумента Цикл Объект.Контрагент = Объект.Спецификация.Контрагент; НоваяСтрока = Объект.Реализация.Добавить(); НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура; НоваяСтрока.КоличествоТонн = СтрокаТЧ.КоличествоТонн; НоваяСтрока.ЦенаСНДС = СтрокаТЧ.Цена ; НоваяСтрока.Сумма = СтрокаТЧ.Сумма ; КонецЦикла; КонецПроцедуры |
Объект.Реализация.Очистить() рекомендуется выполнять так же на сервере, как и остальной алгоритм заполнения. Это снизит объем передачи данных с клиента на сервер |
7.Спасибо за совет. Перенесу на сервер. |
Текущее время: 11:42. Часовой пояс GMT +3. |