Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Заполнение дока на основании другого (http://forums.kuban.ru/f1040/zapolnenie_doka_na_osnovanii_drugogo-2715198.html)

GODed 13.06.2012 11:26

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



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

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

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

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


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

bma1 13.06.2012 11:44

2(0) Если это работает и сам понимаешь, как это работает - значит уже хорошо.

GODed 13.06.2012 11:53

Да я походу тут сильно извращаюсь.
Подскажите а как то так можно сделать:
Процедура СпецификацияПриИзменении(Элемент)
ЗаполнитьДокументНаСервере(Объект);
КонецПроцедуры

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

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

Выдает ошибку Нельзя изменять поле, содержащее объект данных формы.

Uho 13.06.2012 13:21

2-GODed > Основной реквизит формы (Объект) доступен на сервере

GODed 13.06.2012 13:27

Разобрался все оказалось еще проще :)

med 13.06.2012 13:28

4-GODed > И как ?

GODed 13.06.2012 14:07

&НаКлиенте
Процедура СпецификацияПриИзменении(Элемент)
Ответ = Вопрос("Заполнить документ на основании спецификации. ", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
Объект.Реализация.Очистить();
ЗаполнитьДокументНаСервере();
Иначе
Возврат;
КонецЕсли;

КонецПроцедуры

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

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


КонецЦикла;


КонецПроцедуры

Lexusss 13.06.2012 14:12

Объект.Реализация.Очистить() рекомендуется выполнять так же на сервере, как и остальной алгоритм заполнения. Это снизит объем передачи данных с клиента на сервер

GODed 13.06.2012 14:15

7.Спасибо за совет. Перенесу на сервер.


Текущее время: 11:42. Часовой пояс GMT +3.