Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Не корректная работа с табличной частью докумета через контекст (число прочтений - 7001 )
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Не корректная работа с табличной частью докумета через контекст
06. Мая 2011 :: 12:36
Печать  
Столкнулся с ситуацией:
Имеется документ "X". Он является док. основанием для документа "Y". Причем заполнение реквизитов "Y" происходит из формы "X". Кусок модуля формы "X":
Код
Выбрать все
		ОткрытьФорму("Документ.Y",Конт,ТекущийДокумент());
		Конт.ДокументОснование=ТекущийДокумент();
		Конт.ДатаДок=ДатаДок;
		Конт.Фирма = Фирма;

		ВыбратьСтроки();
		Пока ПолучитьСтроку()=1 Цикл
			Конт.НоваяСтрока();
			Конт.Товар=Товар;
			Конт.Количество=КолВо;
		КонецЦикла;
 



При выполнении этого кода должна появиться форма нового док. "Y", с заполненными реквизитами шапки и с заполненной табличной частью.

При использовании 1С++ версии "1.8.1.6" все так и происходит.
При использовании 1С++ версии выше "2.5" (проверялось на "2.5.0.7","3.2.1.0","3.2.3.12") табличная часть не заполняется, при этом в отладчике после "Конт.НоваяСтрока();" метод "Конт.КоличествоСтрок()" возвращает "0". Использование "ВыгрузитьТабличнуюЧасть/ЗагрузитьТабличнуюЧасть" так же не дает результата.
Совершенно ясно, что можно переписать код "по правильному" - заполнение реквизитов делать в док "Y" - интересен сам факт того что табличная часть в данном случае не заполняется.  Озадачен
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #1 - 06. Мая 2011 :: 12:42
Печать  
Включи настройку ТурбоБЛ (или TurboBL).
Поиск по форуму или доке 1С++ тебе поможет
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #2 - 06. Мая 2011 :: 12:47
Печать  
Сейчас "3.2.3.12":
Информация о настройках:

EnableHookEventsGroupContext: 0
EnableCheckType: 0
EnableDebugging: 0
EnableOptimization: 1
EnableTableSourceTable: 1
EnableTurboBL: 1

Т.е., насколько я понимаю, - TurboBL включен...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #3 - 06. Мая 2011 :: 13:09
Печать  
формекс то загрузи, именно он исправляет ошибку недоступности табличной части при работе с контекстом документа.
а не 1cpp (у тебя в старой версии 1cpp формекс был встроен в неё, щас - это отдельная ВК)
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #4 - 06. Мая 2011 :: 13:13
Печать  
Eprst писал(а) 06. Мая 2011 :: 13:09:
формекс то загрузи, именно он исправляет ошибку недоступности табличной части при работе с контекстом документа.
а не 1cpp (у тебя в старой версии 1cpp формекс был встроен в неё, щас - это отдельная ВК)

ФормЕкс точно имеет эту фичу, но
ИМХО вроде в 1С++ эта фича также была встроена.
Неужели нет?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #5 - 06. Мая 2011 :: 13:15
Печать  
artbear писал(а) 06. Мая 2011 :: 13:13:
Неужели нет?


к сожалению, неа..
Улыбка
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #6 - 06. Мая 2011 :: 13:39
Печать  
хм.. ФормЕкс загрузил (версия "2.0.5.99")... ситуация не изменилась...  Печаль
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #7 - 06. Мая 2011 :: 13:42
Печать  
В чистом 1cpp вопрос решабелен с помощью скобок Система:: StartBatch / EndBatch.
Но лучше пошаманить с дизайном или реализацией.
По-моему, ЗагрузитьТабличнуюЧасть работает и без этого.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #8 - 06. Мая 2011 :: 13:46
Печать  
zar писал(а) 06. Мая 2011 :: 13:39:
хм.. ФормЕкс загрузил (версия "2.0.5.99")... ситуация не изменилась...  Печаль

Что-то не так у тебя Печаль
При простой загрузке ФормЕкс фича работы с таб.частью через контекст работает 100%
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #9 - 06. Мая 2011 :: 13:48
Печать  
Код
Выбрать все
		ОткрытьФорму("Документ.Y",Конт,ТекущийДокумент());
		Конт.ДокументОснование=ТекущийДокумент();
		Конт.ДатаДок=ДатаДок;
		Конт.Фирма = Фирма;

		ВремТЗ = СоздатьОбъект("ТаблицаЗначений");
		Конт.ВыгрузитьТабличнуюЧасть(ВремТЗ);

		ВыбратьСтроки();
		Пока ПолучитьСтроку()=1 Цикл
			ВремТЗ.НоваяСтрока();
			ВремТЗ.Товар=Товар;
			ВремТЗ.Количество=КолВо;
		КонецЦикла;

		Если ВремТЗ.КоличествоСтрок() > 0 Тогда
		    Конт.ЗагрузитьТабличнуюЧасть(ВремТЗ);
		КонецЕсли;

 



данный код так же не работает (ни без, ни с ФормЭксом)
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #10 - 06. Мая 2011 :: 13:50
Печать  
Ну ёпт..

Конт.Форма.Обновить(0); воткни в конец..

Наслаждайся.
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #11 - 06. Мая 2011 :: 13:57
Печать  
мда... я в коде не написал, но "Конт.Форма.Обновить();" после этого дела УЖЕ имеется... Улыбка т.е. не в этом дело... Печаль
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #12 - 06. Мая 2011 :: 14:08
Печать  
Как проверяешь, что строк нет ?

  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #13 - 06. Мая 2011 :: 14:08
Печать  
1) визуально
2) в отладчике
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #14 - 06. Мая 2011 :: 14:10
Печать  
в отладчике метод "Конт.НоваяСтрока()" никак не влияет на "Конт.КоличествоСтрок()"
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #15 - 06. Мая 2011 :: 14:18
Печать  
во втором варианте с ТЗ - после метода "Конт.ЗагрузитьТабличнуюЧасть(ВремТЗ)" (ВремТЗ не пустая) - "Конт.КоличествоСтрок()" - так же возвращает "0"

к сожалению надо бежать...  Печаль
спасибо за быстрые ответы...
вопрос для меня пока открыт...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #16 - 06. Мая 2011 :: 14:21
Печать  
в меню "О Программе" что светится ?
какие ВК ?

вот так, что пишет ?

Конт.НоваяСтрока();
Конт.Форма.Обновить(0);
Сообщить(Конт.КоличествоСтрок());
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #17 - 06. Мая 2011 :: 14:26
Печать  
мда.... при вставке "Конт.Форма.Обновить(0);" в цикл с добавлением строк - заполнение проходит корректно...  Озадачен
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #18 - 06. Мая 2011 :: 14:27
Печать  
zar

Короче, вот тебе на поиграться два работающих дизайна.
Из компонент необходима только 1cpp.dll.
  

db_001.rar ( 13 KB | Загрузки )

De quelle planète es-tu?
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #19 - 06. Мая 2011 :: 14:29
Печать  
как то это все очень хитро....
причем работает только с Формексом (что и следовало доказать)...
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #20 - 06. Мая 2011 :: 14:30
Печать  
kms

спасибо! завтра обязательно потестю...
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #21 - 10. Мая 2011 :: 13:42
Печать  
kms писал(а) 06. Мая 2011 :: 14:27:
zar

Короче, вот тебе на поиграться два работающих дизайна.
Из компонент необходима только 1cpp.dll.


2 kms.
А что это за методы: StartBatch и EndBatch ? Где о них можно почитать?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #22 - 10. Мая 2011 :: 14:00
Печать  
zk96 писал(а) 10. Мая 2011 :: 13:42:
2 kms.
А что это за методы: StartBatch и EndBatch ? Где о них можно почитать?

1. В документации 1С++
2. Поиск по форуму
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #23 - 10. Мая 2011 :: 14:03
Печать  
zk96 писал(а) 10. Мая 2011 :: 13:42:
2 kms.
А что это за методы: StartBatch и EndBatch ? Где о них можно почитать?

Да вот, к сожалению, не нашел исходную ветку.
История примерно такая: однажды обнаружилось, что один и тот же код (типа того, который пытался заставить работать zar) может работать, а может и не работать.
Путем несложных вычислений удалось выяснить, что такой код возможен при загруженном FormEx, да, к несчастью, не со 100% гарантией.
А для того, чтобы это дело работало, как раз и нужны некие внутренние механизмы, которые сама 1С оформляет скобками StartBatch/EndBatch.
Собственно, эти методы в виде драфта были добавлены в 1cpp и, на каком-то этапе, оформление такого кода такими скобками, стало единственно возможным (или мне известным) способом со 100% гарантией.
А потом уже эта механика была добавлена в TurboBL, и сейчас вызовы внешних контекстов идут внутри именно этих скобок.
Что сделало сами по себе методы StartBatch/EndBatch ненужными - ибо есть более красивый дизайн, который также работает с гарантией.
Он тоже есть в моем примере (хотя забавно, что даже я про него вспомнил не сразу).
  

De quelle planète es-tu?
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #24 - 10. Мая 2011 :: 14:46
Печать  
kms

примеры отработали на ура! спасибо! буду знать и о таком способе...
тоже не знал о StartBatch и EndBatch, но возникает вопрос:
если данные "скобки" встроены в TurboBL - почему в моем случае не сработало?
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #25 - 10. Мая 2011 :: 14:48
Печать  
2 artbear.
Прежде чем спросить поискал в документации и не нашел. Если плохо искал, то ткни меня носом Улыбка
2 kms
Спасибо за разьяснение.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #26 - 10. Мая 2011 :: 14:58
Печать  
zar писал(а) 10. Мая 2011 :: 14:46:
если данные "скобки" встроены в TurboBL - почему в моем случае не сработало?


Скорее всего, 1С ожидает, что весь код по добавлению строки будет в одних скобках:
Код
Выбрать все
Конт.НоваяСтрока();
Конт.Товар=Товар;
Конт.Количество=КолВо;
 



zk96

Я тоже поискал и не нашел Улыбка Наверное, потому что я ее не написал Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #27 - 11. Мая 2011 :: 07:08
Печать  
kms писал(а) 10. Мая 2011 :: 14:58:
Скорее всего, 1С ожидает, что весь код по добавлению строки будет в одних скобках:
Код
Выбрать все
Конт.НоваяСтрока();
Конт.Товар=Товар;
Конт.Количество=КолВо;
 




хм... ну даже если гарантированно выполняет одну команду - тогда он должен в любом случае отреагировать на "Конт.НоваяСтрока();" - созданием одной пустой строки (в цикле - нескольких пустых строк). Т.к. этого не происходит - значит методы через TurboBL со "скобками" StartBatch/EndBatch выполняются все же не так гарантированно как хотелось бы...  Печаль
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #28 - 11. Мая 2011 :: 14:06
Печать  
А не надо путать методы контекста, добавленные в групповой контекст его составными частями (типа CRefContext) и методы контекста, реализованные в модуле и сделанные доступными механизмами TurboBL.
Они разные и обрабатываются TurboBL по разному.

Цитата:
int CallAsProc(CGCBoost* pCont,int iMethNum,CValue **ppParam)
{
...
if (IsContextMethod(iMethNum))
     return (pCont->*(*(PF_CAP*)&m_pRealVTable[31]))(iMethNum, ppParam);

BatchGuard bg(pCont);
return pCont->GetModule()->CallAsProc(ModuleMethodNumber(iMethNum), m_MethInfo[iMethNum].NumberOfParam, ppParam);
...
}

Достаточно этого куска кода, чтобы развеялись сомненья? Подмигивание
  

De quelle planète es-tu?
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Не корректная работа с табличной частью докумета через контекст
Ответ #29 - 11. Мая 2011 :: 16:33
Печать  
более чем достаточно...  Подмигивание
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать