Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Ощущения от новичка в 8.1 (число прочтений - 10638 )
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Ощущения от новичка в 8.1
16. Февраля 2010 :: 11:00
Печать  
Ощущения довольно странные. Понятно, что ребята движутся в нужном направлении. Но количество простых задач, которые делаются исключительно через задний проход (или вообще не делаются) - поражает. За чуть больше месяца таких мест найдено как минимум четыре.

1. Как узнать, какой реквизит у формы является основным (для того, чтобы понять, например, является ли форма документа формой объекта или формой списка).
Делается через ЗначениеВСтрокуВнутр(Форма) и последующий парсинг полученной строки.

2. Как запустить обработку события выбора значения в поле ввода на форме?
Нужно для автоматического тестирования работы с формами.
Делается через подчиненную реквизиту форму.

3. Как узнать, лежит ли реквизит формы на панели, и если да, то на какой странице?
Нужно для того, чтобы понять, виден ли пользователю такой реквизит, и доступен ли он для редактирования (Когда видимость и доступность рулятся на уровне страниц панели - доступность и видимость реквизита показывает погоду на марсе).
Делается через деструктивный анализ формы.

4. Ну и мое персональное больное место. Не поддерживаются вложенные транзакции. Откат внутренней транзакции приводит к откату внешней транзакции.
В моем случае внешняя транзакция - это гарантия уборки за собой после работы юниттеста. Внутренняя транзакция возникает неявно при записи или проведении чего-либо. В результате протестировать ситуацию, когда например документ НЕ ДОЛЖЕН записаться или провестись - становится большим-большим геморроем. Ибо убирать за собой нужно самому.

А с какими другими череззаборногузадерищенскостями восьмерки сталкивались Вы?
  
Наверх
www  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #1 - 16. Февраля 2010 :: 11:23
Печать  
fez писал(а) 16. Февраля 2010 :: 11:00:
4. Ну и мое персональное больное место. Не поддерживаются вложенные транзакции. Откат внутренней транзакции приводит к откату внешней транзакции.
В моем случае внешняя транзакция - это гарантия уборки за собой после работы юниттеста. Внутренняя транзакция возникает неявно при записи или проведении чего-либо. В результате протестировать ситуацию, когда например документ НЕ ДОЛЖЕН записаться или провестись - становится большим-большим геморроем. Ибо убирать за собой нужно самому.

Откат только внутреней (вложенной ) транзакции не поддерживается MS SQL сервером.
при откате любой вложенной транзакции откатываются и все внешние.( про остальные  сервера ничего не могу сказать).
Может можно смотреть в сторону версионности (начиная с ms sql2005) Уровень изоляции SNAPSHOT но сможет ли в нем работать v8 не знаю.

  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #2 - 16. Февраля 2010 :: 11:57
Печать  
fez писал(а) 16. Февраля 2010 :: 11:00:
4. Ну и мое персональное больное место. Не поддерживаются вложенные транзакции. Откат внутренней транзакции приводит к откату внешней транзакции.
В моем случае внешняя транзакция - это гарантия уборки за собой после работы юниттеста. Внутренняя транзакция возникает неявно при записи или проведении чего-либо. В результате протестировать ситуацию, когда например документ НЕ ДОЛЖЕН записаться или провестись - становится большим-большим геморроем. Ибо убирать за собой нужно самому.

Не понял проблему про документ, попробуй как-то расшифровать, плиз.
Лучше на примере, естественно.

ЗЫ как раз потихоньку вожусь консолью юнит-тестирования
  

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


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #3 - 16. Февраля 2010 :: 12:26
Печать  
artbear писал(а) 16. Февраля 2010 :: 11:57:
Не понял проблему про документ, попробуй как-то расшифровать, плиз.
Лучше на примере, естественно.

Есть документ, который при определенном наборе реквизитов не должен записываться. Я хочу протестировать этот функционал - убедиться в том, что документ с конкретным набором реквизитов действительно не записался.

Анализ набора реквизитов, естественно, происходит в обработчике события ПередЗаписью, и если все плохо, то выставляется Отказ = Истина.

Проблема в том, что запись документа происходит в транзакции. Событие ПередЗаписью обрабатывается в составе этой транзакции. Если происходит Отказ в записи документа - транзакция записи откатывается. Следовательно, я не могу использовать внешнюю транзакцию для очистки за юниттестом.

Внешне это выглядит очень забавно: открыта форма докумена, но объекта этого самого документа уже не существует (оператор _Док = Документы.ПлатежноеПоручениеИсходящее.СоздатьОбъект() откатился транзакцией). И например попытки записать документ из открытой формы приводят к ошибке "Документ не выбран".
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #4 - 16. Февраля 2010 :: 12:50
Печать  
Ну раз транзакция уже откатилась, значит, и изменения юнит-теста уже не сохранены, и их дополнительно отменять не нужно Улыбка
Я лично делаю так:
Метод Инит - НачатьТранзакцию
Тело теста - нужные действия
Метод Сброс - в попытке делаем ОтменитьТранзакцию

Я вижу здесь проблему, если у нас внутри внешней транзакции могут запускаться несколько транзакций на одном уровне, т.е. сначала транзакция 1 и ее отмена, а далее транзакция 2 и ее фиксация.
Интересно - как в этом случае сработает 1С ?

ЗЫ Федор, а каким инструментом для группового запуска юнит-тестов пользуешься?
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #5 - 16. Февраля 2010 :: 13:17
Печать  
Юнит-тесты показали, что код или юнит-тест типа
Цитата:
НачатьТранзакцию();
     НачатьТранзакцию();
     ОтменитьТранзакцию();
     
     новаяВалюта = Справочники.Валюты.СоздатьЭлемент();
     новаяВалюта.Наименование = "Юнит-тест1";
     новаяВалюта.Код = "859";
     Сообщить("Тело Записать() 1");
     новаяВалюта.Записать(); // здесь валится
     
     //НачатьТранзакцию(); -
     //ОтменитьТранзакцию();
ОтменитьТранзакцию();

не работает вообще Печаль
Ошибка
Цитата:
{(9)}: Ошибка при вызове метода контекста (Записать): В данной транзакции уже происходили ошибки!
  

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


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #6 - 16. Февраля 2010 :: 13:20
Печать  
artbear писал(а) 16. Февраля 2010 :: 13:17:
Цитата:
{(9)}: Ошибка при вызове метода контекста (Записать): В данной транзакции уже происходили ошибки!

Именно.
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #7 - 16. Февраля 2010 :: 13:22
Печать  
artbear писал(а) 16. Февраля 2010 :: 12:50:
Ну раз транзакция уже откатилась, значит, и изменения юнит-теста уже не сохранены, и их дополнительно отменять не нужно Улыбка

Как открытую форму закрыть?
При Форма.Закрыть() он спрашивает: сохранять изменения или нет. Программно отвечать на этот вопрос я не умею.

...хотя можно попробовать поиграться с модифицированностью...
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #8 - 16. Февраля 2010 :: 13:25
Печать  
fez писал(а) 16. Февраля 2010 :: 13:22:
...хотя можно попробовать поиграться с модифицированностью...

хо-хо, работает Улыбка

Ушел обратно думать над концепцией.
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #9 - 16. Февраля 2010 :: 13:26
Печать  
artbear писал(а) 16. Февраля 2010 :: 12:50:
ЗЫ Федор, а каким инструментом для группового запуска юнит-тестов пользуешься?

Сам написал. В качестве тренировки по работе с 8.1.
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #10 - 16. Февраля 2010 :: 14:33
Печать  
fez писал(а) 16. Февраля 2010 :: 13:25:
fez писал(а) 16. Февраля 2010 :: 13:22:
...хотя можно попробовать поиграться с модифицированностью...

хо-хо, работает Улыбка
Ушел обратно думать над концепцией.

Ну в принципе нормально. Все формы закрываем через
Код
Выбрать все
Форма.Модифицированность = Истина;
Форма.Закрыть(); 


а все данные убиваются откатившейся транзакцией.

Если делать поправки на ветер и аккуратно проектировать тесты, то пожалуй вполне можно с этим жить.
  
Наверх
www  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #11 - 17. Февраля 2010 :: 07:25
Печать  
fez писал(а) 16. Февраля 2010 :: 11:00:
А с какими другими череззаборногузадерищенскостями восьмерки сталкивались Вы?


из последнего - это поведение менеджера ПланаОбмена а точнее

ситуация: у главного узла изменилась конфигурация

у объекта ПланыОбменаМенеджер (ExchangePlansManager)

есть метод
Цитата:
ЗаписатьИзменения (WriteChanges)

он записывает ВСЕ изменения в сообщение обмена

и есть второй метод
Цитата:
ВыбратьИзменения (SelectChanges)

он открывается выборку изменений

ожидание:

я ожидаю что код
Код
Выбрать все
ЗаписьСообщения=ПланыОбмена.СоздатьЗаписьСообщения();
Запись=Новый ЗаписьXML;
Запись.ОткрытьФайл(ФайлXMLВременныйКаталог);
ЗаписьСообщения.НачатьЗапись(Запись,УзелОбмена.Ссылка);
ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения, 0);
ЗаписьСообщения.ЗакончитьЗапись();
Запись.Закрыть();
 



и код
Код
Выбрать все
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ФайлXMLВременныйКаталог);
ЗаписьСообщения.НачатьЗапись(Запись, УзелОбмена.Ссылка);
Выб = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель,
        ЗаписьСообщения.НомерСообщения);
Пока Выб.Следующий() Цикл
    Объект = Выб.Получить();
    ЗаписатьXML(Запись, Объект);
КонецЦикла;
ЗаписьСообщения.ЗакончитьЗапись();
Запись.Закрыть();
 



создадут идентичные файлы сообщений xml, однако...

метод ВыбратьИзменения не получит изменение конфигурации и в файл сообщения не запишет

P.S. Это на самом деле неявно написано и в документации - другое дело что это как то совсем не ожидаемое поведение
Цитата:
ВыбратьИзменения(<Узел>, <Номер сообщения>, <Фильтр выборки>)
Формирует выборку измененные данные для передачи их в тот или иной узел плана обмена.

ЗаписатьИзменения(<Запись сообщения обмена>, <Элементов в транзакции>)
Предназначен для помещения в сообщение обмена данными всех изменений данных и конфигурации для отправки в другой узел распределенной информационной базы
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #12 - 18. Февраля 2010 :: 05:59
Печать  
fez писал(а) 16. Февраля 2010 :: 13:26:
artbear писал(а) 16. Февраля 2010 :: 12:50:
ЗЫ Федор, а каким инструментом для группового запуска юнит-тестов пользуешься?

Сам написал. В качестве тренировки по работе с 8.1.

А поделиться? Улыбка
  

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


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #13 - 18. Февраля 2010 :: 11:02
Печать  
Поделюсь обязательно. Приведу в законченный вид и обязательно выложу.
  
Наверх
www  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Ощущения от новичка в 8.1
Ответ #14 - 11. Мая 2010 :: 13:04
Печать  
fez писал(а) 16. Февраля 2010 :: 11:00:
А с какими другими череззаборногузадерищенскостями восьмерки сталкивались Вы?


из последнего про вложенные транзакции:

Цитата:
НачатьТранзакцию();
....
ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения,10)
...
ЗафиксироватьТранзакцию();


если коротко - если обрамлять вызов метода чтения изменений по плану обмена в транзакцию
- то тогда параметр 10 (количество элементов в транзакции) фактически будет проигнорирован - что означает  полную блокировку объектов. Так как метод ПрочитатьИзменения тоже неявно вызывает транзакцию для записи указанного количества элементов

Цитата:
<Элементов в транзакции> (необязательный)
Тип: Число. Определяет максимальное число элементов данных, которые читаются из сообщения и записываются в базу данных в рамках одной транзакции


P.S. теперь приходится разбираться кто и зачем добавил в модуль обмена эти самые транзакции - явно же не просто так.

  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать