Автоматическое получение списка товаров в накладной.

Цель: в тот момент, когда пользователь выберет нужный заказ на форме редактирования накладной, необхоодимо создать детейлы (ЗаписьВНакладной) на основе того, что указано в заказе.

1.Добавить Заказ в представление строки заказа, убрать галочку в поле Видимость.

2.Перегенерировать объекты. 3.в NakladnayaE.aspx.cs прописать:

using ICSSoft.STORMNET.Business;
using ICSSoft.STORMNET.FunctionalLanguage;
using ICSSoft.STORMNET.Windows.Forms;

4.Далее исправить метод PreApplyToControls следующим образом:

protected override void PreApplyToControls()
{
	if (IsPostBack && (DataObject == null || DataObject.GetStatus(true) == ObjectStatus.Created))
	{
		var заказ = ctrlЗаказ.SelectedMasterPK;
		ctrlЗаказ.MasterViewName = Заказ.Views.ЗаказL.Name;

		var langdef = ExternalLangDef.LanguageDef;
		var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(СтрокаЗаказа), СтрокаЗаказа.Views.СтрокаЗаказаE);
		lcs.LimitFunction = langdef.GetFunction(langdef.funcEQ,
										new VariableDef(langdef.GuidType, Information.ExtractPropertyPath<СтрокаЗаказа>(x => x.Заказ)), заказ);
		var строкиЗаказа = DataServiceProvider.DataService.LoadObjects(lcs);

		foreach (var s in строкиЗаказа)
		{
			var строкаЗаказа = (СтрокаЗаказа)s;
			DataObject.ЗаписьВНакладной.Add(new ЗаписьВНакладной { Количество = строкаЗаказа.Количество, Товар = строкаЗаказа.Товар });
		}
	}
}

В данном методе выполняется проверка, произошел ли PostBack, после чего с помощью сервиса данных подгружаются детейлы для класса Заказ (в подгружаемом представлении есть детейлы), так как по умолчанию они не загружаются. После загрузки в цикле формируются и заполняются детейлы. Не забываем изменить значение параметра flexberryautogenerated на false, чтобы форма не потерять изменения при перегенерации.

5.Для того, чтобы метод PreApplyToControls сработал сразу после выбора значения в лукапе, необходимо добавить обработчик события change лукапа, в котором вызвать PostBack. В NakladnayaE.aspx прописать:

<script type="text/javascript">
	$('#<%= ctrlЗаказ.ClientID %>').on('change', function (e, d) {
		$.ics.postBack('', '');
	});
</script>

6.Не забыть в каждом изменяемом файле изменить значение параметра flexberryautogenerated, чтобы избежать потери изменений.

Перейти