К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Заполнение дока на основании другого

Гость
0 - 13.06.2012 - 11:26
Есть документ Реализация, В нем имеется реквизит спецификация (Документ.СпецификацияСсылка).Как сделать чтобы док Реализация заполнялся по данным выбранного документа Спецификация.
Создаем процедуры ПриИзменении реквизита Спецификация. В данной обработки я должен указать функцию которая будет на сервере делать запрос по доку Спецификация



&НаСервере
Функция ЗаполнитьДокументНаСервере(Спецификация);
ТЗ = Новый ТаблицаЗначений;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СпецификацияНоменклатураДокумента.Ссылка.Контраген т,
| СпецификацияНоменклатураДокумента.Номенклатура,
| СпецификацияНоменклатураДокумента.КоличествоТонн,
| СпецификацияНоменклатураДокумента.Цена,
| СпецификацияНоменклатураДокумента.Сумма
|ИЗ
| Документ.Спецификация.НоменклатураДокумента КАК СпецификацияНоменклатураДокумента
|ГДЕ
| СпецификацияНоменклатураДокумента.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Спецификация);

Результат = Запрос.Выполнить();
ТЗ = Результат.Выгрузить();
Возврат ТЗ;

КонецФункции


Далее на основании ТЗ заполняем документ Реализация.
Так делается или я Извращаюсь сильно и есть гораздо проще способ?



1 - 13.06.2012 - 11:44
2(0) Если это работает и сам понимаешь, как это работает - значит уже хорошо.
Гость
2 - 13.06.2012 - 11:53
Да я походу тут сильно извращаюсь.
Подскажите а как то так можно сделать:
Процедура СпецификацияПриИзменении(Элемент)
ЗаполнитьДокументНаСервере(Объект);
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьДокументНаСервере(Документ);

Для каждого СтрокаТЧ из Документ.Спецификация.НоменклатураДокумента Цикл
НоваяСтрока = Документ.Реализация.Добавить();
НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура;
..................
КонецЦикла;
КонецПроцедуры

Выдает ошибку Нельзя изменять поле, содержащее объект данных формы.
Uho
3 - 13.06.2012 - 13:21
2-GODed > Основной реквизит формы (Объект) доступен на сервере
Гость
4 - 13.06.2012 - 13:27
Разобрался все оказалось еще проще :)
med
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.Спасибо за совет. Перенесу на сервер.


К списку вопросов






Copyright ©, Все права защищены