1c-obrabotki.at.ua Вторник, 05.08.2025, 14:45
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
Форма входа

Меню сайта

Категории раздела
Мои статьи [48]

Курс валют
Курс Валют Информер
Российский рубль Российский рубль валюта России
(EUR)//-//
(USD)//-//
(CZK)//-//
(GBP)//-//

Главная » Статьи » Мои статьи

Создание формы новостей
Введение

        Совсем недавно у меня возникла необходимость выводить все производимые изменения в конфигурации для каждого пользователя, чтобы они следили за последними новшествами. С удовольствием делюсь своим способом решения данной задачи.

Решение

        За основу возьмем пример конфигурации пользователей
        Первым делом создадим новый справочник и назовем его "Новости". Добавим в него два реквизита: "Полное наименование" - строка и "ДатаНовости" - дата. В этом справочнике будут храниться наши новости.

        Теперь нам необходимо создать форму в которой будут отображаться наши новости. Создадим ее - общие формы-ФормаНовостей. Добавим в нее 3 поля: "ЗаголовокНовости" (Вид - Поле надписи, ПутьКДанным - реквизит "ЗаголовокНовости"), "ДатаНовости" (Вид - Поле надписи, ПутьКДанным - реквизит "ДатаНовости") и "ОписаниеНовости" (Вид - Поле надписи, ПутьКДанным - реквизит "ОписаниеНовости") и две кнопки "Вперед" и "Назад". Также создадим еще 4 дополнительных реквизита:

  • ДатаНовостиОтбор (тип - Дата) - понадобится нам для отбора новостей в запросе;
  • КоличествоЗаписей (тип - Число) - будет необходимо для навигации по записям;
  • ТекущаяЗапись (тип - Число) - так же как и КоличествоЗаписей будет задействован в навигации;
  • ТаблицаНовостей (тип - ТаблицаЗначений, 1-я колонка "Наименование" тип - строка, 2-я - "ПолноеНаименование" тип - строка и 3-я "ДатаНовости" тип -дата)


        Теперь приступим непосредственно к написанию кода. Для нашей формы создадим событие ПриСозданииНаСервере и добавим туда следующий код:

&НаСервере
ПроцедураПриСозданииНаСервере(Отказ,СтандартнаяОбработка)
        ПеремНоваяСтрока,КодПоследнейНовости,ТекПользовательСсылка,ТекПользовательОбъект;
        ТекПользовательСсылка=ОМПользователи.ПолучитьСсылкуТекущегоПользователя();
        ДатаНовостиОтбор=ТекПользовательСсылка.Новость.ДатаНовости;
        Запрос=НовыйЗапрос;
        Запрос.Текст= 
                "ВЫБРАТЬ
                |       Новости.Код КАК Код,
                |       Новости.Наименование КАК Наименование,
                |       Новости.ПолноеНаименование КАК ПолноеНаименование,
                |       Новости.ДатаНовости КАК ДатаНовости
                |ИЗ
                |       Справочник.Новости КАК Новости
                |ГДЕ
                |       Новости.ДатаНовости > &ДатаНовостиОтбор
                |
                |УПОРЯДОЧИТЬ ПО
                |       ДатаНовости";

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

        Теперь добавим нашим кнопкам по событию:

&НаКлиенте
ПроцедураВперед(Команда)
        ТекущаяЗапись=ТекущаяЗапись+ 1;
        ПоказатьЗапись(ТекущаяЗапись);
        ЕслиТекущаяЗапись=КоличествоЗаписейТогда
                ЭтаФорма.Элементы.Вперед.Доступность= Ложь;
        КонецЕсли;
        ЭтаФорма.Элементы.Назад.Доступность= Истина;
КонецПроцедуры

&НаКлиенте
ПроцедураНазад(Команда)
        ТекущаяЗапись=ТекущаяЗапись- 1;
        ПоказатьЗапись(ТекущаяЗапись);
        ЕслиТекущаяЗапись= 0 Тогда
                ЭтаФорма.Элементы.Назад.Доступность= Ложь;
        КонецЕсли;
        ЭтаФорма.Элементы.Вперед.Доступность= Истина;
КонецПроцедуры

и создадим функцию которая будет загружать нужную нам новость на форму из таблицы значений "ТаблицаНовостей":

&НаСервере
ПроцедураПоказатьЗапись(НомерЗаписи)
        ПеремСтрокаДляЧтения;
        СтрокаДляЧтения=ТаблицаНовостей.Получить(НомерЗаписи);
        ДатаНовости=СтрокаДляЧтения.ДатаНовости;
        ЗаголовокНовости=СтрокаДляЧтения.Наименование;
        ОписаниеНовости=СтрокаДляЧтения.ПолноеНаименование;
КонецПроцедуры

        Наконец последний штрих. Нам необходимо, чтобы эта форма загружалась при запуске программы. Для этого воспользуемся модулем управляемого приложения:



в котором создадим процедуру ПриНачалеРаботыСистемы:

ПроцедураПриНачалеРаботыСистемы()
        ФормаНовостей=ПолучитьФорму("ОбщаяФорма.ФормаНовостей"); 
        Попытка
                ФормаНовостей.Открыть();
        Исключение
        КонецПопытки;
КонецПроцедуры


Запускаем и любуемся результатом:





Источник: http://alsproject.ru/publ/primery/sozdanie_formy_novostej/4-1-0-17
Категория: Мои статьи | Добавил: Sam1488 (24.05.2013)
Просмотров: 885 | Рейтинг: 0.0/0
Всего комментариев: 0
Погода

Поиск

Новости

Copyright MyCorp © 2025