Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Нужен совет (число прочтений - 1767 )
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Нужен совет
28. Ноября 2008 :: 08:11
Печать  
В 1С пришлось организовать что-то вроде форума. Есть справочник Задачи, ему подчинен справочник Комментарии. На форме Задачи ТЗ со списком комментариев.

Чёт мне не нравится, что все комментарии (длинные сроки) хранятся в одной куче с другими длинными строками 1С. Думаю их хранить в отдельной таблице MySQL. Это также поможет в будущем и веб-интерфейс к этим самым комментариям присобачить. Как я понимаю из ПХП нельзя (толково) сделать напрямую запрос с таблицам 1С?

Хочу к моим форумам (комментарии, относящиеся к одной задаче) прикрутить такую фичу как на этом форуме - чтобы пользователь видел если появились новые комментарии в какой-либо теме (задаче). Ну ладно, добавим к задаче поле ВремяПоследнегоСообщения, к-е будет обновлятся при сохранении новго сообщения. Здесь проблема - запись ведь будет блокирована, если форма Задачи будет кем-то открыта на редактирование. Хорошо, вынесу это поле в другую таблицу. Создал таблицу Форумы с полем Задача и ВремяПоследнегоСообщения. При сохрании новой задачи, автоматически создается соответствующий ему форум - они ссылаются друг на друга. Теперь, даже если Задача открыта, новый комментарий при сохранении сможет изменить ВремяПоследнегоСообщения - запись не будет блокирована, даже если Задача открыта.

Цитата:
Процедура ПриЗаписи()
     Если Выбран() = 0 Тогда // элемент новый - обновим ВремяПоследнегоСообщения
           ВремяСоздания = ТекущееДатаВремя();
           СпрФорум = СоздатьОбъект("Справочник.Форумы");
           Попыток = 5;
           Система = СоздатьОбъект("Система");
           Пока Попыток > 0 Цикл
                 СпрФорум.НайтиЭлемент(Задача.Форум);
                 Если СпрФорум.Блокировка(1) = 1 Тогда Прервать; КонецЕсли;
                 Попыток = Попыток - 1;
                 Система.Уснуть(200); // подождем - запись блокирована - какой-то другой комментарий работает с ней
           КонецЦикла;
           Если Попыток > 0 Тогда // запись не заблокирована другим комментарием - мы заблокировали
                 Если ВремяСоздания > СпрФорум.ВремяПоследнегоСообщения Тогда
                       СпрФорум.ВремяПоследнегоСообщения = ВремяСоздания;
                       СпрФорум.Записать();
                 КонецЕсли;
               СпрФорум.Блокировка(0);
           КонецЕсли;
     КонецЕсли
КонецПроцедуры

Тут я столкнулся с нетривиальной проблемой. Нетривиальной, потому что у меня нет опыта раобты с базами данных. Суть проблемы в том, что В один момент времени несколько новых комментариев может пытаться изменить ВремяПоследнегоСообщения. Я попытался это решить по-своему (см. код выше).
Как мысли у вас, эксперты?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Нужен совет
Ответ #1 - 28. Ноября 2008 :: 08:17
Печать  
сделай нормальный интернет форум помести его во внутренюю сетку и открывай  в ActiveX браузер IE
Все остальное баловство. так же как простейшие письма и.т.д.
сделать можно но нужно ли ???
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Нужен совет
Ответ #2 - 28. Ноября 2008 :: 09:08
Печать  
Z1 писал(а) 28. Ноября 2008 :: 08:17:
сделай нормальный интернет форум помести его во внутренюю сетку и открывай  в ActiveX браузер IE
Все остальное баловство. так же как простейшие письма и.т.д.
сделать можно но нужно ли ???

У меня форум привязан к другим объектам 1С
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нужен совет
Ответ #3 - 28. Ноября 2008 :: 09:36
Печать  
1. Из php можно работать с 1С через v7server (тут же в курилке ищи ветку)
2. Я бы весь форум вынес в MySQL. Так можно было бы сделать универсальное решение не привязанное к конфигурации.
3. Что означает фраза "форум привязан к другим объектам 1С"?
Если к комментариям нужно цеплять ссылки на объекты 1С, то можно завести доп строковое поле, где хранить объекты в ЗначениеВСтрокуВнутр().

  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Нужен совет
Ответ #4 - 28. Ноября 2008 :: 09:49
Печать  
Alex_Bob писал(а) 28. Ноября 2008 :: 09:36:
1. Из php можно работать с 1С через v7server (тут же в курилке ищи ветку)
2. Я бы весь форум вынес в MySQL. Так можно было бы сделать универсальное решение не привязанное к конфигурации.
3. Что означает фраза "форум привязан к другим объектам 1С"?
Если к комментариям нужно цеплять ссылки на объекты 1С, то можно завести доп строковое поле, где хранить объекты в ЗначениеВСтрокуВнутр().


или вообще id  и iddoc вместо ЗначениеВСтрокуВнутр()
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нужен совет
Ответ #5 - 28. Ноября 2008 :: 09:55
Печать  
Цитата:
или вообще id  и iddoc вместо ЗначениеВСтрокуВнутр()

Тогда уж длинную строку с типом и видом (С15)
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Нужен совет
Ответ #6 - 28. Ноября 2008 :: 11:01
Печать  
Спасибо
Кто-нить реализовывал внешние справочники на мускуле?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать