компьютерный форум
Вернуться   Компьютерный форум > Программирование и вебстроительство > 1C (Все версии) > WEB расширение 1С 8.0


Ответ
 
LinkBack Опции темы Опции просмотра
Старый 02.09.2009, 08:41   #1
Пользователи
 
Регистрация: 16.07.2009
Сообщений: 26
По умолчанию

Здравствуйте.
Есть ListForm со списком заказов Контрагента. При нажатии создать новый документ должны автоматом заполниться поля Контрагент, Грузополучатель и Адрес доставки.
Как это сделать, только полное описание надо. Я недавно занимаюсь web.

В итоге после нажатия "Создать новый документ" должна открыться форма заполнения нового документа с уже заполненными полями Дата, Номер, Контрагент, Грузополучатель и Адрес доставки. Эти поля запрещены на изменение.

Данные о пользователе берутся исходя из его имени входа ИМЯ=НАИМЕНОВАНИЕ КОНТРАГЕНТА с помощью command.Parameters.Add("СсылНаим1", Context.User.Identity.Name);

Как полностью все написать не понимаю.





avi-murom вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
02.09.2009, 08:41
Техник
реклама
По умолчанию

Старый 02.09.2009, 16:48   #2
Пользователи
 
Регистрация: 04.12.2006
Сообщений: 119
По умолчанию

Цитата:
Здравствуйте.
Есть ListForm со списком заказов Контрагента. При нажатии создать новый документ должны автоматом заполниться поля Контрагент, Грузополучатель и Адрес доставки.
Как это сделать, только полное описание надо. Я недавно занимаюсь web.

В итоге после нажатия "Создать новый документ" должна открыться форма заполнения нового документа с уже заполненными полями Дата, Номер, Контрагент, Грузополучатель и Адрес доставки. Эти поля запрещены на изменение.

Данные о пользователе берутся исходя из его имени входа ИМЯ=НАИМЕНОВАНИЕ КОНТРАГЕНТА с помощью command.Parameters.Add("СсылНаим1", Context.User.Identity.Name);

Как полностью все написать не понимаю.
http://windowsforum.ru/index.php?showtopic=9006
Юрич вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 03.09.2009, 13:06   #3
Пользователи
 
Регистрация: 16.07.2009
Сообщений: 26
По умолчанию

Читал.

private void ItemDataSource_OnInitObject(object source, _1C.V8.WebControls.V8ItemDataSourceInitObjectEvent Args e)
{
V8.Call(e.NewObject, "НачальноеЗаполнениеОбъекта", "");
}
НачальноеЗаполнениеОбъекта - функция в модуле объекта (документа), экспорт

В каком месте это указать указать? В форме, которая создает новую или в открывшейся новой?
Что значит "НачальноеЗаполнениеОбъекта"? В заказах нет такого и добавлять не хотелось бы.
Нужно заполнении в форме.

Цитирую "Значение, как описано на эом формуме, элемнту (TextBox) присваиваю? когда следом ухожу в Page_PreRender зхначение из реквизита благополучно исчезает." Не нашел этого.
avi-murom вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 04.09.2009, 21:32   #4
Пользователи
 
Регистрация: 04.12.2006
Сообщений: 119
По умолчанию

Цитата:
Читал.

private void ItemDataSource_OnInitObject(object source, _1C.V8.WebControls.V8ItemDataSourceInitObjectEvent Args e)
{
V8.Call(e.NewObject, "НачальноеЗаполнениеОбъекта", "");
}
НачальноеЗаполнениеОбъекта - функция в модуле объекта (документа), экспорт

В каком месте это указать указать? В форме, которая создает новую или в открывшейся новой?
Что значит "НачальноеЗаполнениеОбъекта"? В заказах нет такого и добавлять не хотелось бы.
Нужно заполнении в форме.

Цитирую "Значение, как описано на эом формуме, элемнту (TextBox) присваиваю? когда следом ухожу в Page_PreRender зхначение из реквизита благополучно исчезает." Не нашел этого.
Если исчезает, то логично будет заполнять в Page_PreRender.
И помимо Value не забыть про Presentation у текстбоксов с типами ссылок.
Юрич вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 09.09.2009, 08:21   #5
Пользователи
 
Регистрация: 16.07.2009
Сообщений: 26
По умолчанию

Цитата:
Если исчезает, то логично будет заполнять в Page_PreRender.
И помимо Value не забыть про Presentation у текстбоксов с типами ссылок.
ВОТ СОСТРЯПАЛ:

string b = "";
if (Контрагент.Presentation == B)
{
V8DbSelectCommand command = new V8DbSelectCommand();
command.Connection = ItemDataSource.Connection;
command.CommandType = CommandType.Text;
command.CommandText = @"ВЫБРАТЬ КонтактнаяИнформация.Объект.Наименование, КонтактнаяИнформация.Представление ИЗ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация ГДЕ КонтактнаяИнформация.Объект.Наименование = &СсылНаим1 И КонтактнаяИнформация.Вид.Наименование = &АдресДоставки";
command.Parameters.Add("СсылНаим1", Context.User.Identity.Name);
command.Parameters.Add("АдресДоставки", "Юридический адрес контрагента");
command.Connection.Open();
using (V8DataReader reader = (V8DataReader)command.ExecuteReader())
{
while (reader.Read())
{
Грузополучатель.Value = reader.GetValue(0);
Грузополучатель.Presentation = reader.GetValue(0).ToString();
АдресДоставки.Value = reader.GetValue(1);
АдресДоставки.Presentation = reader.GetValue(1).ToString();
}
}
command.Connection.Close();
command.Connection = ItemDataSource.Connection;
command.CommandType = CommandType.Text;
command.CommandText = @"ВЫБРАТЬ Контрагенты.Ссылка.Наименование ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Наименование = &СсылНаим2";
command.Parameters.Add("СсылНаим2", "Азот-Взрыв ЗАО");
command.Connection.Open();
using (V8DataReader reader = (V8DataReader)command.ExecuteReader())
{
while (reader.Read())
{
Контрагент.Value = reader.GetValue(0);
Контрагент.Presentation = reader.GetValue(0).ToString();
}
}
command.Connection.Close();
}

После нажатия кнопки записать в 1С заказ благополучно записывается без всего этого.
Понимаю, что у меня нет связи со справочниками, но как это сделать не знаю.
avi-murom вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 09.09.2009, 12:53   #6
Пользователи
 
Регистрация: 16.07.2009
Сообщений: 26
По умолчанию

ВСЕ. Сделал. Сам сдурил.

if (Контрагент.Presentation == B)
{
V8DbSelectCommand command = new V8DbSelectCommand();
command.Connection = ItemDataSource.Connection;
command.CommandType = CommandType.Text;
command.CommandText = @"ВЫБРАТЬ КонтактнаяИнформация.Объект, КонтактнаяИнформация.Объект.Наименование, КонтактнаяИнформация.Представление ИЗ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация ГДЕ КонтактнаяИнформация.Объект.Наименование = &СсылНаим1 И КонтактнаяИнформация.Вид.Наименование = &АдресДоставки";
command.Parameters.Add("СсылНаим1", Context.User.Identity.Name);
command.Parameters.Add("АдресДоставки", "Юридический адрес контрагента");
command.Connection.Open();
using (V8DataReader reader = (V8DataReader)command.ExecuteReader())
{
while (reader.Read())
{
Грузополучатель.Value = reader.GetValue(0);
Грузополучатель.Presentation = reader.GetValue(1).ToString();
АдресДоставки.Value = reader.GetValue(2);
АдресДоставки.Presentation = reader.GetValue(2).ToString();
}
}

command.Connection.Close();
command.Connection = ItemDataSource.Connection;
command.CommandType = CommandType.Text;
command.CommandText = @"ВЫБРАТЬ Контрагенты.Ссылка, Контрагенты.Ссылка.Наименование, Контрагенты.ОсновнойДоговорКонтрагента, Контрагенты.ОсновнойДоговорКонтрагента.Наименовани е ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Наименование = &СсылНаим2";
command.Parameters.Add("СсылНаим2", "Азот-Взрыв ЗАО");
command.Connection.Open();
using (V8DataReader reader = (V8DataReader)command.ExecuteReader())
{
while (reader.Read())
{
Контрагент.Value = reader.GetValue(0);
Контрагент.Presentation = reader.GetValue(1).ToString();
ДоговорКонтрагента.Value = reader.GetValue(2);
ДоговорКонтрагента.Presentation = reader.GetValue(3).ToString();
}
}

Теперь еще два вопроса.
1. Как в V8EditGrid сделать поле и его проверку ТОЛЬКО ЦИФРА с тремя знаками после запятой?
Дело в том, что частенько при вводе количества вместо запятой ставят точку и в итоге документ не записывается.
2. Есть процедура в V8EditGrid автоматически подставляющая единицу измерения для номенклатуры:

private void InitializeComponent()
{
this.V8EditGrid1.ValueChanged += new _1C.V8.WebControls.V8EditGridValueChangedHandler(t his.V8EditGrid1_ValueChanged);
}

protected void V8EditGrid1_ValueChanged(object sender, V8EditGridValueChangedEventArgs eventArgs)
{
V8DbSelectCommand command = new V8DbSelectCommand();
command.Connection = ItemDataSource.Connection;
command.CommandType = CommandType.Text;
command.CommandText = @"ВЫБРАТЬ БазоваяЕдиницаИзмерения.Ссылка, БазоваяЕдиницаИзмерения.Представление ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Наименование = &СсылНаим";
command.Parameters.Add("СсылНаим", ((V8EditGridCell)V8EditGrid1.Items[V8EditGrid1.SelectedIndex].Cells[1]).Presentation);
command.Connection.Open();
using (V8DataReader reader = (V8DataReader)command.ExecuteReader())
{
while (reader.Read())
{
((V8EditGridCell)V8EditGrid1.Items[V8EditGrid1.SelectedIndex].Cells[4]).Value = reader.GetValue(0);
((V8EditGridCell)V8EditGrid1.Items[V8EditGrid1.SelectedIndex].Cells[4]).Presentation = reader.GetValue(1).ToString();
((V8EditGridCell)V8EditGrid1.Items[V8EditGrid1.SelectedIndex].Cells[2]).Presentation = "";
}
}
command.Connection.Close();
}

Все подставляет нормально, но при нажатии кнопки Записать обнуляется поле с единицами измерения.
avi-murom вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 09.09.2009, 20:08   #7
Пользователи
 
Регистрация: 04.12.2006
Сообщений: 119
По умолчанию


Теперь еще два вопроса.
1. Как в V8EditGrid сделать поле и его проверку ТОЛЬКО ЦИФРА с тремя знаками после запятой?
Дело в том, что частенько при вводе количества вместо запятой ставят точку и в итоге документ не записывается.
2. Есть процедура в V8EditGrid автоматически подставляющая единицу измерения для номенклатуры:
Все подставляет нормально, но при нажатии кнопки Записать обнуляется поле с единицами измерения.
[/quote]

Полагаю, что в обоих случаях надо принудительно указать тип данных в колонках.
Юрич вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 10.09.2009, 05:44   #8
Пользователи
 
Регистрация: 16.07.2009
Сообщений: 26
По умолчанию

Цитата:
Теперь еще два вопроса.
1. Как в V8EditGrid сделать поле и его проверку ТОЛЬКО ЦИФРА с тремя знаками после запятой?
Дело в том, что частенько при вводе количества вместо запятой ставят точку и в итоге документ не записывается.
2. Есть процедура в V8EditGrid автоматически подставляющая единицу измерения для номенклатуры:
Все подставляет нормально, но при нажатии кнопки Записать обнуляется поле с единицами измерения.
Полагаю, что в обоих случаях надо принудительно указать тип данных в колонках.
Для Количества установлено:

Available Nypes = decimal(15,3,NonNegative)
Type = decimal(15,3,NonNegative)
TypeRestruction = decimal(15,3,NonNegative)

В итоге после нажатия Записать при правильном вводе цифра записывается, при неправильном обнуляется. Но не выводится сообщения, что вместо точки поставлена запятая.

С единицей измерения такой фокус не прошел. При установке string вообще перестала что либо выводить.
avi-murom вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 10.09.2009, 12:36   #9
Пользователи
 
Регистрация: 16.07.2009
Сообщений: 26
По умолчанию

Ошибку на второй пункт нашел. Выбрал Базовую единицу измерения не из справочника Номенклатуры, а из справочника ЕдиницыИзмерения. И усе стало нормально прописываться и записываться. Може кому пригодится:

protected void V8EditGrid1_ValueChanged(object sender, V8EditGridValueChangedEventArgs eventArgs)
{
V8DbSelectCommand command = new V8DbSelectCommand();
command.Connection = ItemDataSource.Connection;
command.CommandType = CommandType.Text;
command.CommandText = @"ВЫБРАТЬ ЕдиницыИзмерения.Ссылка, ЕдиницыИзмерения.Наименование, ЕдиницыИзмерения.Коэффициент ИЗ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура ПО ЕдиницыИзмерения.Владелец = Номенклатура.Ссылка И ЕдиницыИзмерения.ЕдиницаПоКлассификатору = Номенклатура.БазоваяЕдиницаИзмерения ГДЕ ЕдиницыИзмерения.Владелец = &Наимен";
command.Parameters.Add("Наимен", ((V8EditGridCell)V8EditGrid1.Items[V8EditGrid1.SelectedIndex].Cells[1]).Value);
command.Connection.Open();
using (V8DataReader reader = (V8DataReader)command.ExecuteReader())
{
while (reader.Read())
{
((V8EditGridCell)V8EditGrid1.Items[V8EditGrid1.SelectedIndex].Cells[4]).Value = reader.GetValue(0);
((V8EditGridCell)V8EditGrid1.Items[V8EditGrid1.SelectedIndex].Cells[4]).Presentation = reader.GetValue(1).ToString();
((V8EditGridCell)V8EditGrid1.Items[V8EditGrid1.SelectedIndex].Cells[5]).Value = reader.GetValue(2);
((V8EditGridCell)V8EditGrid1.Items[V8EditGrid1.SelectedIndex].Cells[2]).Value = null;
((V8EditGridCell)V8EditGrid1.Items[V8EditGrid1.SelectedIndex].Cells[2]).Presentation = "";

ItemDataSource.GetDataFromForm();
}
}

command.Connection.Close();
}

Остался первый пункт. Как сообщить пользователю, что он вместо запятой поставил точку в поле Количество. Или преобразовать точку в запятую. В строке уже обрабатывается событие первой колонки. Может можно как-то обработать событие у третей колонки?
avi-murom вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 10.09.2009, 18:46   #10
Пользователи
 
Регистрация: 04.12.2006
Сообщений: 119
По умолчанию

Цитата:
Остался первый пункт. Как сообщить пользователю, что он вместо запятой поставил точку в поле Количество. Или преобразовать точку в запятую. В строке уже обрабатывается событие первой колонки. Может можно как-то обработать событие у третей колонки?
Наверно я бы тогда указал в колонке тип string, а затем перед записью данных переводил бы его в decimal, а заодно бы еще и менял точку на запятую, чтобы по любому было правильно.
Юрич вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.



Текущее время: 20:37. Часовой пояс GMT.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot
Content Relevant URLs by vBSEO 3.5.0 RC2