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

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


Клуб профессиональных программистов "Весельчак У"
Информационная рассылка сайта и форума.  Выпуск No83 (2009-12-14).

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

Сегодня в выпуске:




Нам уже 7 лет!!!

Поздравляем всех читателей рассылки с днем рождения нашего клуба!

Оставайтесь с нами и вступайте в наши ряды — мы всегда рады умным и любознательным!



Содержание.



Вступление ко второй части.


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

В этой части рассмотрим реализацию, достоинства и недостатки вариантов реализации подобия SEQUNCE на базе команд UPDATE и SELECT.


На базе MYISAM и UPDATE/SELECT.


Многие, кто пытаются реализовать в MySQL механизм, похожий на оракловый SEQUNCE, почему-то обязательно хотят, чтобы приращение было регулируемым — не строго равным единице. Что ж, давайте с этого и начнем.

Сперва сделаем реализацию на таблицах формата MYISAM. На ум сразу приходит что-то подобное:


Код: (sql)
CREATE TABLE sequences

(
  name VARCHAR(16) NOT NULL,
  curr_value BIGINT UNSIGNED NOT NULL,
  inc_value BIGINT UNSIGNED NOT NULL,
  PRIMARY KEY (name)
) ENGINE=MYISAM;

В принципе, можно добавить больше условий — скажем, ограничить конечное значение, управлять переполнением (переполнить BIGINT — непростая задача) и т.п. Но мы не будем усложнять задачу.

Напишем пару процедур для создания и удаления записей.

...


Целиком прочесть статью можно на нашем сайте, в разделе «Базы данных::MySQL».


Содержание.



Вводная.


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


Информация о таблицах и столбцах.


MySQL предоставляет информацию об объектах баз данных через специальную схему «INFORMATION_SCHEMA». Например, так выглядит состав таблиц этой схемы в MySQL 5.0:


Код:
mysql> SHOW TABLES FROM information_schema;

+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| CHARACTER_SETS                        |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS                               |
| COLUMN_PRIVILEGES                     |
| KEY_COLUMN_USAGE                      |
| PROFILING                             |
| ROUTINES                              |
| SCHEMATA                              |
| SCHEMA_PRIVILEGES                     |
| STATISTICS                            |
| TABLES                                |
| TABLE_CONSTRAINTS                     |
| TABLE_PRIVILEGES                      |
| TRIGGERS                              |
| USER_PRIVILEGES                       |
| VIEWS                                 |
+---------------------------------------+
17 rows in set (0.00 sec)

Информация о колонках:


Код:
mysql> DESC information_schema.columns;

+--------------------------+--------------+------+-----+---------+-------+
| Field                    | Type         | Null | Key | Default | Extra |
+--------------------------+--------------+------+-----+---------+-------+
| TABLE_CATALOG            | varchar(512) | YES  |     | NULL    |       |
| TABLE_SCHEMA             | varchar(64)  | NO   |     |         |       |
| TABLE_NAME               | varchar(64)  | NO   |     |         |       |
| COLUMN_NAME              | varchar(64)  | NO   |     |         |       |
| ORDINAL_POSITION         | bigint(21)   | NO   |     | 0       |       |
| COLUMN_DEFAULT           | longtext     | YES  |     | NULL    |       |
| IS_NULLABLE              | varchar(3)   | NO   |     |         |       |
| DATA_TYPE                | varchar(64)  | NO   |     |         |       |
| CHARACTER_MAXIMUM_LENGTH | bigint(21)   | YES  |     | NULL    |       |
| CHARACTER_OCTET_LENGTH   | bigint(21)   | YES  |     | NULL    |       |
| NUMERIC_PRECISION        | bigint(21)   | YES  |     | NULL    |       |
| NUMERIC_SCALE            | bigint(21)   | YES  |     | NULL    |       |
| CHARACTER_SET_NAME       | varchar(64)  | YES  |     | NULL    |       |
| COLLATION_NAME           | varchar(64)  | YES  |     | NULL    |       |
| COLUMN_TYPE              | longtext     | NO   |     | NULL    |       |
| COLUMN_KEY               | varchar(3)   | NO   |     |         |       |
| EXTRA                    | varchar(20)  | NO   |     |         |       |
| PRIVILEGES               | varchar(80)  | NO   |     |         |       |
| COLUMN_COMMENT           | varchar(255) | NO   |     |         |       |
+--------------------------+--------------+------+-----+---------+-------+
19 rows in set (0.00 sec)

Зачем я это рассказываю? Затем, что если вы будете писать руками SQL-запрос для каждой таблицы в схеме да еще и для каждого подходящего столбца — можно смело менять профессию, т.к. это точно не ваше. Нормальный человек найдет обобщенное решение, без тупого и бессмысленного труда. Это решение — создать необходимые запросы автоматически, и поможет нам в этом информация о таблицах и столбцах из таблицы «COLUMNS».

Нам нужно отобрать таблицы, в которых есть колонки подходящих для нас типов: CHAR, VARCHAR, TEXT и т.п. Всего 12 типов. Фильтровать будем по полю «DATA_TYPE». Такой запрос наглядно показывает типы столбцов в таблицах схемы «test»:


Код:
SELECT table_name, column_name, data_type

FROM information_schema.columns
WHERE table_schema = 'test'
  AND data_type IN (
    'char', 'varchar', 'binary', 'varbinary',
    'tinytext', 'text', 'mediumtext', 'longtext',
    'tinyblob', 'blob', 'mediumblob', 'longblob'
  );

Если не на чем экспериментировать, воспользуйтесь этой таблицей:


Код:
CREATE TABLE `t2` (

  `f_vch` varchar(10) default NULL,
  `f_bin` varbinary(10) default NULL,
  `f_tblob` tinyblob,
  `f_blob` blob,
  `f_ttext` tinytext,
  `f_text` text,
  `f_ltext` longtext
);

Генерация SQL-кода.


Составим SQL-запрос, который создаст нам набор SQL-запросов для каждой таблицы указанной схемы.

...


Целиком прочесть статью можно на нашем сайте, в разделе «Базы данных::MySQL».


  • Программирование :: Технологии разработки программных систем
  • А что такое статический полиморфизм (от одного словосочетания меня бросает в жар)? Видать в развитии С++ я чего то упустил? Где про это почитать?
  • Программирование :: .NET технология от и до
  • Может, кто-нибудь знает штатное средство в .NET, умеющее печатать строчку по формату, заданному в стиле C-шного printf?

    Т.е. на входе имеется строка типа "f%04ds", как с её помощью в .NET получить серию строк вида "f0000s", "f0001s" и т.д.

    Как-то не радует перспектива писать свой конвертор C-style форматных строк в .NET-style форматные вида "f{0:0000}s".
  • Ситуация:
    рабочая - студия 2005, еще на днях установила 2008+sp1.

    есть dll на managed+unmanaged c++. Компилируется без проблем.
    При просмотре с помощью dependency walker-а показывает, что эти 3 длл-лины не найдены на компе.
    Сделала ход конем - посмотрела эту длл-лину на машинах коллег - у них все выглядит пристойно...(кстати, на обеих машинах есть, как и на моей, обе студии).

    Вопрос - где прописывается путь к этим длл-лям?
  • Здравствуйте. Пишу на MS VS 2008. Моя программа блокирует доступ пользователя на определенное время (время отдыха), после окончания  времени работы пользователя (по сути программа-таймер). Для блокирования клавиатуры использовал глобальный хук (WH_KEYBOARD_LL) в основу написания лег материал с http://www.sql.ru/forum/actualthread.aspx?tid=632552 + блокирование диспетчера задач, через изменение реестра.
    Задача: с помощью хука (WH_MOUSE_LL) заблокировать доступ к мыше.
    Вопрос:
     Не знаю как совместить хук клавиатуры и мыши.
    Программа:
    Код:
    .....
            //Функция установки хука
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

            //Функция снятия хука
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern bool UnhookWindowsHookEx(IntPtr hhk);

            //Функция передачи информации следующему приложению "слушающему" клавиатурные события
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);

            [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr GetModuleHandle(string lpModuleName);
    ....
            private const int WH_KEYBOARD_LL = 13;
            private const int WM_KEYDOWN = 0x0100;
            private static LowLevelKeyboardProc _proc = HookCallback;
            private static IntPtr _hookID = IntPtr.Zero;
    ....
    //*******************Функции для работы с Hook*****************************
            private void SetHook(LowLevelKeyboardProc proc)
            {
                if (_hookID != (IntPtr)0) return;  //исключаем повторный хук
                Process curProcess = Process.GetCurrentProcess();
                ProcessModule curModule = curProcess.MainModule;
                _hookID = SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
            }
           

            private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);

            // Функция которая обрабатывает события клавиатуры
            private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
            {
                return (IntPtr)1;
            }
    ....
    private void timerRest_Tick(object sender, System.EventArgs e)
           {
                //присвоим делегат одной из переменных-членов класса, чтоб сборщик мусора не убрал
                // его после окончания первого же вызова функции
                _proc = new LowLevelKeyboardProc(HookCallback);
                // Включение режима
                KillCtrlAltDelete();//блокируем диспетчер задач
                SetHook(_proc); // устанавливаем хук         
                           countSec++;
               
    // счетчик отдыха достиг порогового времени
    if(countSec >= timeRest)
    {
    // оповещение пользователя
    this.notifyIcon.Text = "Таймер не запущен!";

    // отдохнули - можно приcтупать к работе
                    // Выключение режима работы             
                    LiveCtrlAltDelete();//Возобновляем работу диспетчера задач
                    bool b = UnhookWindowsHookEx(_hookID);// снимаем хук
                    if (b == false)
                    {
                        throw new Exception("UnhookWindowsHookEx");
                    }
                                                    countSec = 0;
    timerRest.Stop();
    strPrompt = "Работа!";
    pictureBox1.Invalidate();
    panel1.Visible = false;
    ....
                                 }


    }
  • Здравствуйте! У меня возникла следующая проблема - сжать текстовый файл (с расширением txt) за алгоритмом  GZIP. Вот нашел материал по нему:
    msdn.microsoft.com/ru-ru/libr...zipstream.aspx

    Суть проблемы в том, что компрессия не выполняется! То есть, после того, как я выполнил компиляцию, мне выдало, что компрессия выполнилась, и написан размер файла после компрессии -то есть написано, что сжатие выполнилось, захожу на диск, смотрю свойства этого файла - размер не изменился. Вопрос: почему?

    Вот текст программы:
    Код:
    using System;
    using System.IO;
    using System.IO.Compression;

    public class GZipTest
    {
        private const int buffer_size = 100;

        public static int ReadAllBytesFromStream(Stream stream, byte[] buffer)
        {
            // Use this method is used to read all bytes from a stream.
            int offset = 0;
            int totalCount = 0;
            while (true)
            {
                int bytesRead = stream.Read(buffer, offset, buffer_size);
                if (bytesRead == 0)
                {
                    break;
                }
                offset += bytesRead;
                totalCount += bytesRead;
            }
            return totalCount;
        }

        public static bool CompareData(byte[] buf1, int len1, byte[] buf2, int len2)
        {
            // Use this method to compare data from two different buffers.
            if (len1 != len2)
            {
                Console.WriteLine("Number of bytes in two buffer are different {0}:{1}", len1, len2);
                return false;
            }

            for (int i = 0; i < len1; i++)
            {
                if (buf1[i] != buf2[i])
                {
                    Console.WriteLine("byte {0} is different {1}|{2}", i, buf1[i], buf2[i]);
                    return false;
                }
            }
            Console.WriteLine("All bytes compare.");
            return true;
        }

        public static void GZipCompressDecompress(string filename)
        {
            Console.WriteLine("Test compression and decompression on file {0}", filename);
            FileStream infile;
            try
            {
                // Open the file as a FileStream object.
                infile = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
                byte[] buffer = new byte[infile.Length];
                // Read the file to ensure it is readable.
                int count = infile.Read(buffer, 0, buffer.Length);
                if (count != buffer.Length)
                {
                    infile.Close();
                    Console.WriteLine("Test Failed: Unable to read data from file");
                    return;
                }
                infile.Close();
                MemoryStream ms = new MemoryStream();
                // Use the newly created memory stream for the compressed data.
                GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Compress, true);
                Console.WriteLine("Compression");
                compressedzipStream.Write(buffer, 0, buffer.Length);
                // Close the stream.
                compressedzipStream.Close();
                Console.WriteLine("Original size: {0}, Compressed size: {1}", buffer.Length, ms.Length);
                Console.ReadKey();

                
            } // end try
            catch (InvalidDataException)
            {
                Console.WriteLine("Error: The file being read contains invalid data.");
            }
            catch (FileNotFoundException)
            {
                Console.WriteLine("Error:The file specified was not found.");
            }
            catch (ArgumentException)
            {
                Console.WriteLine("Error: path is a zero-length string, contains only white space, or contains one or more invalid characters");
            }
            catch (PathTooLongException)
            {
                Console.WriteLine("Error: The specified path, file name, or both exceed the system-defined maximum length. For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.");
            }
            catch (DirectoryNotFoundException)
            {
                Console.WriteLine("Error: The specified path is invalid, such as being on an unmapped drive.");
            }
            catch (IOException)
            {
                Console.WriteLine("Error: An I/O error occurred while opening the file.");
            }
            catch (UnauthorizedAccessException)
            {
                Console.WriteLine("Error: path specified a file that is read-only, the path is a directory, or caller does not have the required permissions.");
            }
            catch (IndexOutOfRangeException)
            {
                Console.WriteLine("Error: You must provide parameters for MyGZIP.");
            }
        }

        public static void Main(string[] args)
        {

            string usageText = @"C:\Копия lngcode12.txt";
            //If no file name is specified, write usage text.
            
                if (File.Exists(usageText))
                {
                    GZipCompressDecompress(usageText);
                Console.ReadKey();
            }
        }
    }


  • Скажите, пожалуйста, как правильно преобразовать в С# из текстового "-1,5" в double.
    Пробовала через Double.Parser.Sys....CultureInfo.GetCultureInfo. Положительные числа преобразовывает, а отрицательные нет.
  • Программирование :: .NET технология от и до :: WinForms
  • Привет всем...
    У меня такая проблема: скачал класc для работы с COM портом (я так подозреваю, это класc MFC)
    Я сделал приложение в Windows Forms и пытаюсь в это приложение экспортировать этот класc следующим образом:
    Код:
    extern "C" class __declspec (dllexport)  SerialGate
    {   
    public:
       
        enum IN_LINES_NAME {CTS, DSR, RING, RLSD};
        enum OUT_LINES_NAME {DTR, RTS};   
     
        SerialGate();
        ~SerialGate();   
     
        bool Open(int port, int baud);   
        int Send(char* buff, int szBuff);
        int Recv(char* buff, int szBuff);   
        void SetLine(OUT_LINES_NAME ln, bool state);
        bool GetLine(IN_LINES_NAME ln);
        void GetPortsInfo(PortInfo* pi);
        void Close();
        void Clean();
     
    private:
        HANDLE m_hFile;
        bool state;
    };

    и компилятор по этому поводу ругается...
    Подскажите синтаксис экспорта/импорта классов, функций из DLL, искал на MSDN, так по поводу импорта в FORMах ничего нет (или плохо искал)....
  • Программирование :: С/С++
  • Код:
    // загрузка изображения, 5.bmp - имя файла
    HBITMAP hBmp = (HBITMAP)LoadImage(NULL, "5.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    //отображаем изображение
    CPaintDC dc(this);
    ::DrawState (dc.m_hDC, NULL, NULL, (WPARAM)hBmp, (LPARAM)0, 0,0, 1280, 768, DST_BITMAP);
    CDialog::OnPaint();
    Для вывода изображения на экран надо прописать этот код в ::OnPaint(), потому что, если написать данный код в ::OnButton1(), то ничего происходить не будет.
    Хотелось бы узнать, как связать нажатие кнопки с выводом изображения?
  • Как в дебиане через g++ скомпилировать *.exe, который запустится из под win32 ( xp sp2) ?

    ... +4h

    Что-то не понял, в чем проблема, 4 часа искал документацию, прочитал гору всякой информации, в итоге ничего так и не понял ... плюнул на все, набрал:

    apt-get install mingw32
    i586-mingw32msvc-g++ имя_первого_попавшегося_исходника_с_майн

    Тут же получил a.exe
    перенес его на хост xp и запустил: все почему-то работает.

    Единственное, что смущает - так не бывает, никогда так не бывало и не бывает.

    P.S. Ну, разве что файл *.exe более 1 метра, при том же ельфе в 39 кб

    ...
    До сих пор не мог поверить, что не потребовалось копировать dll для запуска, проверил depends.exe: оказалось, слинкована с kernel32 msvcrt, ну и через них тянет ntdll

    P.P.S. Попробую сейчас посмотреть, что там так много места занимает
  • Программирование :: С/С++ :: ANSI С/С++
  • Много раз встречал на форуме мнение, что определение своих дефайнов в программе - зло. Но лично я ими пользуюсь и иногда просто невозможно без них (не теряя при этом в удобстве)

    вопрос к противникам этого чуда - какой посоветуете использовать аналог дефайна, против которого Вы не, но который полностью заменит дефайн ?
  • Классический способ передачи параметров по указателю
    void display_values(int *a, int *b) {
    *a=1000; *b=1                                                          
                                                          }
    void main() {
    int a= 2002, b = 0;
    display_values(&a, &b);
    pruntf(“%i %i”,a,b);  //стало a=1000; b=1;

    почему-то не работает в условиях рекурсивного вызова:

    void iter(double a, double b,double x0,double x1,int N,int i,double *X,double *sum)
    { //восходящая рекурсия
       double x2;
       x2=a*x1+b*x0;
       if (i==N){
       *X=x2;//здесь *X получает ненулевое значение
              // а проверяя значение 6 параметра (*X) после вызова вижу что он=0?!!!

        return;
                }
       else      {
         x0=x1;x1=x2 ;
         iter(a,b,x0,x1,N,i+1,&X, &sum);
           // (*sum)+=*X; //а здесь вообще ошибка выполнения
                 };
    }
  • Программирование :: С/С++ :: WinAPI & Visual C++
  • Народ, подскажите! Не могу додуматься.
    Есть готовый самописный класс для работы с сокетами. Как отправить письмо, в инете и на форумах завались. А как файлик прикрепить? Есть варианты его открыть для чтения и считать в буфер. А как сказать, что этот текст надо как файл интерпретировать? Есть вариант сделать что-то типа того, что выдает The Bat! при запросе исходного текста письма с присоед. файлом. В общем народ, помогите пожалуйста!
  • Здравствуйте.
    Пишу программу, которая получает текст html-страницы и выбирает русские слова.

    Однако проблема состоит в том, что некоторые сайты вместо русских букв выводят какую-то совершенно непонятную ерунду. Яркий тому пример yandex.ru. Если заменить адрес сайта, например, не яндекс, а, скажем, google.ru, то все русские буковки выводятся замечательно. Понимаю, что дело в кодировках этих самых сайтов, а как же тогда из этой кодировки получить нормальный русский текст?

    Код:
     char fileURL[] = "http://www.yandex.ru";
    int i;

    HINTERNET hSession = InternetOpen(L"Internet Explorer", INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);

    HINTERNET hURL;
    const int BufferSize = 80000; // берем массив с избытком, на всякий случай
    char Buffer[BufferSize];
    DWORD BufferLen;

    //обнуляем весь массив, иначе в конце массива будет записана всякая ерунда
    for (i=0; i<BufferSize; i++){
    Buffer[i]='\0';
    }

    hURL = InternetOpenUrlA(hSession,fileURL,0,0,INTERNET_FLAG_NO_COOKIES,0);

    // весь html-файл считываем за раз
    InternetReadFile(hURL, Buffer, sizeof(Buffer), &BufferLen);

    InternetCloseHandle(hURL);
    InternetCloseHandle(hSession);
  • Народ, помогите, если знаете как!
    Требуется программно получить список беспроводных сетей и предложить их список пользователю на выбор. Можно как-то? HELP!!! :fie:
  • Решил на досуге отойти от сишного SOCKET к MFCшному CAsyncSocket. Но где-то не понимаю, помогите разобраться!

    Раньше было:
    Код:
    SOCKET DataStreamUDPServer;
    bind(DataStreamUDPServer, (const SOCKADDR*)&data_SocketService, sizeof(data_SocketService));

    // создаю нить процесса, в котором:
    ret=recvfrom(DataStreamUDPServer,tmpArray,DataMsgLength,NULL,(sockaddr*) &from_addr, &from_len)

    теперь хочется, чтоб вот это работало:
    Код:
    CAsyncSocket DataStreamUDPServer;

    //(прочёл что на стороне сервера CREATE делать не надо... пробовал и с ним и без него - не выходит)

    DataStreamUDPServer.Bind((SOCKADDR*)&socket, sizeof(socket));

    // создаю нить процесса, в котором:
    ret=DataStreamUDPServer.ReceiveFrom(tmpArray, DataMsgLength, (sockaddr*) &from_addr, &from_len);

    в последнем случае ret всегда = -1. То есть, SOCKET_ERROR
    Гляжу в Watch'ах сразу после бинда:  DataStreamUDPServer.m_hSocket = 0xFFFFFFFF (т.е. -1)

    Где я не прав?
  • Программирование :: Delphi
  • Есть уже готовое разработанное приложение, предложили его продать. Но , естесственно, клиенту хочется сначала попробовать поработать и понять надо ему такое или нет. Подскажите, пожалуйста, какие действия можно добавить в код, чтобы была trial версия?
  • Программирование :: Программирование 1С
  • Здравствуйте.
    1с 8.0. УТ.Режим серверный
    Подскажите, наверняка кто-то из вас, программистов 1с, делает «срез» базы . Поделитесь опытом.
    Как выделаете - так:

        1.  Вы формируете остатки в той же базе на определенную дату
        2.  Удаляете старые документы в той же базе
       А. сначала установка пометки на удаление, потом удаление стандартными средствами
       Б.  или может без пометки на удаление, а используете непосредственное удаление

    или, может, вы делаете «срез» вот так:

       1.  Вы формируете остатки в той же базе на определенную дату
       2.   В новую базу переносите документы, справочники, независимые регистры накопления …
  • Вечер добрый! Для вывода результата запроса использую макет типа ТабличныйДокумент. Названия колонок соответствуют выбираемой номенклатуре. Хочу каждую колонку разделить еще на две, по одной будет КоличетвоЗаказов по данной номенклатуре, а по другой Количество этой номенклатуры на складе. Получается каждая колонка отражает названия номенклатуры и ниже делится еще на две. Подскажите как правильно это реализовать? Заранее Спасибо!
  • Здравствуйте!
    Собираюсь изучать 1С на уровне программирования(конфигурирования). Какие экономические дисциплины нужно знать, чтобы эффективно создавать конфигурации, понимать язык клиента и его потребности?
    У меня нет экономического образования и нет возможности поступать в институт. Имею небольшой опыт программирования на Си и С++ , как в консольном так и в событийном формате.
    Я так понимаю, что знать, минимум, нужно бухгалтерию.
    А что еще? Подскажите, пожалуйста, литературу.
  • Работаю в 1с Канцелярия. Там один отчет сделан через построитель отчетов. Никак не могу сделать так, чтобы страница была не книжного вида, а альбомного.  Пробовала в настройках параметров печати поставить ландшафтная. Поставилось, но при переходе в режим конфигурирования параметры остались, как портрет. Так что писала в коде:

    ПостроительОтчетаОтчет.Макет.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;

    Тоже не прокатило. Товарищи! Помогите!!!!
  • Добрый вечер! Делаю отчет по комплектам и по их состАвляющим. Для вывода результатов использую сводную таблицу, по строкам которой у меня комплектующие, а по колонкам - сами комплекты. Вроде, все как и нужно, но итоговые колонки мешают. Подскажите, как эти итоговые колонки выключить или скрыть? А может, можно не сводной таблицей данную задачу организовать?! Заранее спасибо за советы
  • Программирование :: Программирование 1С :: 1С 7.x
  • Подскажите как в стандартную обработку Печать прайса добавить столбец со Значением Свойств Номенклатуры в 7.7
    В свойствах забит производитель.
  •      Доброе, Уважаемые ЗНАТОКИ!
         У меня 1 С: Предприятие 7.7 (7.70.027) - сетевая, КОНФА "Бухгалтерский учет" для Украины (7.70.275).
      
    Два небольших вопроса:

      1. Необходимо изменить количество знаков после запятой переменной ПечЦенаБезНДС в печатной форме, В МОДУЛЕ, налоговой накладной с 2-х на 5.
        Т.е., допустим, сейчас на печать выводится так: 0,43 (округленно), а нужно, чтобы на печать выводилось так: 0,42753 (с разрядностью в 5 цифр после запятой).

      2.  Необходимо изменить количество знаков после запятой переменной КоличествоДляНН в печатной форме, В МОДУЛЕ, налоговой накладной с 0 на 3.
        Т.е., допустим, сейчас на печать выводится так: 1234 (целое число), а нужно, чтобы на печать выводилось так: 1234,789 (с разрядностью в 3 цифры).
     
         Примечание: не могу сообразить, что конкретно сделать и где именно в МОДУЛЕ печатной формы налоговой накладной поменять цифры для корректного отображения цены и количества. В идеале, если кто-то напишет и вывесит весь МОДУЛЬ, т.е. уже исправленный.

                     Огромное СПАСИБО за помощь!
                     Жду сообщений.
  • Программирование :: Программирование 1С :: 1С 8.x
  • Платформа 8.1, УТ 10.3.7.9

    ИначеЕсли (Докум.Метаданные().Имя = "РеализацияТоваровУслуг") ИЛИ (Докум.Метаданные().Имя = "РасходныйОрдерНаТовары") ИЛИ
                     (Докум.Метаданные().Имя = "ПриходныйОрдерНаТовары") ИЛИ (Докум.Метаданные().Имя = "ПоступлениеТоваровУслугВНТТ") ИЛИ
                     (Докум.Метаданные().Имя = "ПоступлениеТоваровУслуг") ИЛИ (Докум.Метаданные().Имя = "ОтчетКомиссионераОПродажах") ИЛИ
                     (Докум.Метаданные().Имя = "ВозвратТоваровПоставщикуИзНТТ") ИЛИ (Докум.Метаданные().Имя = "ВозвратТоваровПоставщику") ИЛИ
                     (Докум.Метаданные().Имя = "ВозвратТоваровОтПокупателя") Тогда
                ОбластьДанные.Параметры.ПечДок     = Докум.Контрагент;
                ОбластьДанные.Параметры.ПечСеб     = Докум.СуммаДокумента;

    Последняя строчка выводит сумму документа.
    Подскажите, как сделать, чтобы выводил цену товара. Или хотя бы к чему обратиться, что бы разобраться с этим.         
  • Вопрос на засыпку, как мне сделать так, чтобы формировался еженедельный отчет, а также ежемесячный отчет, и какие мне значения надо добавлять. Вывод еженедельных и ежемесячных результатов расчетов производится при помощи формул. Как мне привязать системный календарь к формированию отчета? Например, если закончилась неделя, то при нажатии кнопки "сформировать" выводился отчет за неделю, точно также и ежемесячно, закончился месяц календарный при нажатии на "сформировать" выводится месячный отчет.
  • Добрый день. Мне надо сделать так, чтобы у меня считалось общее количество товара, для этого, как я понял, надо использовать ИТОГИ, но он мне постоянно ругается. Подскажите, что не так делаю?
    Код:
    ВЫБРАТЬ
    ПриходнаяНакладнаяМатериалы.Материал,
    ПриходнаяНакладнаяМатериалы.Количество,
    ПриходнаяНакладнаяМатериалы.Цена
    ИЗ
    Документ.ПриходнаяНакладная.Материалы КАК ПриходнаяНакладнаяМатериалы

    УПОРЯДОЧИТЬ ПО
    ПриходнаяНакладнаяМатериалы.Количество,

    ИТОГИ СУММА(Количество)ПО ПриходнаяНакладнаяМатериалы.Количество

    Одна и та же ошибка на двух платформах, но по книге, вроде, делаю правильно.
  • Я бы хотела писать курсовую работу в институте по 1с:предприятие.по начислению заработной платы.
    Адаптация системы к специфике конкретной фирмы.
    Вся проблема состоит в том, что мне нужно конкретно обозначить, что в типовой конфигурации надо менять, что там есть и что нужно мне.
    Насколько я поняла, в 1с можно настроить под организации с помощью проставления галочек в необходимых полях, а можно и что-то программировать для специфики.
    Мой вопрос таков: когда выбирается программирование, а когда просто проставление галочек?
    И где само программирование осуществляется, я так  и не поняла. То есть, куда нужно заходить, чтобы открыть сам модуль программы.
    Если вдруг кто знает какие полезные ссылки, буду очень благодарна!
    Заранее спасибо!
  • Помогите, как создать отчет по менеджерам: Кто сколько продал?

    Стоит 1с, 8.0. Управление Торговлей
  • Операционные системы :: Windows
  • Абстрактрый вопрос: имеется "A.dll" , неважно, что в ней содержится. Эту dll используют несколько приложений. Важно обеспечить, чтоб файл dll, используемый приложениями, был одинаков, это проще всего сделать, если dll - физически один файл, а приложения цепляют её. Какие проблемы возможны, если использовать несколько абсолютно точных копий dll, то есть, фактически, разные приложения будут цепляться к разным dll (разным файлам, но ведь эти файлы - точные копии!)?

    Если запутал, то на картинках:

    первый вариант - файл DLL один
    Код:
    1.exe  <-,
    2.exe  <-|--- d:\1\A.dll
    3.exe  <-'

    второй вариант - файлов DLL несколько, но они одинаковые
    Код:
    1.exe  <----- d:\1\A.dll
    2.exe  <----- d:\2\A.dll
    3.exe  <----- d:\3\A.dll

    Всегда ли эти два варианта однозначно одинаково будут работать при условии, что файлы dll - точные копии ?
  • Направления программирования :: Drivers
  • Есть драйвера WDM USB устройства. Под 2000,XP,Vista работаю, а под Win7 нет. Ничего понять не могу.
    Вот фрагмент кода

    Код:
            // now that we have configuration descriptor lets find our interface
            // and enable it
            numInterfaces = configDescriptor->bNumInterfaces;
            interfaceBuffer = interfaceList =
                (PUSBD_INTERFACE_LIST_ENTRY)ExAllocatePoolWithTag(
                                                NonPagedPool,
                                                sizeof(USBD_INTERFACE_LIST_ENTRY) * (numInterfaces + 1),
                                                SELIK_POOL_TAG
                                                );

            if (interfaceBuffer == NULL)
            {
                status = STATUS_INSUFFICIENT_RESOURCES;
                break;
            }

            for (index = 0; index < numInterfaces; ++index)
            {
                interfaceDescriptor = USBD_ParseConfigurationDescriptorEx(
                                        configDescriptor,
                                        configDescriptor,
                                        index,
                                        0,
                                        -1,
                                        -1,
                                        -1
                                        );

                if (interfaceDescriptor != NULL)
                {
                    interfaceList->InterfaceDescriptor = interfaceDescriptor;
                    interfaceList->Interface = NULL;

                    ++interfaceList;
                }
            }

            interfaceList->InterfaceDescriptor = NULL;
            interfaceList->Interface = NULL;

            ExFreePool(urb);
            urb = USBD_CreateConfigurationRequestEx(configDescriptor, interfaceBuffer);
            if (urb == NULL)
            {
                status = STATUS_INSUFFICIENT_RESOURCES;
                break;
            }

            // Здесь код который проверяет наличие endpoint
           ............................

            status = SELIKSubmitUrbSynch(DeviceExtension, urb);  //здесь возвращает статус 0xC000000D (STATUS_INVALID_PARAMETER)
            if (!NT_SUCCESS(status))
            {
                break;
            }

    Вот код SELIKSubmitUrbSynch
    NTSTATUS SELIKSubmitUrbSynch(
        IN  PSELIK_DEVICE_EXTENSION   DeviceExtension,
        IN  PURB                        Urb
        )
    {
        NTSTATUS            status;
        PIRP                irp;
        IO_STATUS_BLOCK     ioStatus;
        KEVENT              event;
        PIO_STACK_LOCATION  irpStack;

        SELIKDebugPrint(DBG_IO, DBG_INFO, __FUNCTION__"++");

        KeInitializeEvent(&event, NotificationEvent, FALSE);

        irp = IoBuildDeviceIoControlRequest(
                IOCTL_INTERNAL_USB_SUBMIT_URB,
                DeviceExtension->LowerDeviceObject,
                NULL,
                0,
                NULL,
                0,
                TRUE,
                &event,
                &ioStatus
                );

        if (irp != NULL)
        {
            irpStack = IoGetNextIrpStackLocation(irp);
            irpStack->Parameters.Others.Argument1 = Urb;

            status = IoCallDriver(DeviceExtension->LowerDeviceObject, irp); //здесь возвращает статус 0xC000000D (STATUS_INVALID_PARAMETER)
            if (status == STATUS_PENDING)
            {
                KeWaitForSingleObject(
                    &event,
                    Executive,
                    KernelMode,
                    FALSE,
                    NULL
                    );
               
                status = ioStatus.Status;   
            }
        }
        else
        {
            status = STATUS_INSUFFICIENT_RESOURCES;
        }

        SELIKDebugPrint(DBG_IO, DBG_INFO, __FUNCTION__"--. STATUS %x", status);

        return status;
    }

    Что ему не хватает, понять не могу.  :dontknow:
  • Помогите получить путь к файлу типа с:\folder\file.exe из пути \Device\HarddiskVolume1\folder\file.exe
    То есть узнать DOS имя файла из native имени, а то юзеру стыдно показать такой путь, ведь все привыкли к именам, начинающемся с буквы.

    Немного я раскопал:
    Символьные ссылки  на устройства типа \Device\HarddiskVolume1 или \Device\CdRom0 можно узнать послав запрос  IOCTL_MOUNTMGR_QUERY_POINTS к устройству монтирования MOUNTMGR_DEVICE_NAME.
    Но если файл с флешки, то полный путь будет типа \Device\Harddisk1\DP(1)0-0+3\folder\file.exe
    А для \Device\Harddisk1\DP(1)0-0+3 уже нельзя получить символьные ссылки тем же способом. [IoCallDriver() выдаёт ошибку STATUS_OBJECT_NAME_NOT_FOUND]

    Я уж молчу про файлы, которые лежат на сетевых дисках, там пути в native формате ещё круче.
    Символьные ссылки на сетевые диски отсутствуют даже в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices. 
  • Направления программирования :: Web :: Серверные скрипты
  • Есть строка 06112009 как ее проще привести к: 6 ноября 2009
    Как я понял, надо описать каждое число
    1 -  январь
    2 -  февряль
    3 - март

    и потом выводить данные.
    Если 1 то выводим месяк как то так?))

    Спасибо.
     
  • Направления программирования :: Web :: Клиентские скрипты
  • Вот, долго мучался, решил написать на форум, аналогов не нашел, чтоб можно было чтт-то подделать или исправить.

    Собственно, чего я хочу:
    1 все  меню - картинками
    2 выпадающее меню вертикальное
    3 действует на клик
    4 выпадающе окно должно быть также картинкой без лишних прокруток внутри окна, на фоне картинки должен быть список ссылок с прокруткой, их много, поэтому должен быть какой-то массив, чтоб можно было этот список редактировать
    5 прокрутка должна быть не просто как в Windows, а чтоб можно было задать свою форму

    Народ, пожалуйста, очень прошу, хорошая задумка, вот только у меня исполнение хромает((( Помогите, пожалуйста.
  • Практические разделы :: Программы
  • Есть отчет, созданный в Crystal Reports 8.5, где можно было модифицировать сгенеренный SQL-запрос руками. Вот запрос и был поправлен, а точнее - в WHERE добавлено выражение. После отчет был импортирован в Crystal Report 10 и сохранен в его формате. В 10-й версии уже нельзя выполнять таких ручных изменений в запросе, но нужно удалить как раз то самое внесенное руками изменение.

    Как быть?..

    Использовать старую копию для 8.5 нельзя, т.к. было много изменений и это равносильно тому, чтобы создать (точнее - нарисовать, т.к. это самая трудоемкая часть) отчет заново. В 8.5. открыть отчет от 10-й версии не получится (проверено).

    Выражение типа такого:

    Код:
    AND ADDRESS.ADDRNR = GET_ADDRESS(...параметры...)

    Проблема в том, что таблица ADDRESS заменена другой (точнее - вьюхой). Приходится пока изголяться и задавать новой таблице алиас ADDRESS.
    Очень не хочется делать все заново...
  • Учимся программировать :: Начинающим
  • Проблема вот в чем:

    Код:
     
          private void button1_Click(object sender, EventArgs e)
            {
              //При нажатии кнопки вызвать новую форму AddServer
                Form AddSe =new AddServer();
                AddSe.Visible = true;
                AddSe.Activate();
              //Если в форме AddServer переменная AllOk равна true
              //то в комбобокс добавить новую строку
                if (WindowsFormsApplication.AddServer.AllOk)
                {
                    comboBox1.BeginUpdate();
                    comboBox1.Items.Add("текст");
                    comboBox1.EndUpdate();
                }
            }

    В свою очередь форма AddServer состоит из двух текстбоксов и кнопки, которая описывается так:

    Код:
            private void button1_Click(object sender,
    EventArgs e)
            {
                string sName = textBox1.Text;
                string sRealm = textBox2.Text;
               // AllOk сделан так -         internal static bool AllOk;
                AllOk = false;
                if (!((sName.Length==null)&&(sRealm.Length==null)))
                {
                    AllOk = true;
                    this.Close();
                }
            }

    В идеале все работает так:
     В первой форме жмем на кнопку - появляется форма AddServer, в ней заполняем текстбоксы, нажимаем "Ок" - AddServer закрывается, и первая форма добавляет строку в комбобокс, жмем "Отмена" - и ничего не добавляется.

    Но!
     Жмем кнопку на первой форме, заполняем поля, жмем "Ок" - AddServer закрывается и... ничего не происходит. Жмем опять - AddServer открывается, сразу жмем "Отмена", и комбобокс пополняется новой строкой!

    Извините за сумбурное описание, но я тут сам не разберусь  :dontknow:

    Кстати, я знаю, что где-то здесь сильно напортачил, но не знаю где :(
  • Привет :)

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

    Подскажите, пожалуйста, где и как мне инициализировать, а затем удалить статичные члены? Какие здесь применяются правила или приемы? Ведь, как я понял, нельзя инициализировать статичные члены в конструкторе? А уничтожать в деструкторе.
    Главное избежать ситуации, в которой один их экземпляров класса попытался бы использовать не инициализированные статичные члены.
    Может, хранить отдельный член (тоже статичный), который бы отслеживал все это?
  • Занимаюсь адаптацией проекта с Borland с++ в Visual Studio :insane:.
    У меня возникла проблема с OLECHECK. Я нигде не нашел описания, что это такое и для чего это нужно.
    Подскажите, пожалуйста.
  • как можно передать апи функции в качестве аргумента (например wndProc) вместо callback функции метод с привязкой к объекту класса ?

    зы чтобы вместо хранения данных между вызовами callback f. в глобальном контексте они хранились в объекте


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


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


В избранное