Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Чтение из МногострочнойЧасти (число прочтений - 3759 )
mihast
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 18. Октября 2007
Чтение из МногострочнойЧасти
05. Августа 2008 :: 08:11
Печать  
В документе в МногострочнойЧасти есть вычисляемые поля, которые нельзя получить через ЗагрузитьТабличнуюЧасть. Как мне их считать в ТЗ ?

Код
Выбрать все
// список реквизитов табличной части (колонок)
СпАтр = СоздатьОбъект("СписокЗначений");
КолАтр = ФормаРасш.КоличествоАтрибутов() - 1;
Для ъ = 0 По КолАтр Цикл
	Атр_ = ФормаРасш.ПолучитьАтрибут(ъ);
	ТипАтр_ = Атр_.Тип;
	Если (ТипАтр_ <> 5) и (ТипАтр_ <> 9) Тогда
		Продолжить;
	КонецЕсли;
	СпАтр.ДобавитьЗначение(Атр_.Идентификатор, ъ);
КонецЦикла;

ТЗ_.УдалитьСтроки();
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
	ТЗ_.НоваяСтрока();
	Тс=ТЗ_.КоличествоСтрок();
	АктивизироватьСтроку(Тс);

	Для ъ=1 По СпАтр.РазмерСписка() Цикл
		Колонка=СпАтр.ПолучитьЗначение(ъ, НомерКолонки);
		Если Колонка="НомерСтроки" Тогда
			Продолжить;
		КонецЕсли;
		Атр_ = ФормаРасш.ПолучитьАтрибут(Число(НомерКолонки));
		Если Атр_.Видимость=0 Тогда
			Продолжить;
		КонецЕсли;
		ТЗ_.УстановитьЗначение(Тс, Колонка, Атр_.Значение);
	КонецЦикла;
КонецЦикла;

ТЗ_.ВыбратьСтроку();
 



Во всех строчках ТЗ_ значение из одной и той же строки МногострочнойЧасти документа.

Помогите ! Что я не так делаю ?
« Последняя редакция: 05. Августа 2008 :: 09:29 - mihast »  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Чтение из МногострочнойЧасти
Ответ #1 - 06. Августа 2008 :: 05:54
Печать  
считать формулу
и при заполении ТЗ вычислить эти значения.
в МНЧ их вообще-то нету.
Этож вычисляемые колонки.
  
Наверх
 
IP записан
 
mihast
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 18. Октября 2007
Re: Чтение из МногострочнойЧасти
Ответ #2 - 08. Августа 2008 :: 06:51
Печать  
varelchik писал(а) 06. Августа 2008 :: 05:54:
считать формулу
и при заполении ТЗ вычислить эти значения.
в МНЧ их вообще-то нету.
Этож вычисляемые колонки.


Ты не прав. У меня все ВЫЧИСЛЯЕМЫЕ колонки прекрасно считываются через ФормЭкс. Беда в том, что нет метода для получения значения атрибута ЛЮБОЙ строки МногострочнойЧасти.
Т.е. надо сначала как-то хитро активизировать строку МногострочнойЧасти, а потом уже считывать из нее значения через ФормаРасш.ПолучитьАтрибут(ИдентификаторКолонки).Значение

Если такой метод ? Планируется ли его сделать ?

Что-Нибудь типа этого:

Результат = ФормаРасш.ПолучитьЗначениеМЧ(строкаМЧ, Идентификатор_НомерАтрибутаНаФорме);
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Чтение из МногострочнойЧасти
Ответ #3 - 08. Августа 2008 :: 07:21
Печать  
Попробуй второй цикл сделать вот так:
Код
Выбрать все
Для Тс = 1 по КоличествоСтрок() Цикл
	АктивизироватьСтроку(Тс);
 

  

FormEx developer
Наверх
www  
IP записан
 
mihast
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 18. Октября 2007
Re: Чтение из МногострочнойЧасти
Ответ #4 - 08. Августа 2008 :: 08:27
Печать  
Цитата:
Попробуй второй цикл сделать вот так:
Код
Выбрать все
Для Тс = 1 по КоличествоСтрок() Цикл
	АктивизироватьСтроку(Тс);
 



Не помогает Печаль  Точно так же все строки ТЗ считываются с одной (? активной ?)
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Чтение из МногострочнойЧасти
Ответ #5 - 08. Августа 2008 :: 08:48
Печать  
mihast писал(а) 08. Августа 2008 :: 08:27:
Цитата:
Попробуй второй цикл сделать вот так:
Код
Выбрать все
Для Тс = 1 по КоличествоСтрок() Цикл
	АктивизироватьСтроку(Тс);
 



Не помогает Печаль  Точно так же все строки ТЗ считываются с одной (? активной ?)

АЛьФ перепутал маленько. Юзай ПолучитьСтрокуПоНомеру( Тс );
  
Наверх
ICQ  
IP записан
 
mihast
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 18. Октября 2007
Re: Чтение из МногострочнойЧасти
Ответ #6 - 08. Августа 2008 :: 09:03
Печать  
dnp писал(а) 08. Августа 2008 :: 08:48:
mihast писал(а) 08. Августа 2008 :: 08:27:
Цитата:
Попробуй второй цикл сделать вот так:
Код
Выбрать все
Для Тс = 1 по КоличествоСтрок() Цикл
	АктивизироватьСтроку(Тс);
 



Не помогает Печаль  Точно так же все строки ТЗ считываются с одной (? активной ?)

АЛьФ перепутал маленько. Юзай ПолучитьСтрокуПоНомеру( Тс );


В моем примере (первый пост) есть и АктивизироватьСтроку и ВыбратьСтроки(), ПолучитьСтроку()

ЭТО не помогает !!!! Попробовал, конечно, ПолучитьСтрокуПоНомеру() результат тот же.

Проблема наверное в ФормЭксе. Что-то там не так срабатывает для чтения СТРОК МногострочнойЧасти по имени или номеру реквизита РасширеннойФормы.
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Чтение из МногострочнойЧасти
Ответ #7 - 08. Августа 2008 :: 12:25
Печать  
Конечно же дело в FormEx! Надо срочно отказаться от этой глючной компоненты!

Вот такой код у меня выдает по всем строкам значение из вычисляемой колонки:
Код
Выбрать все
// "Тест" - идентификатор колонки с вычисляемым значением
	Для инд = 1 По КоличествоСтрок() Цикл
		ПолучитьСтрокуПоНомеру(инд);
		Сообщить("Значение = "+Тест);
	КонецЦикла;
 


И без всяких кривых компонент.
  

FormEx developer
Наверх
www  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Чтение из МногострочнойЧасти
Ответ #8 - 08. Августа 2008 :: 12:26
Печать  
mihast писал(а) 05. Августа 2008 :: 08:11:
В документе в МногострочнойЧасти есть вычисляемые поля, которые нельзя получить через ЗагрузитьТабличнуюЧасть. Как мне их считать в ТЗ ?


Сразу говорю я не читал код который ты написал но вот тебе путь к нахождению выхода:
1. Понадобиться 1С++ (желательно 3.х я сам его юзаю и всем советую)
2. FormEx последний (91 вроде???)
3. Немного смекалки и знаний 1С++, 1С и т.д.

И так порядок действий:
1. Через Получить атрибут получаешь объект "АтрибутФормы"
Код
Выбрать все
Для НомерАтрибута = 1 По РасшФормы.КоличествоАтрибутов() - 1 Цикл
	АтрФормы = РасшФормы.ПолучитьАтрибут(НомерАтрибута); 


2. У атрибута спрашиваешь кто он:
АтрФормы.Тип = 5 - реквизит документа, смело марш в метаданные чтобы узнать Тип, Вид и т.д.
АтрФормы.Тип = 9 - реквизит - вычисляемая колонка, через объект АтрибутФормы узнаешь его Идентификатор, Формулу. Если Идентификатор пуст тогда смотри сам я просто присваиваю ему какой нить типа Строка("Идентификатор_"+НомерАтрибута)
3. Все что узнал выше записываешь на всякий случай в ИТЗСтруктураМногострочнойЧасти (и формулу и вообще все что можно узнать), добавь флаг ИнформационноеПоле и если тип = 9, ставь 1, потом пригодится
4. В ИТЗ добавь индекс по идентификатору чтобы быстрее искать было
5. Отдельно в АссоциативныйВектор (или хоть в СЗ) добавь Идентификатор колонок с типом = 9 (чтобы информационные колонки отдельно были)
6. Далее создаешь ТЗ в которую будешь выгружать многострочную часть, ТОЛЬКО НЕ ВЫГРУЗКОЙ
7. Через Контекст или напрямую (если не КОП) перебираешь строки (так лучше не совсем быстрее но достаточно чтобы не париться Выгружать или перебирать)
8. В каждой полученной строке заполняешь ТЗ по атрибутам с типом 5 (вот тут по ИТЗСтруктура перебираешь колонки и соответственно просто пропускаешь те которые Информационные), не переходя на следующую строку через объект ВыполняемыйМодуль рассчитываешь значение это ячейки и вставляешь ее в ТЗ
9. Собственно все... если все верно сделаешь будет тебе счастье  Подмигивание

Кстати в репозитории в свое время создавал тему про подмену  многострочной части на табличное поле, вот туда тыркнись там есть и КОП и приведенный выше механизм там полностью реализован. Правда не помню используется ли там ИТЗ и Вектор,  давно не обновлял... да наверное если никому не надо и не буду обновлять  Очень довольный
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Чтение из МногострочнойЧасти
Ответ #9 - 08. Августа 2008 :: 12:27
Печать  
Кстати Альф написал еще более простой способ
Ушел думать  Подмигивание

Пы.Сы. метод Альфа лучшее, быстрее по крайней мере, не уходит время на дополнительные объекты и т.п., но увы не универсален, ибо не у всех колонок есть Идентификатор... автор сам решай что делать будешь
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
mihast
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 18. Октября 2007
Re: Чтение из МногострочнойЧасти
Ответ #10 - 09. Августа 2008 :: 03:58
Печать  
vandalsvq писал(а) 08. Августа 2008 :: 12:26:
Сразу говорю я не читал код который ты написал

Огромное спасибо за такой подробный ответ. Кстати, почему-то мне кажется, что на его написание ушло времени гораздо больше, чем понадобилось бы на просмотр моего кода Подмигивание

Именно похожим образом я и делаю. Проверяю Тип Атрибута на 5 или 9, создаю СписокЗначений, правда, а не Вектор.

Речь в моем посте о том ЕСТЬ ли метод ЧТЕНИЯ значений атрибутов МногострочнойЧасти. По факту данные ЧИТАЮТСЯ. Но не со всех строк, а только с активной. И я не знаю как программно изменить активную строку в МногострочнойЧасти так, чтобы ФормЭкс считал ее данные. АктивироватьСтроку и ПолучитьСтрокуПоНомеру в данном случае не работают.

У меня вопрос к знатокам ФормЭкс: может есть какой недокументированный метод ? Можно ли добавить новый метод, посволяющий через РасширенныйАтрибутФормы считывать значения многострочной части ?

Спасибо про наводку пошел читать репозитарий.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Чтение из МногострочнойЧасти
Ответ #11 - 09. Августа 2008 :: 07:31
Печать  
mihast писал(а) 09. Августа 2008 :: 03:58:
vandalsvq писал(а) 08. Августа 2008 :: 12:26:
Сразу говорю я не читал код который ты написал

Огромное спасибо за такой подробный ответ. Кстати, почему-то мне кажется, что на его написание ушло времени гораздо больше, чем понадобилось бы на просмотр моего кода Подмигивание

Именно похожим образом я и делаю. Проверяю Тип Атрибута на 5 или 9, создаю СписокЗначений, правда, а не Вектор.


Ага... потом я прочитал и понял все Улыбка

mihast писал(а) 09. Августа 2008 :: 03:58:
Речь в моем посте о том ЕСТЬ ли метод ЧТЕНИЯ значений атрибутов МногострочнойЧасти. По факту данные ЧИТАЮТСЯ. Но не со всех строк, а только с активной. И я не знаю как программно изменить активную строку в МногострочнойЧасти так, чтобы ФормЭкс считал ее данные. АктивироватьСтроку и ПолучитьСтрокуПоНомеру в данном случае не работают.


И все таки глянь в репозитории там при редактировании строки потом перечитывается только строка которую редактировали. И значения рассчитываются только ее, опять же АктивизироватьСтроку, ПолучитьСтрокуПоНомеру - то что доктор прописал
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
mihast
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 18. Октября 2007
Re: Чтение из МногострочнойЧасти
Ответ #12 - 09. Августа 2008 :: 08:04
Печать  
vandalsvq писал(а) 09. Августа 2008 :: 07:31:
И все таки глянь в репозитории там при редактировании строки потом перечитывается только строка которую редактировали. И значения рассчитываются только ее, опять же АктивизироватьСтроку, ПолучитьСтрокуПоНомеру - то что доктор прописал


В том то и дело, что АКТИВНУЮ строку ФормЭкс считывает на ура. Но мне не понятно как это программно менять. Какие-то там траблы в ФормЭксе, что он пока не может это сделать. Если Альф не научит, то буду делать как у тебя в "ПоставщикеДанных" перечитывать формулу, входить в контекст, вычислять... Блин... заморочки на пустом мест  Злой
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Чтение из МногострочнойЧасти
Ответ #13 - 09. Августа 2008 :: 08:07
Печать  
mihast писал(а) 09. Августа 2008 :: 08:04:
Если Альф не научит

Мне продублировать свое сообщение или сам прочитаешь его чуть выше?
  

FormEx developer
Наверх
www  
IP записан
 
mihast
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 18. Октября 2007
Re: Чтение из МногострочнойЧасти
Ответ #14 - 09. Августа 2008 :: 12:36
Печать  
2 Альф:

Действительно, можно и без ФормЭкса все прочитать !  Улыбка

Огромное спасибо ! (во всех моих документах у колонок есть идентификаторы)
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать