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