Dúvida ao gravar em memória

    mew
    Por mew,
    • Boa tarde, tenho uma duvida em ao fazer um programa, ao adicionar a um ficheiro eu retorno a estrutura como demonstro no codigo, mas acho que nao se deve retornar e gostava de saber como posso fazer para poder gravar em "condiçoes".

    A minha estrutura tem os Dados Nome e Localidade.
     

    
    Concess RegistoConc(void) {
    
        Concess dadosConces;
    
        printf("Introduza o seu nome :");
        lerString(dadosConces.Nome, MAX_NOME);
    
        printf("introduza a sua localidade :");
        lerString(dadosConces.Localidade, MAX_LOCAL);
        return dadosConces;
    }
    
    
    
    
    int acrescentaConc(Concess *vetorConc, int quantidadeConc) {
        Concess infoConc;
        int posicao;
    
        if (quantidadeConc == MAX_CONC) {
            printf("Vetor de utilizadores ja esta completo!!!");
        } else {
            do {
    
                infoConc = RegistoConc();
    
                posicao = procuraConc(vetorConc, quantidadeConc, infoConc.Nome);
    
                if (posicao != -1) {
                    printf("Esse nome de utilizador ja existe - Repetir introducao de dados.\n");
                }
    
            } while (posicao != -1);
            vetorConc[quantidadeConc] = infoConc;
            quantidadeConc++;
        }
    
        return quantidadeConc;
    }

     

    • 0 respostas

    Re: Árvores irregulares

    ricardo peixoto
    Por ricardo peixoto,
    Em 16/01/2017 às 16:51, ricardo peixoto disse:

    Eu acho que tenho de fazer a travessia da árvore se encontrar o elemento calcular o caminho por exemplo eu fiz a funçao assim <> procura :: Int-> RTree a -> Maybe [Int]
    <>procura _ (R v [])= Nothing
    <>procura n (R v l)= Just (n: concat (map(percorre2(n))l))

    mas a receber um Int no entanto o tipo "a" diz-me que é mais abrangente, penso que a duvida na classe Eq tem que se fazer uma igualdade e depois calcular o caminho correspondente. 

    Erro deduzir "a" de Int

    • 3 respostas

    Re: AT - questões legais

    mauriciopt
    Por mauriciopt,
    Em 16/01/2017 às 15:12, americob disse:

    A comunicação do inventário à AT não tem preços.

    A valorização do inventário pode ser feita por vários métodos, PMC, FIFO, LIFO, etc.

    A desvalorização de artigos é feita por regularizações de existências devidamente justificadas.

    Se um artigo desvaloriza, mas tens outros iguais que não desvalorizam, naturalmente terás de ter algo que os diferencie. Por exemplo, se tiveres artigos perecíveis com datas de validade diferentes, podes querer desvalorizar os que vão expirar mais depressa. Terás de ter identificações diferentes para os mesmos nem que seja pelo LOTE.

     

    Antes de mais, obrigado pela sua resposta.

    Sendo que desejo ter as mesmas refªs/quantidades no inventàrio comunicado à AT e o inventàrio valorizado emitido em março, a minha pergunta é se aquilo que estou a penser fazer està correto.

    "A desvalorização de artigos é feita por regularizações de existências devidamente justificadas."
    ou seja?

     

    Obrigado,

    • 4291 respostas

    Re: Menu em C com cores

    HappyHippyHippo
    Por HappyHippyHippo,

    sabes ler um .h documentado ?, saber ler o main.c ?

    • 5 respostas

    Re: Menu em C com cores

    Shuten
    Por Shuten,

    obrigado, mas nao percebo quase nada do código 

    • 5 respostas

    Re: Utilizar Webservices da AT

    Castanha
    Por Castanha,
    16 horas atrás, nunopicado disse:

    Se guardares o CSR, e partindo do principio que os dados não sejam alterados, podes usar o mesmo CSR para pedir a renovação. ;)

    Boas Nuno,

    Será que me podes ajudar com o seguinte:

    Após gerar o meu ficheiro XXXXXXXXX.csr e enviar pelo e-fatura, já me enviaram o respectivo ficheiro XXXXXXX.cer que acompanhando o manual deles seria de esperar um ficheiro com extensão XXXXXXXXX.crt  para depois eu integrar com a minha chave XXXXXXXX.key e gerar o meu certificado de produção XXXXXXXX.pfx e não um ficheiro com a extensão XXXXXXXX.crt conforme aquele que recebi. 

    Grande Abraço.

    • 7064 respostas

    Re: Menu em C com cores

    HappyHippyHippo
    Por HappyHippyHippo,

    ok .. aqui vai :

    console_window.h

    #pragma once
    
    #include <windows.h>
    
    /// errors
    #define WINDOW_ERROR_NOT_INIT                   -1
    #define WINDOW_ERROR_NO_MEMORY                  -2
    #define WINDOW_ERROR_MISSING_TITLE              -3
    #define WINDOW_ERROR_INVALID_WIDTH              -4
    #define WINDOW_ERROR_INVALID_HEIGHT             -5
    #define WINDOW_ERROR_INVALID_X                  -6
    #define WINDOW_ERROR_INVALID_Y                  -7
    #define WINDOW_ERROR_MISSING_MESSAGE            -8
    #define WINDOW_ERROR_MISSING_EVENT_LIST         -9
    
    /// \brief Event List structure
    typedef struct
    {
        INPUT_RECORD* events;
        DWORD size;
        DWORD nevents;
    } EventList;
    
    /// \brief Create a console window
    ///
    /// \param title Title of the created window
    /// \param width Initial width of the created window
    /// \param width Initial height of the created window
    ///
    /// \return Error code
    int window_init(const char* title, const SHORT width, const SHORT height);
    
    /// \brief Title assignment
    ///
    /// \param title Title to be asigned to the console winwow
    ///
    /// \return Error code
    int window_set_title(const char* title);
    
    /// \brief Width asignment
    ///
    /// \param width The width that the console window should be resized
    ///
    /// \return Error code
    int window_set_width(const SHORT width);
    
    /// \brief Height asignment
    ///
    /// \param height The height that the console window should be resized
    ///
    /// \return Error code
    int window_set_height(const SHORT height);
    
    /// \brief Size asignment
    ///
    /// \param width The width that the console window should be resized
    /// \param height The height that the console window should be resized
    ///
    /// \return Error code
    int window_set_size(const SHORT width, const SHORT height);
    
    /// \brief Width retrieving
    ///
    /// \param width Pointer that will store the width of the console window
    ///
    /// \return Error code
    int window_get_width(SHORT* width);
    
    /// \brief Height retrieving
    ///
    /// \param height Pointer that will store the height of the console window
    ///
    /// \return Error code
    int window_get_height(SHORT* height);
    
    /// \brief Size retrieving
    ///
    /// \param width Pointer that will store the width of the console window
    /// \param height Pointer that will store the height of the console window
    ///
    /// \return Error code
    int window_get_size(SHORT* width, SHORT* height);
    
    /// \brief Hide the cursor if it is hover the console window
    ///
    /// \return Error code
    int window_hide_cursor(void);
    
    /// \brief Show the cursor if it is hover the console window
    ///
    /// \return Error code
    int window_show_cursor(void);
    
    /// \brief Write a char in the console
    ///
    /// \param x The position of the printed char in the horizontal axis
    /// \param y The position of the printed char in the vertical axis
    /// \param c The char to be printed
    ///
    /// \return Error code
    int window_write_char(const SHORT x, const SHORT y, const char c);
    
    /// \brief Write a char in the console with colors
    ///
    /// The color value must be a bitwise or combination of the following windows.h values
    /// - FOREGROUND_RED       : activate the red value for the font
    /// - FOREGROUND_GREEN     : activate the green value for the font
    /// - FOREGROUND_BLUE      : activate the blue value for the font
    /// - FOREGROUND_INTENSITY : activate the intensity bit for a stronger color for the font
    /// - BACKGROUND_RED       : activate the red value for the background
    /// - BACKGROUND_GREEN     : activate the green value for the background
    /// - BACKGROUND_BLUE      : activate the blue value for the background
    /// - BACKGROUND_INTENSITY : activate the intensity bit for a stronger color for the background
    ///
    /// \param x The position of the printed char in the horizontal axis
    /// \param y The position of the printed char in the vertical axis
    /// \param colors The combination of colors attributes to be assigned to the printed char
    /// \param c The char to be printed
    ///
    /// \return Error code
    int window_write_color_char(const SHORT x, const SHORT y, const WORD colors, const char c);
    
    /// \brief Write a composable string in the console
    ///
    /// \param x The starting position of the printed string in the horizontal axis
    /// \param y The starting position of the printed string in the vertical axis
    /// \param str Format of the string to be printed
    /// \param ... variadic parameters to be used to compose the final string to be printed
    ///
    /// \return Error code
    int window_write_string(const SHORT x, const SHORT y, const char* str, ...);
    
    /// \brief Write a composable string in the console with colors
    ///
    /// The color value must be a bitwise or combination of the following windows.h values
    /// - FOREGROUND_RED       : activate the red value for the font
    /// - FOREGROUND_GREEN     : activate the green value for the font
    /// - FOREGROUND_BLUE      : activate the blue value for the font
    /// - FOREGROUND_INTENSITY : activate the intensity bit for a stronger color for the font
    /// - BACKGROUND_RED       : activate the red value for the background
    /// - BACKGROUND_GREEN     : activate the green value for the background
    /// - BACKGROUND_BLUE      : activate the blue value for the background
    /// - BACKGROUND_INTENSITY : activate the intensity bit for a stronger color for the background
    ///
    /// \param x The starting position of the printed string in the horizontal axis
    /// \param y The starting position of the printed string in the vertical axis
    /// \param colors The combination of colors attributes to be assigned to the printed char
    /// \param str Format of the string to be printed
    /// \param ... variadic parameters to be used to compose the final string to be printed
    ///
    /// \return Error code
    int window_write_color_string(const SHORT x, const SHORT y, const WORD colors, const char* str, ...);
    
    /// \brief List of events of the console
    ///
    /// Note that the array inside the passed "list structure" will be created/resized if needed
    /// and must be released after the application cycle
    ///
    /// \param events Structure that will store the events assocaited with the console window
    ///
    /// \return Error code
    int window_read_events(EventList* events);
    
    /// \brief Flip console double buffer content (present frame)
    ///
    /// \return Error code
    int window_flip(void);

    console_window.c

    #include <stdarg.h>
    #include <stdio.h>
    
    #include "console_window.h"
    
    struct
    {
        int init;
    
        SHORT width;
        SHORT height;
    
        HANDLE console;
        HANDLE input;
    
        struct
        {
            int dirty;
            COORD buffer_size;
            COORD position;
            SMALL_RECT write_area;
    
            CHAR_INFO* buffer;
        } dbl_buffer;
    } window = {0};
    
    void window_uninit(void)
    {
        if (window.init)
        {
            if (window.dbl_buffer.buffer)
                free(window.dbl_buffer.buffer);
    
            window.init = 0;
        }
    }
    
    int window_init(const char* title, const SHORT width, const SHORT height)
    {
        if (!window.init)
        {
            if (title == NULL)
                return WINDOW_ERROR_MISSING_TITLE;
            if (width <= 0)
                return WINDOW_ERROR_INVALID_WIDTH;
            if (height <= 0)
                return WINDOW_ERROR_INVALID_HEIGHT;
    
            window.console = GetStdHandle(STD_OUTPUT_HANDLE);
            window.input = GetStdHandle(STD_INPUT_HANDLE);
            SetConsoleTitle(title);
    
            window.init = 1;
            window.width = 0;
            window.height = 0;
            window.dbl_buffer.buffer = NULL;
            window_set_size(width, height);
    
            // SMALL_RECT windowSize = {0, 0, window.width - 1, window.height - 1};
            // COORD bufferSize = {window.width, window.height};
    
            // SetConsoleWindowInfo(window.console, TRUE, &windowSize);
            // SetConsoleScreenBufferSize(window.console, bufferSize);
    
            // window.dbl_buffer.dirty = 1;
            // window.dbl_buffer.buffer_size.X = window.width;
            // window.dbl_buffer.buffer_size.Y = window.height;
            // window.dbl_buffer.position.X = 0;
            // window.dbl_buffer.position.Y = 0;
            // window.dbl_buffer.write_area.Top = 0;
            // window.dbl_buffer.write_area.Left = 0;
            // window.dbl_buffer.write_area.Right = window.width - 1;
            // window.dbl_buffer.write_area.Bottom = window.height - 1;
            // window.dbl_buffer.buffer = malloc(sizeof(CHAR_INFO) * window.width * window.height);
            // if (window.dbl_buffer.buffer == NULL)
            //     return WINDOW_ERROR_NO_MEMORY;
    
            // for (int y = 0; y < window.height; ++y)
            // {
            //     for (int x = 0; x < window.width; ++x)
            //     {
            //         window.dbl_buffer.buffer[x + window.width * y].Char.AsciiChar = ' ';
            //         window.dbl_buffer.buffer[x + window.width * y].Attributes = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
            //     }
            // }
    
            // window.init = 1;
        }
    
        return 0;
    }
    
    int window_set_title(const char* title)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
        if (title == NULL)
            return WINDOW_ERROR_MISSING_TITLE;
    
        SetConsoleTitle(title);
    
        return 0;
    }
    
    int window_set_width(const SHORT width)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
    
        return window_set_size(width, window.height);
    }
    
    int window_set_height(const SHORT height)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
    
        return window_set_size(window.width, height);
    }
    
    int window_set_size(const SHORT width, const SHORT height)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
        if (width <= 0)
            return WINDOW_ERROR_INVALID_WIDTH;
        if (height <= 0)
            return WINDOW_ERROR_INVALID_HEIGHT;
    
        CHAR_INFO* buffer = malloc(sizeof(CHAR_INFO) * width * height);
        if (buffer == NULL)
            return WINDOW_ERROR_NO_MEMORY;
    
        SHORT old_width = window.width;
        SHORT old_height = window.height;
        window.width = width;
        window.height = height;
    
        SMALL_RECT windowSize = {0, 0, window.width - 1, window.height - 1};
        COORD bufferSize = {window.width, window.height};
    
        SetConsoleWindowInfo(window.console, TRUE, &windowSize);
        SetConsoleScreenBufferSize(window.console, bufferSize);
    
        window.dbl_buffer.dirty = 1;
        window.dbl_buffer.buffer_size.X = window.width;
        window.dbl_buffer.buffer_size.Y = window.height;
        window.dbl_buffer.position.X = 0;
        window.dbl_buffer.position.Y = 0;
        window.dbl_buffer.write_area.Top = 0;
        window.dbl_buffer.write_area.Left = 0;
        window.dbl_buffer.write_area.Right = window.width - 1;
        window.dbl_buffer.write_area.Bottom = window.height - 1;
    
        for (int y = 0; y < window.height; ++y)
        {
            for (int x = 0; x < window.width; ++x)
            {
                if (x < old_width && y < old_height)
                {
                    buffer[x + window.width * y] = window.dbl_buffer.buffer[x + old_width * y];
                }
                else
                {
                    buffer[x + window.width * y].Char.AsciiChar = ' ';
                    buffer[x + window.width * y].Attributes = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
                }
            }
        }
    
        free(window.dbl_buffer.buffer);
        window.dbl_buffer.buffer = buffer;
    
        return 0;
    }
    
    int window_get_width(SHORT* width)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
        if (width == NULL)
            return WINDOW_ERROR_INVALID_WIDTH;
    
        *width = window.width;
    
        return 0;
    }
    
    int window_get_height(SHORT* height)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
        if (height == NULL)
            return WINDOW_ERROR_INVALID_HEIGHT;
    
        *height = window.height;
    
        return 0;
    }
    
    int window_get_size(SHORT* width, SHORT* height)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
        if (width == NULL)
            return WINDOW_ERROR_INVALID_WIDTH;
        if (height == NULL)
            return WINDOW_ERROR_INVALID_HEIGHT;
    
        *width = window.width;
        *height = window.height;
    
        return 0;
    }
    
    int window_hide_cursor(void)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
    
        CONSOLE_CURSOR_INFO info;
        GetConsoleCursorInfo(window.console, &info);
        info.bVisible = FALSE;
        SetConsoleCursorInfo(window.console, &info);
    
        return 0;
    }
    
    int window_show_cursor(void)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
    
        CONSOLE_CURSOR_INFO info;
        GetConsoleCursorInfo(window.console, &info);
        info.bVisible = TRUE;
        SetConsoleCursorInfo(window.console, &info);
    
        return 0;
    }
    
    int window_write_char(const SHORT x, const SHORT y, const char c)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
        if (x < 0 || x >= window.width)
            return WINDOW_ERROR_INVALID_X;
        if (y < 0 || y >= window.height)
            return WINDOW_ERROR_INVALID_Y;
    
        window.dbl_buffer.dirty = 1;
        window.dbl_buffer.buffer[x + window.width * y].Char.AsciiChar = c;
    
        return 0;
    }
    
    int window_write_color_char(const SHORT x, const SHORT y, const WORD colors, const char c)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
        if (x < 0 || x >= window.width)
            return WINDOW_ERROR_INVALID_X;
        if (y < 0 || y >= window.height)
            return WINDOW_ERROR_INVALID_Y;
    
        window.dbl_buffer.dirty = 1;
        window.dbl_buffer.buffer[x + window.width * y].Char.AsciiChar = c;
        window.dbl_buffer.buffer[x + window.width * y].Attributes = colors;
    
        return 0;
    }
    
    int window_write_string(const SHORT x, const SHORT y, const char* str, ...)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
        if (str == NULL)
            return WINDOW_ERROR_MISSING_MESSAGE;
    
        char buffer[window.width];
        va_list vargs;
        va_start(vargs, str);
        vsnprintf(buffer, window.width, str, vargs);
        va_end(vargs);
    
        char* it_str = (char*) buffer;
        SHORT it_x = x;
        while (*it_str && it_x >= 0 && it_x < window.width && y >= 0 && y < window.height)
        {
            window.dbl_buffer.dirty = 1;
            window.dbl_buffer.buffer[it_x + window.width * y].Char.AsciiChar = *it_str;
    
            it_str++;
            it_x++;
        }
    
        return 0;
    }
    
    
    int window_write_color_string(const SHORT x, const SHORT y, const WORD colors, const char* str, ...)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
        if (str == NULL)
            return WINDOW_ERROR_MISSING_MESSAGE;
    
        char buffer[window.width];
        va_list vargs;
        va_start(vargs, str);
        vsnprintf(buffer, window.width, str, vargs);
        va_end(vargs);
    
        char* it_str = (char*) buffer;
        SHORT it_x = x;
        while (*it_str && it_x >= 0 && it_x < window.width && y >= 0 && y < window.height)
        {
            window.dbl_buffer.dirty = 1;
            window.dbl_buffer.buffer[it_x + window.width * y].Char.AsciiChar = *it_str;
            window.dbl_buffer.buffer[it_x + window.width * y].Attributes = colors;
    
            it_str++;
            it_x++;
        }
    
        return 0;
    }
    
    int window_read_events(EventList* events)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
        if (events == NULL)
            return WINDOW_ERROR_MISSING_EVENT_LIST;
    
        GetNumberOfConsoleInputEvents(window.input, &events->nevents);
        if (events->nevents)
        {
            if (events->size < events->nevents)
            {
                if (!events->events)
                {
                    events->events = calloc(events->nevents, sizeof(INPUT_RECORD));
                    if (events->events == NULL)
                        return WINDOW_ERROR_NO_MEMORY;
                }
                else
                {
                    INPUT_RECORD* buffer = realloc(events->events, sizeof(INPUT_RECORD) * events->nevents);
                    if (buffer == NULL)
                        return WINDOW_ERROR_NO_MEMORY;
    
                    events->events = buffer;
                }
                events->size = events->nevents;
            }
    
            ReadConsoleInput(window.input, events->events, events->nevents, &events->nevents);
        }
    
        return 0;
    }
    
    int window_flip(void)
    {
        if (!window.init)
            return WINDOW_ERROR_NOT_INIT;
    
        if (window.dbl_buffer.dirty)
        {
            WriteConsoleOutputA(window.console, window.dbl_buffer.buffer, window.dbl_buffer.buffer_size, window.dbl_buffer.position, &window.dbl_buffer.write_area);
            window.dbl_buffer.dirty = 0;
        }
    
        return 0;
    }

    main.c

    #include <stdio.h>
    
    #include "console_window.h"
    
    int main()
    {
        window_init("WinConsole - by HappyHippyHippo", 70, 35);
        window_hide_cursor();
    
        int run = 1;
        EventList events;
        while(run)
        {
            window_read_events(&events);
    
            for (int i = 0; i < events.nevents; i++)
            {
                INPUT_RECORD input = events.events[i];
                switch (input.EventType)
                {
                    case KEY_EVENT:
                        switch (input.Event.KeyEvent.wVirtualKeyCode)
                        {
                            case VK_ESCAPE:
                                run = 0;
                                break;
                            case 0x52:
                                {
                                    WORD colors = 0;
                                    colors |= FOREGROUND_RED;
                                    colors |= FOREGROUND_GREEN;
                                    colors |= FOREGROUND_BLUE;
                                    colors |= FOREGROUND_INTENSITY;
                                    colors |= BACKGROUND_RED;
                                    window_write_color_string(1, 1, colors, "Key pressed : %c", 'R');
                                }
                                break;
                            case 0x54:
                                {
                                    WORD colors = 0;
                                    colors |= FOREGROUND_RED;
                                    colors |= FOREGROUND_GREEN;
                                    colors |= FOREGROUND_BLUE;
                                    colors |= FOREGROUND_INTENSITY;
                                    colors |= BACKGROUND_RED;
                                    window_write_color_string(1, 1, colors, "Key pressed : %c", 'T');
                                }
                                break;
                            default:
                                break;
                        };
                        break;
                    default:
                        break;
                }
            }
    
            window_flip();
    
            // TODO : create a frequency manager, this only make a rough 60FPS
            Sleep(1000/60);
        }
    
        free(events.events);
    
        return 0;
    }

     

    nota :

    existe somente um problema na gestão do tamanho do buffer (seja do double buffer do código ou do buffer da consola) na redimensionamento manual da janela. o que quero dizer é que se alterares o tamaho da janela com o rato, a aplicação não estoira, mas podes ficar com a janela manhosa

    • 5 respostas

    Re: Utilizar Webservices da AT

    MaiaSoares
    Por MaiaSoares,
    2 horas atrás, americob disse:

    Não será EACCode em vez de EacCode ???

     

    Infelizmente não é esse o erro, já tentei das 2 maneiras e não funciona :( .

     

    • 7064 respostas

    Re: Menu em C com cores

    Shuten
    Por Shuten,
    • 5 respostas

    Re: Utilizar Webservices da AT

    americob
    Por americob,
    40 minutos atrás, MaiaSoares disse:

    Bom Dia,

    Já alguem esta a enviar as faturas com os novos campos (EACCode e OrderReferences) do novo WSDL (factemiws.wsdl) ?

    Enviei, em testes, este XML, já com estes 2 novos campos, e retorna-me sempre o erro:

    INFO:
    >>>RECEIVED<<<
    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Header/>
    <env:Body>
    <env:Fault>
    <faultcode>env:Client</faultcode>
    <faultstring>Internal Error</faultstring>
    </env:Fault>
    </env:Body>
    </env:Envelope>

     

    O xml enviado é:

    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Header>
    <wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext">
    <wss:UsernameToken>
    <wss:Username>599999993/0037</wss:Username>
    <wss:Password Digest="xxxxxyBuOSBsmgMA41eI5oLkydwNUPfGRV9STdejwc=">wub4R7H4TNUSdJrxuXnlVg==</wss:Password>
    <wss:Nonce>igWZiGd2ML0dlcukPO2I8n+4g0fHbrHqrGPs73JRxrkuj35YSB+0d2zY8mgpgi3Y2ABxGMC96OxBTpW/SdYvB7c6OVdzV78B0HEDyPZ3LMt6WiiDsTA7OwZRRw8uV4kFswz6+pvNp5yRrE81HUcPXHTgLl33Z1Se2LjwlIrTayAXEOT3WqNmF6laoxPihEx3UpLVfEm/eQPGKg==</wss:Nonce>
    <wss:Created>2017-01-19T18:24:46.941Z</wss:Created>
    </wss:UsernameToken>
    </wss:Security>
    </S:Header>
    <S:Body>
    <ns2:RegisterInvoiceElem xmlns:ns2="http://servicos.portaldasfinancas.gov.pt/faturas/">
    <TaxRegistrationNumber>599999993</TaxRegistrationNumber>
    <ns2:InvoiceNo>POSCVO-FT 2016/111</ns2:InvoiceNo>
    <ns2:InvoiceDate>2016-06-04</ns2:InvoiceDate>
    <ns2:InvoiceType>FT</ns2:InvoiceType>
    <ns2:InvoiceStatus>N</ns2:InvoiceStatus>
    <ns2:EacCode>38212</ns2:EacCode>
    <CustomerTaxID>999908998</CustomerTaxID>
    <Line>
    <ns2:OrderReferences>1</ns2:OrderReferences>
    <ns2:CreditAmount>16.26</ns2:CreditAmount>
    <ns2:Tax>
    <ns2:TaxType>IVA</ns2:TaxType>
    <ns2:TaxCountryRegion>PT</ns2:TaxCountryRegion>
    <ns2:TaxPercentage>23</ns2:TaxPercentage>
    </ns2:Tax>
    </Line>
    <DocumentTotals>
    <ns2:TaxPayable>3.74</ns2:TaxPayable>
    <ns2:NetTotal>16.26</ns2:NetTotal>
    <ns2:GrossTotal>20</ns2:GrossTotal>
    </DocumentTotals>
    </ns2:RegisterInvoiceElem>
    </S:Body>
    </S:Envelope>

     

    Não será EACCode em vez de EacCode ???

     

    • 7064 respostas

    Re: Utilizar Webservices da AT

    MaiaSoares
    Por MaiaSoares,

    Bom Dia,

    Já alguem esta a enviar as faturas com os novos campos (EACCode e OrderReferences) do novo WSDL (factemiws.wsdl) ?

    Enviei, em testes, este XML, já com estes 2 novos campos, e retorna-me sempre o erro:

    INFO:
    >>>RECEIVED<<<
    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Header/>
    <env:Body>
    <env:Fault>
    <faultcode>env:Client</faultcode>
    <faultstring>Internal Error</faultstring>
    </env:Fault>
    </env:Body>
    </env:Envelope>

     

    O xml enviado é:

    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Header>
    <wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext">
    <wss:UsernameToken>
    <wss:Username>599999993/0037</wss:Username>
    <wss:Password Digest="xxxxxyBuOSBsmgMA41eI5oLkydwNUPfGRV9STdejwc=">wub4R7H4TNUSdJrxuXnlVg==</wss:Password>
    <wss:Nonce>igWZiGd2ML0dlcukPO2I8n+4g0fHbrHqrGPs73JRxrkuj35YSB+0d2zY8mgpgi3Y2ABxGMC96OxBTpW/SdYvB7c6OVdzV78B0HEDyPZ3LMt6WiiDsTA7OwZRRw8uV4kFswz6+pvNp5yRrE81HUcPXHTgLl33Z1Se2LjwlIrTayAXEOT3WqNmF6laoxPihEx3UpLVfEm/eQPGKg==</wss:Nonce>
    <wss:Created>2017-01-19T18:24:46.941Z</wss:Created>
    </wss:UsernameToken>
    </wss:Security>
    </S:Header>
    <S:Body>
    <ns2:RegisterInvoiceElem xmlns:ns2="http://servicos.portaldasfinancas.gov.pt/faturas/">
    <TaxRegistrationNumber>599999993</TaxRegistrationNumber>
    <ns2:InvoiceNo>POSCVO-FT 2016/111</ns2:InvoiceNo>
    <ns2:InvoiceDate>2016-06-04</ns2:InvoiceDate>
    <ns2:InvoiceType>FT</ns2:InvoiceType>
    <ns2:InvoiceStatus>N</ns2:InvoiceStatus>
    <ns2:EacCode>38212</ns2:EacCode>
    <CustomerTaxID>999908998</CustomerTaxID>
    <Line>
    <ns2:OrderReferences>1</ns2:OrderReferences>
    <ns2:CreditAmount>16.26</ns2:CreditAmount>
    <ns2:Tax>
    <ns2:TaxType>IVA</ns2:TaxType>
    <ns2:TaxCountryRegion>PT</ns2:TaxCountryRegion>
    <ns2:TaxPercentage>23</ns2:TaxPercentage>
    </ns2:Tax>
    </Line>
    <DocumentTotals>
    <ns2:TaxPayable>3.74</ns2:TaxPayable>
    <ns2:NetTotal>16.26</ns2:NetTotal>
    <ns2:GrossTotal>20</ns2:GrossTotal>
    </DocumentTotals>
    </ns2:RegisterInvoiceElem>
    </S:Body>
    </S:Envelope>

     

    • 7064 respostas

    Re: Hosting

    M6
    Por M6,

    Tens uns dois ou três grandes players nesse mercado, se bem que acho que só um deles é que é capaz de ser realmente nacional, os outros pertencem a empresas estrangeiras.

    Gosto em particular da Iberweb, onde o atendimento/suporte é bom. Sempre que tive problemas ou necessitei de ajuda, até à data, nunca falharam.
    Essa é a razão para ser a minha escolha quando falamos de alojamentos partilhados.

    No entanto, como dizes, há muita oferta. Aconselho-te a fugires dos low cost. Tive más experiências com esses serviços (alguns com presença internacional), sempre que necessitei de  suporte, metade das vezes não faziam nada de jeito...

     

    • 1 resposta

    Aplicação Android algoritmos de aprendizagem pseudocódigo

    diegoveloper
    Por diegoveloper,

    Olá, estou escrevendo para contar e compartilhar com um projeto que eu só percebi, é chamado de pseudo-código, é uma aplicação Android, destinado a estudantes que frequentam os primeiros ciclos e fazer o curso de algoritmos e programação, eu ter tomado esse curso ea ele precisa fazer uma ferramenta para testar os nossos algoritmos, especialmente a partir do celular no momento em que é essencial para cada aluno, como nem todos andar com um laptop na mochila.

    I compartilhar o link do meu projeto: https : // play.google.com /store/apps/details?id=pe.diegoveloper.pseudocode

    Ele é baseado no pseudocódigo ferramenta para PC: PSeInt (estritamente)
    http : // pseint. sourceforge . net/

    A aplicação suporta Inglês e Espanhol, se quisessem traduzi-lo para necessidade Português de sua ajuda, você acha?

    lembranças

    • 0 respostas

    Re: Hosting

    darkepica
    Por darkepica,

    Boa noite,

    Quero criar o meu portfólio em wordpress e mantê-lo num hosting nacional. Tenho pesquisado para encontrar um bom hosting mas a oferta é muita e não sei qual escolher.

    Podem recomendar-me alguns?

    Obrigada.

    • 1 resposta

    Re: Utilizar Webservices da AT

    Castanha
    Por Castanha,
    21 minutos atrás, nunopicado disse:

    Se guardares o CSR, e partindo do principio que os dados não sejam alterados, podes usar o mesmo CSR para pedir a renovação. ;)

    Obrigado Nuno por todo o apoio prestado. :thumbsup:

    Grande abraço :cheesygrin:

     

    • 7064 respostas

    Re: Utilizar Webservices da AT

    nunopicado
    Por nunopicado,
    37 minutos atrás, Castanha disse:

    Muito obrigado pelo aconselhamento Nuno....já agora para terminar após receber o certificado para produção e consoante a sua validade...quando estiver a terminar para gerar novo certificado bastará enviar novamente o ficheiro xxxxxxxxx.csr que enviei para obter o primeiro ou terei que efectuar todo o procedimento de novo para criar um novo ficheiro xxxxxxx.csr ?

    Grande abraço.

    Se guardares o CSR, e partindo do principio que os dados não sejam alterados, podes usar o mesmo CSR para pedir a renovação. ;)

    • 7064 respostas

    Re: Utilizar Webservices da AT

    Castanha
    Por Castanha,
    48 minutos atrás, nunopicado disse:

    Isso. Tens de o integrar para gerar o pfx.

    Muito obrigado pelo aconselhamento Nuno....já agora para terminar após receber o certificado para produção e consoante a sua validade...quando estiver a terminar para gerar novo certificado bastará enviar novamente o ficheiro xxxxxxxxx.csr que enviei para obter o primeiro ou terei que efectuar todo o procedimento de novo para criar um novo ficheiro xxxxxxx.csr ?

    Grande abraço.

    • 7064 respostas

    Re: Interligar duas tabelas

    nunopicado
    Por nunopicado,

    Não entendi bem o que precisas... Vejamos:

    • Tens uma tabela tableCliente com uma lista de clientes
    • Tens uma tabela tableProduto com uma lista de produtos

    Nas forms:

    • A Form1 permite-te pesquisar um cliente na tableCliente
    • A Form2 permite-te inserir dados que serão para gravar na tableProduto

    Questão:

    Todos os dados que tens de guardar estão na tableProduto? ou alguma coisa precisas guardar noutra tabela?

    • 1 resposta

    Re: Utilizar Webservices da AT

    nunopicado
    Por nunopicado,
    6 horas atrás, Castanha disse:

    Boas,

    em penso que o passo que me está a faltar é após o envio do meu certificado XXXXXXX.csr no e-fatura supostamente a AT envia o certificado assinado XXXXXXX.crt o qual eu tenho que integrar com a minha chave privada para gerar o XXXXXXX.pfx que supostamente é o certificado que devo usar em produção...correto ?

    Muito obrigado mais uma vez pela ajuda.

    Isso. Tens de o integrar para gerar o pfx.

    • 7064 respostas

    Re: Procurar Datas

    Ascensao
    Por Ascensao,
    12 hours ago, HappyHippyHippo said:

    para as datas de pesquisa DataInicio e DataFim, basta filtrar os registos tal que :

    DataInicio <= RegistoDataFim e DataFim >= RegistoDataInicio

     

    Obrigado HappyHippyHippo 

    • 4 respostas

  1. Ver Mais Actividade
Portal by DevFuse · Based on IP.Board Portal by IPS