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


Ответ
 
LinkBack Опции темы Опции просмотра
Старый 22.11.2006, 16:33   #1
Пользователи
 
Регистрация: 19.11.2006
Сообщений: 14
По умолчанию

Здравствуйте!
как установить значение реквизита нового объекта.

пользователь авторизируется в сисетме. система его ассоциирует с неким контрагентм. пользователь создает заказ. При вводе нового документа, реквизит "Контрагент" должен заполнится автоматически.

Как это сделать? уже какой час бьюсь :no: и никак...

:help: :help: :help:

Значение, как описано на эом формуме, элемнту (TextBox) присваиваю? когда следом ухожу в Page_PreRender зхначение из реквизита благополучно исчезает.




Siberian вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
22.11.2006, 16:33
Техник
реклама
По умолчанию

Старый 23.11.2006, 05:57   #2
Mad
Пользователи
 
Регистрация: 20.07.2006
Сообщений: 168
По умолчанию

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

Там можешь на знакомом языке прописывать что угодно
Mad вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 23.11.2006, 08:08   #3
Пользователи
 
Регистрация: 19.11.2006
Сообщений: 14
По умолчанию

выдает ошибку

Неизвестное имя. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))

не хочет обращаться в процедуру.

а непосредственно средствами С#, как это сделать?
Siberian вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 23.11.2006, 08:28   #4
Mad
Пользователи
 
Регистрация: 20.07.2006
Сообщений: 168
По умолчанию

А ты просто код скопировал?
Mad вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 23.11.2006, 08:40   #5
Пользователи
 
Регистрация: 19.11.2006
Сообщений: 14
По умолчанию

нет конечно!

разобрался. Спасибо! я dll не поменял при обновлении ИБ.

а как сделать заполнение реквизитов, которые не должны отображаться на форме.

кстати, перестал заполняться номер и дата документа. я правильно понимаю что в указанной процедуре надо все и устанавливать?
Siberian вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 23.11.2006, 09:05   #6
Mad
Пользователи
 
Регистрация: 20.07.2006
Сообщений: 168
По умолчанию

Цитата:
а как сделать заполнение реквизитов, которые не должны отображаться на форме.
Первым делом глянь сюда

Заполнение реквизитов, которые не должны выводиться на форме можешь сделать:
1. В той же процедуре
2. В стандартной обработке событий 1С например ПередЗаписью
3. В момент, когда данные присутствуют в датасорсе - через dataSet и его таблицы
4. Получив ComObject объекта (документа, справочника...) через V8.Call(, , ), при этом не забывая высвобождать комобъект (см. сюды)

Кажись всё. Думай :x:
Mad вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 23.11.2006, 09:17   #7
Пользователи
 
Регистрация: 19.11.2006
Сообщений: 14
По умолчанию

Цитата:
Понял правильно



Первым делом глянь сюда

Заполнение реквизитов, которые не должны выводиться на форме можешь сделать:
1. В той же процедуре
2. В стандартной обработке событий 1С например ПередЗаписью
3. В момент, когда данные присутствуют в датасорсе - через dataSet и его таблицы
4. Получив ComObject объекта (документа, справочника...) через V8.Call(, , ), при этом не забывая высвобождать комобъект (см. сюды)

Кажись всё. Думай :x:

1. В той же процедуре, имеется ввиду в .Net'е.? Если процедура в модуле 1С - устанавливается, когда реквизит вынесен на форму веб-приложения. как только элемента управления нет или он невидимый, записывается с пустым значением.
2. как бы мне ее отхватить?
3. это не совсем понял. через дата сет говорит что таблица с индексом 0 не найдена.
4. Аналогично №1.
Siberian вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 23.11.2006, 09:33   #8
Mad
Пользователи
 
Регистрация: 20.07.2006
Сообщений: 168
По умолчанию

Цитата:
3. это не совсем понял. через дата сет говорит что таблица с индексом 0 не найдена.
А посмотри отладчиком на разных стадиях (в разных событиях) как себя это чудо чуйствует. Если что - пни его через ItemDataSource.GetDataFromForm(). Когда закончишь шаманить, не забудь ItemDataSource.SetDataToForm();
Mad вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 23.11.2006, 13:42   #9
Пользователи
 
Регистрация: 19.11.2006
Сообщений: 14
По умолчанию

:clap: Спасибо, Mad! :x:

Заработало!
Решение:

в процедуру "перед записью" ItemDataSourse поставил код присвоения реквизитов:

ItemDataSource.dataSet.Tables[0].Rows[0]["Заказчик"] = (ObjectRef)Заказчикссылка;

и все. Причем, НЕ ОБЯЗАТЕЛЬНО:
"ItemDataSource должен содержать ВСЕ (!!!) реквизиты объекта"

да, еще установил свойство visible = false у невидимых реквизитов.

по другому не пробовал.

Mad - респект!!! :up:
Siberian вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 30.11.2006, 16:42   #10
Пользователи
 
Регистрация: 04.08.2006
Сообщений: 18
По умолчанию

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

Там можешь на знакомом языке прописывать что угодно
А можно ли подобным образом вызвать экспортную процедуру модуля документа только например по клику на кнопке. Мне нужно, что бы по клику выполнились определенные рассчетные операции и заполнилась таблица на форме документа, а не хочется эту операцию писать в VS. Там сложные расчеты.
Код:
private void btnCalculate_Click(object sender, System.EventArgs e)
{
****ItemDataSource.GetDataFromForm();
****bool isOpen = ItemDataSource.Connection.State == ConnectionState.Open;
****if (!isOpen)
********ItemDataSource.Connection.Open();
****try
****{
********_1C.V8.Data.V8.Call(ItemDataSource.Connection, (ComObject) ??????????, "ПересчитатьДанныеПоСчетчикам","");
********ItemDataSource.SetDataToForm();
****}
****finally
****{
********if (!isOpen)
************ItemDataSource.Connection.Close();
****}
}
Что нужно подставить вместо и вообще возможно ли это осуществить или прийдется писать код в C#?
Xelon вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Ответ


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

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

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



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


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