Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #113


Клуб профессиональных программистов «Весельчак У»
Информационная рассылка сайта и форума.  Выпуск 113.  22 мая 2011 г.

Здравствуйте, уважаемые читатели!

Сегодня предлагаем вам вторую часть перевода стандарта «Рекомендации IEEE по разработке требований к программному обеспечению». Перевод публикуется частями. Заключительная часть будет в следующем выпуске.

Также предлагаем подборку тем нашего форума.




Пополнение «Книжной полки разработчика систем со встроенными микропроцессорами»:




Приятного чтения!




Перевод с англ.: (C) Dale, 05.05.2011 — 12.05.2011.

Продолжение.
Первая часть


5. Части SRS


В этом разделе обсуждается каждая основная часть SRS. Эти части упорядочены ниже в виде плана, который может использоваться как образец при написании SRS.

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

Содержание SRS:

  • Введение
    • Назначение
    • Область применения
    • Определения, акронимы и сокращения
    • Обзор
  • Общее описание
    • Позиционирование продукта
    • Функции продукта
    • Пользовательские характеристики
    • Ограничения
    • Предположения и зависимости
  • Специфические требования (см. пункты с 5.3.1 по 5.3.8 с пояснением возможных специфических требований. См. также в !!!Приложении А различные способы организации этого раздела SRS).
  • Приложения
  • Индекс

5.1. Введение (Раздел 1 SRS)


Введение должно представлять обзор SRS В целом. Оно должно включать следующие подразделы:

  • Назначение.
  • Область применения.
  • Определения, акронимы и сокращения.
  • Ссылки.
  • Обзор.

5.1.1. Назначение (1.1 SRS)


В этом подразделе следует:
  • Определить назначение SRS;
  • Задать целевую аудиторию SRS.

5.1.2. Область применения (1.2 SRS)


Этот подраздел должен:

  • Идентифицировать производимый продукт по имени (например, Host DBMS, Report Generator и т.д.);
  • Пояснять, что должен делать программный продукт, а также, при необходимости, чего он не должен делать;
  • Описать применение программного обеспечения, включая выгоды, намерения и цели;
  • Согласовываться со сходными положениями спецификаций верхнего уровня (например, спецификацией требований к системе), если они существуют.

5.1.3. Определения, акронимы и сокращения (1.3 SRS)


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


5.1.4. Ссылки (1.4 SRS)


Данный подраздел должен:

  • Представлять полный перечень документов, на которые есть ссылки где-либо в SRS;
  • Идентифицировать каждый документ по названию, отчетному номеру (если применимо), дате и опубликовавшей организации;
  • Задавать источники, из которых могут быть получены документы, на которые имеются ссылки.
    Эта информация может быть представлена в виде ссылки на приложение или другой документ.

5.1.5. Обзор (1.5 SRS)


Данный подраздел должен:

  • Описывать содержимое остальной части SRS;
  • Пояснять организацию SRS.
  • Программирование :: Общий
  • I need help!

    Задача: в директории лежит несколько сотен файлов(логи с атс), в таком вот виде:
    Имя                  Размер             Изменён
    2011032600.log       1995 КБ            26.03.2011 1:57
    2011032601.log       2054 КБ            26.04.2011 7:56
    2011032602.log       1271 КБ            20.05.2011 15:17
    и т.д
    Внутри файлов информация о звонках, в таком вот виде:

    110326 010803 000000 010843 --- 4500 ---- 021 031524 059 4593 --- 050110 0000 564593------------ 9615574500
    110326 010955 000000 011008 --- 4500 ---- 020 032322 059 4593 --- 050110 0000 564593------------ 9615574500
    110326 010256 010307 011152 104 ---- 4678 --- 050615 007 ---- 020 032321 0027 532416------------ ----------
    110326 004525 004536 011241 104 ---- 4861 --- 051806 007 ---- 020 032313 0027 521411------------ ----------
    110326 011350 000000 011420 --- 4500 ---- 021 031525 059 4593 --- 050110 0000 564593------------ 9615574500
    110326 011435 000000 011436 104 ---- 4335 --- 040908 005 ---- --- ------ 0000 ------------------ ----------
    110326 011437 000000 011438 104 ---- 4336 --- 040909 005 ---- --- ------ 0000 ------------------ ----------
    110326 003414 003416 011552 --- 5480 ---- 020 032308 059 4480 --- 042413 0000 564480------------ 3499525480
    110326 011934 000000 011937 104 ---- 4678 --- 050615 007 ---- --- ------ 0000 ------------------ ----------

    Это информация о звонках. Из всей этой информации мне нужно обрабатывать всего 5 столбцов, таких как: выбирать только звонки сделанные в апреле, номер с которого звонили, на какой звонили, и разницу между ночалом разговора и концом разговора, то есть суммарное время общения.
    При этом, всю эту выборку мне надо осуществить всего для 10ти телефонных номеров.
    То есть, из тысяч записей в каждом из сотен txt файлов данной директории, мне необходимо выполнить поиск по дате и номеру, в случае если все атрибуты совпадают(дата, номер с которого звонили, на какой звонили) то проссуммровать время общения за весь апрель.
    А в итоге обработанную красивую информацию записать в новый txt.
    У меня кипят мозги.

    Вопрос: Подскажите пожалуйста, как это правильно реализовать, да так чтоб сервак не повис на веки вечные!!!
    Пишу на C# в Visual Studio.
  • Программирование :: С/С++
  • я хочу возвращать объект из функции по значению (не по ссылке)
    и прсваивать то, что вернула ф-ция, в другой объект.

    при возврате из ф-ции создается (с помощью копиКонструктора) промежуточный объект, потом ф-ция завершается (со всеми деструкторами локальных объектов и т.п.)

    и оператор присваивания у меня должен брать объект по ссылке (т.к. его надо менять)
    а этот промежуточный объект нельзя передавать по ссылке в оператор присваивания (пишет не может найти оператор присваивания, куда передается не по ссылке)
    тоже самое с копи конструктором
    (однако в другую ф-цию (не оператор присваивания) этот объект по ссылке передается нормально - почему?)
    (делать 2 перегруженных оператора присваивания в которые в один передается по ссылке, а в другой по значению нельзя, т.к. компилятору не положено в общем случае догадываться где какой использовать, да это в общем-то и не работает)

    я пока нашел такое решение: взять адрес от этого промежуточного объекта, а потом его разыменовать
    - работает

    вопрос:
    могу ли я быть уверен, что у этого промежуточного объекта деструктор не вызовется до того как я его передам в оператор присваивания таким образом?
    что значит взять адрес от него, и где он находится?
    можно ли решить данную проблему как-то более просто?

  • Программирование :: С/С++ :: WinAPI & Visual C++ :: DirectX
  • Привет!

    Начал осваивать Windows Embedded CE 6.0 R3, которую планируется устанавливать на небольшую PC-совместимую материнку в приборе. От производителей получил готовый образ WinCE на карточке (NK.BIN) и SDK для разработки приложений. (Разработку/адаптацию самой WinCE пока не делаю, пользуюсь готовым образом.)

    Наша прежняя приборная программа базируется на DirectX, поэтому я первым делом решил проверить работу Direct3D Mobile. Скомпилировал и запустил шесть туторных примеров (те, что "TUT0n_XXX"). Все они нормально работают. Тогда я стал экспериментировать с "TUT03_MATRICES" и столкнулся с проблемой: не могу нарисовать два треугольника вместо одного (мне нужно рисовать несколько разных объектов, поэтому я для начала попробовал просто два отдельных треугольника). Я немножко модифицировал функцию "SetupMatrices", чтобы она могла сдвигать мировую матрицу по осям X, Y. Вот код рендера:

    Код:
        // Begin the scene
        if( SUCCEEDED( g_pd3dmDevice->BeginScene() ) )
        {
            // Setup the world, view, and projection matrices
            SetupMatrices( -1.0f, 1.0f); // Shift by x = -1, y = 1
           
            // Render the vertex buffer contents
            g_pd3dmDevice->SetStreamSource( 0, g_pVB, sizeof(CUSTOMVERTEX) );
            g_pd3dmDevice->DrawPrimitive( D3DMPT_TRIANGLELIST, 0, 1 );

    //!!!!  SetupMatrices( 1.0f, -1.0f);
            g_pd3dmDevice->DrawPrimitive( D3DMPT_TRIANGLELIST, 0, 1 );

            // End the scene
            g_pd3dmDevice->EndScene();
        }

    В таком виде все работает. Но стоит мне раскомментировать второй вызов "SetupMatrices" - и все, не работает, даже клиентская часть окна не обновляется (в ней остается картинкка десктопа).

    Помогите, пожалуйста, разобраться с этой проблемой!

    P.S. Окружение:

    1. Рабочий компьютер: Windows XP, MS Visual Studio 2005, SDK для разработки приложений.
    2. Целевая система: Windows CE 6.0, Direct3D Mobile.

    Компилирую программу на рабочем компьютере, записываю на флешку и запускаю на целевой системе.
  • Программирование :: С/С++ :: Borland C/C++
  • Добрый день!
    Я экспортирую класс из DLL как написано в книгах, но главный проект никак не хочет собираться, не находит тело функций в lib файле, может это примудрости C++ Builder ? Экспорт работает только на Visual C++ ?
    Вот код DLL :
    Заголовочный файл:
    Код:
    #ifndef MYSQL_DLL_H
    #define MYSQL_DLL_H
    //---------------------------------------------------------------------------
    #include <mysql.h>
    //---------------------------------------------------------------------------
    #ifdef  SQLDLL_EXPORT
    #define SQLDLL_EXPORT __declspec(dllexport)
    #else
    #define SQLDLL_EXPORT __declspec(dllimport)
    #endif
    //---------------------------------------------------------------------------
    struct SQLDLL_EXPORT STLOGIN
    {
    AnsiString host;
    AnsiString user;
    AnsiString password;
    AnsiString DB;
    int clientflag;
    int port;
    };
    //---------------------------------------------------------------------------
    class SQLDLL_EXPORT TSQL
    {
    private:
       MYSQL *sql_proc;
       MYSQL_RES *Res;
       MYSQL_ROW Row;
       bool ConnectedMySQL;
    public:
    TSQL();
    ~TSQL();

    void __fastcall ConnectMySQL(STLOGIN *stLogin);
    void __fastcall DisconnectMySQL();
    bool __fastcall GetStatusMySQL();
    };
    //---------------------------------------------------------------------------
    #endif

    Файл cpp:
    Код:
    #include <vcl.h>
    #include <windows.h>
    #include "MySqlDll.h"
    #pragma hdrstop
    //---------------------------------------------------------------------------
    TSQL::TSQL()
    {
    //constructor
    }
    //---------------------------------------------------------------------------
    TSQL::~TSQL()
    {
    //destructor
    }
    //---------------------------------------------------------------------------

    void __fastcall TSQL::ConnectMySQL(STLOGIN *stLogin)
    {
    sql_proc = mysql_init(sql_proc);
    sql_proc = mysql_real_connect(sql_proc,stLogin->host.c_str(),stLogin->user.c_str(),
      stLogin->password.c_str(),stLogin->DB.c_str(),
      stLogin->port,NULL,stLogin->clientflag);
    if(!sql_proc) ShowMessage("Не доступен сервер MySQL Server!");
    else ConnectedMySQL = true;
    }
    //---------------------------------------------------------------------------

    void __fastcall TSQL::DisconnectMySQL()
    {
    if(sql_proc) mysql_close(sql_proc);
    sql_proc=NULL;
    }
    //---------------------------------------------------------------------------

    bool __fastcall TSQL::GetStatusMySQL()
    {
    return ConnectedMySQL;
    }
    //---------------------------------------------------------------------------
    #pragma argsused
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
    return 1;
    }
    //---------------------------------------------------------------------------

    DLL файл собирается отлично. После копирую файл MySqlDll.h, MySqlDll.dll и MySqlDll.lib в папку с проектом exe
    Подключаю все это дело в проект:
    В Main.h подключаю #include "MySqlDll.h"
    В Main.cpp создаю объекты
    Код:
    #include <vcl.h>
    #pragma hdrstop

    #include "Main.h"
    #include "About.h"
    //---------------------------------------------------------------------------
    #pragma resource "*.dfm"
    #pragma comment(lib,"MySqlDll.lib")
    //---------------------------------------------------------------------------
    TMainForm *MainForm;
    TSQL *SQLInterface;
    STLOGIN *stLogin;
    bool startMDI=false;
    //---------------------------------------------------------------------------

    __fastcall TMainForm::TMainForm(TComponent *Owner)
    : TForm(Owner)
    {
       SQLInterface = new TSQL();
       stLogin = new STLOGIN();
    }
    //---------------------------------------------------------------------------

    Ну и при сборке проекта получаю:
    [ILINK32 Error] Error: Unresolved external 'TSQL::~TSQL()' referenced from E:\PROJECTS\DEBUG\MAIN.OBJ
    [ILINK32 Error] Error: Unresolved external 'TSQL::TSQL()' referenced from E:\PROJECTS\DEBUG\MAIN.OBJ
  • Программирование :: Delphi
  • К моему проекту привязана DLL
    Код:
    procedure UpdateProgram(URL, Path, UpdateProgramName, ArchiveName: PChar); stdcall; external 'MYDLL.DLL';

    Эта DLL скачивает файл из Инета. После того как программа скачала архив нужно завершить работу приложения. Я работаю с DLL в первые.
    Код:
    procedure TFormUpdate.thrTerminate(Sender: TObject);
    begin
      FormUpdate.Close; // Форма, вызванная из DLL не закрывается вообще
      FormMain.PMMExit.Click; // Полнейший бред
    end;
    ...

    // FormMain
    procedure TFormMain.Exit1Click(Sender: TObject);
    begin
      Application.Terminate;
    end;

    Как закрыть форму, вызванную из DLL и правильно завершить работу программы всё из той же DLL?
  • Программирование :: VisualBasic :: Visual Basic for Applications
  • Может быть, кто-то сталкивался?

    Из Экселя открывается ворд, пишется в файл инфа и тп.
    Так вот, код, который много лет работал в старом Ms Office
    заглючит после перехода на новый.

    в этом месте:

     Set objword = New Word.Application
            With objword
    .Application.WindowState = wdwindowstatemaximize
    .Application.Visible = True
    .Application.Documents.Add
    End With

    эксель виснет и в конце концов выдает "Excel ожидает завершения OLE операции другим приложением"

    Побороть проблему удается так:

    Set objword = New Word.Application
            With objword
    '.Application.WindowState = wdwindowstatemaximize
    '.Application.Visible = True
    .Application.Documents.Add
    End With


    Но с невидимым вордом неудобно...

    Помогите, плиз! Просто никаких идей, что предпринять.
    Заранее спасибо.
  • Программирование :: Ассемблер
  • Как грамотно это делают? Поделитесь пожалуйста алгоритмом, сам код не нужен. Пока что я загружаю число, раскладываю его екстрактом на экспоненту и мантиссу, перевожу экспоненту в десятичное значение при помощи десятичного логарифма двойки а дальше? Как мантиссу превратить в десятичное значение максимальной точности и превратить в строку? Ну то есть мантиссу хочу выводить почти ввсе 64 бита по возможности, а то сейчас у меня ошибки лезут уже после 5-го знака после запятой.
  • Здравствуйте  у меня снова  появились вопросы  задание следующее.
    "Написать программу преобразования двухбайтового  числа в двоично-десятичное число с учетом знака."
    написал программку которая преобразует но  без учёта  знака  вот  теперь у меня загвоздка  как сделать с учётом знака.

    Есть не большое соображение  в самом начале программы сделать определение какой знак у числа  если +  то пойти по алгоритму 1  если минус то  преобразовать из дополнительного кода в обычный  и  сделать тоже самое что и в первом(>0) случае  но вот  как указать знак в конце выполнения программы ?

    но как то это сильно сложно  полагаю есть более простое решение

    model   small
    .data
    V1      dw   10011010010
    V2      db   1 DUP(?)
    .code
          mov   ax,@data                     
          mov   ds,ax                        
          mov Si,50         ;индекс(начальный адрес)
          mov   ax,V1         ;записываем число в регистр из массива
            mov   bl,1010b      ;делитель
    next:                  ;метка перехода
          div bl            ;делим число  ah=остаток, al=частное 
          mov   V2[SI],ah      ;остаток записываем в массив V2
          dec SI            ;отнимаем 1 от индекса
          mov ah,0h         ;очищаем остаток
          cmp al,0         ;сравниваем   частное с 0  если не равно 0 то переходим на метку next   
          jne next
          
          mov   ax,4c00h
          int   21h
          end
  • Программирование :: Java
  • Доброго времени суток!

    Код:
        char c = 'Ё';
    Как мне можно получить ASCII-код этого символа? Или только если сам реализую ASCII-кодировку?

    Прогуглил: в основном предлагают решить проблему следующим образом:
    Код:
        int i = (int)c;
    но это же полная ерунда.
  • Программирование :: Программирование 1С
  • Подскажите с чего начать в 1с работаю сис админом упала 1с как снег на голову не знаю с какой стороны начинать
  • Операционные системы :: Unix и другие
  • Доброго времени суток! У меня тривиальный может быть вопрос.

    ОС: FreeBSD 8.2

    На ОС работает PPPoE подключение к интернету. Провайдер фильтрует трафик по IP и MAC (ну пароли и логин естественно). На FreeBSD  один физический сетевой интерфейс.

    Задача - наладить раздачу интернета на внутреннюю подсеть.

    Действия: На сетевой карте ОС (192.168.0.171 255.255.252.0) создан алиас (192.169.1.1\24) адрес сервера провайдера 192.168.0.8 255.255.252.0, в rc.conf добавлены записи:
                                                                          defoultrouter="192.168.0.8"
                                                                          gateway_enable="YES"
    Результат: Хосты подсети сервера и ОС из внутренней подсети (для которой алиас) пингуются, хост с ОС установлен на компьютерах домашней подсети (для которой алиас на ОС) как маршрут по умолчанию. ИНТЕРНЕТ не идет. Хосты дома WINDOWS XP.




    ВОПРОСЫ:1) Т.К. провайдер фильтрует по IP может дело в том что необходим NAT
                      2) В компьетерах Windows как DNS указывать такой же как и на ОС Free?
                      3) Поделитесь опытом пожалуйста!
  • Направления программирования :: Drivers
  • Привет всем.

    Есть устройство выполненное на AT91SAM7S - подробнее на <реклама почикана>.
    Для РС обозначено как СОМ-порт. Из драйверов только INF-файл, указывающий на штатный для Windows драйвер usbser.sys

    В микроконтроллере инициализирован штатный внутренний загрузчик (SAM-BA). Этот загрузчик прошит на заводе (масочное ПЗУ) и я пытаюсь через свою программу с ним связаться и залить в МК свою прошивку.
    Проблема в том что, при работе с SAM-BA, на некоторых материнских платах, с не-INTEL чипсетами обмен между ПО на РС и устройством может прерываться.
    Т.е. первый запрос в устройство через WriteFile проходит (2 байта), далее чтение через ReadFile (2 байта) тоже отлично.
    Далее новый запрос. Но функция ReadFile вылетает по таймауту.

    Утилита работает с устройством не как с СОМ-портом, а как с USB устройством.
    Т.е через "SetupDiEnumDeviceInterfaces" находится устройство с нужным VID/PID затем извлекается хэндл и, далее, уже стандартно, открывается через CreateFile. Далее все как обычно - ReadFile/WriteFile

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

    В приложении функции ввода-вывода и реализованный протокол загрузчика SAM-BA
  • В общем он мне нужен для курсового по Системному программированию, но это для красного словца.
    Суть в том что я пытаюсь разобраться в тех исходниках которые идут в комплекте с WDK (конкретно C:\WinDDK\7600.16385.1\src\usb\usbsamp)
    Компилирую:
     
    Цитировать
    • Run the build –ceZ command in the usbsamp directory to build usbsamp.sys and usbsamp.exe.
    • Copy KMDF coinstaller (wdfcoinstallerMMmmm.dll), usbsamp.sys, usbsamp.exe, and usbsamp.inf to a floppy disk or a temporary directory on the target system.

    - все в порядке, даже файлик wdfcoinstaller01009.dll - докладываю в папочку

    Но на этапе установки вылезают косяки:
     1. в руководстве сказано

    Цитировать
    Make sure your device has been programmed with the device VID/PID in the USBSAMP.inf file. If not, edit the device VID, PID, and description text to match your test board/device.

      - не могу понять что требуется, и как там убедиться в правильности...
     2. Ну и далее при через установку нового оборудования устанавливаю драйвер - (он в начале ругался и ставился с ошибкой 10 - не запускается, не требует ресурсов...) - и находиться в Диспетчере устройств не в категории USB, а в новой категории Sample Device - вот эта проблемма как была так и осталась, хотя должно быть так -
     
    Цитировать
    You should be able to see the device in the Device manager under "Universal Serial Bus controllers

    ну и соответственно не работает

    пробовал устанавливать с помощью KmdManager - устанавливается успешно - но запуститься не может. Пишет "файл не найден" - очень подробно и понятно, блин...

    теперь для полной картины выкладываю изображения:

    (http://xmages.net/storage/10/1/0/1/8/thumb/thumb_a1cea530.jpg)   (http://xmages.net/storage/10/1/0/d/d/thumb/thumb_edf17fd0.jpg)   (http://xmages.net/storage/10/1/0/8/0/thumb/thumb_6234f736.jpg)   (http://xmages.net/storage/10/1/0/c/1/thumb/thumb_a67cd449.jpg)


    -----------------------------------------------------------
    • Ну и, в общем, то что делать?   :confused:
    • А за одно, туда ли я полез... там еще есть "usbview", и osrusbfx2\kmdf - хотя то ли это, что мне нужно?
  • Стоит задача определить время загрузки Windows, в том числе всех драйверов.
    Ставлю загрузку своего драйвера самым первым (проверяю этот факт через программу LoadOrder [http://technet.microsoft.com/en-us/sysinternals/bb897416]),
    потом пробую перехватить загрузку драйверов через CallBack функцию установленную через PsSetLoadImageNotifyRoutine.
    Проблема в том что в перехватчик, установленный через PsSetLoadImageNotifyRoutine попадают только драйвера с флагом загрузки =1(SERVICE_SYSTEM_START),
    а с флагом 0(SERVICE_BOOT_START) не отлавливаются! :(
    Хотелось бы перехватить запуск всех драйверов, начиная с sptd.sys и acpi.sys, может есть ещё какие-нибудь способы?

    P.S. Перехват NtLoadDriver через SST нежелателен, если вообще возможен на первоначальном этапе загрузки ОС.
  • Направления программирования :: Web :: Непрограммистские вопросы по web
  • Доброго времени суток уважаемые форумчане. Я всего лишь любитель поэтому строго не судите) Есть проблема: нужно сделать стартовую страницу для сайта, на фоне должна быть картинка и должна она быть подогнана под окошко, т.е. независимо какой монитор у пользователя 17" или 19" она должна быть на весь экран (что бы небыло полос прокрутки по вертикали и горизонтали). Как лучше сделать стартовую страницу флешкой или же нужен какой то скрипт который будет считывать разрешение экрана пользователя и в зависимости от этого загружать с сервера фон определенного разрешения? Очень прошу вашей помощи.
  • Учимся программировать :: Начинающим
  • Доброго времени,помогите пожалуйста разобраться почему не отображается окно :

    Код: (cpp)
    #include <afxwin.h>

    int main(int argc, char* argv[])
    {
        class MFC_Tutorial_Window :public CFrameWnd
        {
            public:
            MFC_Tutorial_Window()
           {
                Create(NULL,"MFC Tutorial Part 1 CoderSource Window");
           }

       };

       class MyApp :public CWinApp
       {
           MFC_Tutorial_Window *wnd;
           public:
          BOOL InitInstance()
          {
               wnd = new MFC_Tutorial_Window();
               m_pMainWnd = wnd;
               m_pMainWnd->ShowWindow(SW_SHOW);
               m_pMainWnd->UpdateWindow();
               return TRUE;
           }
        };

    MyApp theApp;
    }

    Спасибо)
  • Я только начинаю обучаться программированию в 1с. Но так и не смог найти самый простешеи отчет, всегда попадались с наворотами, откуда новичку трудно выявить алгоритм построения. А хотелось бы начать с травиального и постепенно переходить на более сложные конструкци.

    Помогите создать небольшой  отчетик: по нажатию кнопки "сформировать" выводилась таблица с ФИО сотрудников + нужно, чтобы можно было сделать выборку по полу.

    И, если не трудно, то еще объясните конструкцию модуля(т.е какое действие что делает)...Я немного алгоритм понимать начал, но еще раз закрепить не помешает...

А теперь прощаемся с Вами до следующего выпуска.


С уважением, команда Клуба.


В избранное