Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 10

Как создать CreateProcess не блокируя основную программу?

09.03.2015, 14:19. Показов 3653. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как создать CreateProcess не блокируя саму программу? Нашёл вот это решение, но 2-й процесс почему-то не запускается!

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        if(CreateProcess(0, maincommand.c_str(), 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)){
        MSG msg;
        while(1){
        DWORD result = MsgWaitForMultipleObjects(1,&pi.hThread,FALSE,INFINITE,QS_ALLEVENTS);
        switch(result){
        case WAIT_OBJECT_0:
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
        return;
        case WAIT_OBJECT_0+1:
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){if (msg.message == WM_QUIT) return; DispatchMessage(&msg); }}}
        }
 
        if(CreateProcess(0, start_ts.c_str(), 0, 0, 0, 0, 0, 0, &si, &pi)){
        MSG msg;
        while(1){
        DWORD result = MsgWaitForMultipleObjects(1,&pi.hThread,FALSE,INFINITE,QS_ALLEVENTS);
        switch(result){
        case WAIT_OBJECT_0:
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
        return;
        case WAIT_OBJECT_0+1:
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){if (msg.message == WM_QUIT) return; DispatchMessage(&msg); }}}
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.03.2015, 14:19
Ответы с готовыми решениями:

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

Как связать событие KeyPress и основную программу?
Хочу, что бы, к примеру, при нажатии Enter запускалась осн. программа, а при нажатии Esc завершить работу программы.

Как из кода IronPython вернуть значение в основную программу?
Пишу на дотнете небольшую программу. Наткнулся на ситуацию: в виде строки получаю код на IronPython и обрабатываю его. С операциями типа...

20
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
09.03.2015, 14:28
Сделайте сразу два вызова CreateProcess, а затем MsgWaitForMultipleObjects
ждите, пока хэндлы не перейдут в сигнальное состояние.

Кстати, ждать на pi.hThread не совсем правильно: первичный поток
может завершиться, а процесс будет все еще работать.
Лучше ждать на pi.hProcess.
1
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 10
09.03.2015, 14:32  [ТС]
На самом деле процессов 5 и они должны выполняться строго по очереди. Как здесь быть?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CreateProcess(0, maincommand.c_str(), 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi);
CreateProcess(0, start_ts.c_str(), 0, 0, 0, 0, 0, 0, &si, &pi);
CreateProcess(0, video_ts.c_str(), 0, 0, 0, 0, 0, 0, &si, &pi);
CreateProcess(0, end_ts.c_str(), 0, 0, 0, 0, 0, 0, &si, &pi);
CreateProcess(0, split.c_str(), 0, 0, 0, 0, 0, 0, &si, &pi);
MSG msg;
while(1){
DWORD result = MsgWaitForMultipleObjects(1,&pi.hProcess,FALSE,INFINITE,QS_ALLEVENTS);
switch(result){
case WAIT_OBJECT_0: //процесс завершился
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return;
case WAIT_OBJECT_0+1: //в очереди есть оконные сообщения
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){if (msg.message == WM_QUIT) return; DispatchMessage(&msg); }}}
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
09.03.2015, 14:38
Так в чем проблема ? В том, что программа блокируется на вызове
WaitForMultipleObjects или в том, что надо запускать процессы по очереди ?
0
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 10
09.03.2015, 14:40  [ТС]
Программа не блокируется. Но если писать так, то после 1-го процесса ничего не присходит:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if(CreateProcess(0, maincommand.c_str(), 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)){
        MSG msg;
        while(1){
        DWORD result = MsgWaitForMultipleObjects(1,&pi.hThread,FALSE,INFINITE,QS_ALLEVENTS);
        switch(result){
        case WAIT_OBJECT_0:
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
        return;
        case WAIT_OBJECT_0+1:
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){if (msg.message == WM_QUIT) return; DispatchMessage(&msg); }}}
        }
 
        if(CreateProcess(0, start_ts.c_str(), 0, 0, 0, 0, 0, 0, &si, &pi)){
        MSG msg;
        while(1){
        DWORD result = MsgWaitForMultipleObjects(1,&pi.hThread,FALSE,INFINITE,QS_ALLEVENTS);
        switch(result){
        case WAIT_OBJECT_0:
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
        return;
        case WAIT_OBJECT_0+1:
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){if (msg.message == WM_QUIT) return; DispatchMessage(&msg); }}}
        }
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
09.03.2015, 14:57
Конечно не происходит. Ведь после запуска первого процесса стоит return (9-ая строка).
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.03.2015, 15:06
Цитата Сообщение от kochev_vladimir Посмотреть сообщение
Как создать CreateProcess не блокируя саму программу?
Запускать в отдельном потоке.
0
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 10
09.03.2015, 15:22  [ТС]
Все равно после 1-го процесса ничего не происходит. return я поубирал
Задача в том, что нужно запускать процессы по очереди, при этом они не должны подвешивать мое приложение на время их выполнения.
Вот весь кусок кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
        if(CreateProcess(0, maincommand.c_str(), 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)){
        MSG msg;
        while(1){
        DWORD result = MsgWaitForMultipleObjects(1,&pi.hThread,FALSE,INFINITE,QS_ALLEVENTS);
        switch(result){
        case WAIT_OBJECT_0:
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
        case WAIT_OBJECT_0+1:
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){if (msg.message == WM_QUIT) return; DispatchMessage(&msg); }}}
        }
 
        if(CreateProcess(0, start_ts.c_str(), 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)){
        MSG msg;
        while(1){
        DWORD result = MsgWaitForMultipleObjects(1,&pi.hThread,FALSE,INFINITE,QS_ALLEVENTS);
        switch(result){
        case WAIT_OBJECT_0:
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
        case WAIT_OBJECT_0+1:
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){if (msg.message == WM_QUIT) return; DispatchMessage(&msg); }}}
        }
 
        if(CreateProcess(0, video_ts.c_str(), 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)){
        MSG msg;
        while(1){
        DWORD result = MsgWaitForMultipleObjects(1,&pi.hThread,FALSE,INFINITE,QS_ALLEVENTS);
        switch(result){
        case WAIT_OBJECT_0:
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
        case WAIT_OBJECT_0+1:
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){if (msg.message == WM_QUIT) return; DispatchMessage(&msg); }}}
        }
 
        if(CreateProcess(0, end_ts.c_str(), 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)){
        MSG msg;
        while(1){
        DWORD result = MsgWaitForMultipleObjects(1,&pi.hThread,FALSE,INFINITE,QS_ALLEVENTS);
        switch(result){
        case WAIT_OBJECT_0:
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
        case WAIT_OBJECT_0+1:
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){if (msg.message == WM_QUIT) return; DispatchMessage(&msg); }}}
        }
 
        if(CreateProcess(0, split.c_str(), 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)){
        MSG msg;
        while(1){
        DWORD result = MsgWaitForMultipleObjects(1,&pi.hThread,FALSE,INFINITE,QS_ALLEVENTS);
        switch(result){
        case WAIT_OBJECT_0:
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
        case WAIT_OBJECT_0+1:
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){if (msg.message == WM_QUIT) return; DispatchMessage(&msg); }}}
        }
Добавлено через 11 минут
заметил что приложение на КРЕСТИК закрывается после 2-го нажатия
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.03.2015, 21:05
Цитата Сообщение от kochev_vladimir Посмотреть сообщение
Задача в том, что нужно запускать процессы по очереди, при этом они не должны подвешивать мое приложение на время их выполнения.
Цитата Сообщение от Avazart Посмотреть сообщение
Запускать в отдельном потоке.
... и ждать в нем же завершения каждого процесса по очереди.
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
09.03.2015, 22:26
не совсем по теме, но я б еще сделал функцию запуска процесса (с параметром команды), хотя бы для того, чтоб так много не писать

Добавлено через 1 час 2 минуты
сам поток
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//---------------------------------------------------------------------------
//ThreadWaitForPocess.cpp
//---------------------------------------------------------------------------
 
#include <System.hpp>
#pragma hdrstop
 
#include "WaitForProcess.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
__fastcall TThreadWaitForPocess::TThreadWaitForPocess(bool CreateSuspended)
    : TThread(CreateSuspended)
{
 FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
void __fastcall TThreadWaitForPocess::Execute()
{
 StartProcess(L"notepad");
 StartProcess(L"calc");
}
//---------------------------------------------------------------------------
void __fastcall TThreadWaitForPocess::StartProcess(String Command)
{
 STARTUPINFO cif;
 ZeroMemory(&cif,sizeof(STARTUPINFO));
 PROCESS_INFORMATION pi;
 
 if (CreateProcess(NULL, Command.c_str(),
        NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==true)
  {
   WaitForSingleObject(pi.hProcess, INFINITE);
 
   CloseHandle(pi.hProcess);
   CloseHandle(pi.hThread);
  }
}
//---------------------------------------------------------------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//---------------------------------------------------------------------------
//ThreadWaitForPocess.h
//---------------------------------------------------------------------------
 
#ifndef WaitForProcessH
#define WaitForProcessH
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
//---------------------------------------------------------------------------
class TThreadWaitForPocess : public TThread
{
private:
protected:
    void __fastcall Execute();
    void __fastcall StartProcess(String Command);
public:
    __fastcall TThreadWaitForPocess(bool CreateSuspended);
};
//---------------------------------------------------------------------------
#endif

ну и запуск потока в форме
C++
1
2
3
4
5
6
7
8
#include "WaitForProcess.h"
//  ......
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 new TThreadWaitForPocess(false); // хочешь - сделай обертку, если так не нравится
}
//---------------------------------------------------------------------------
Форму не блокирует, ждет завершения одной программы, потом запускает следующую
0
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 10
10.03.2015, 10:34  [ТС]
я пишу на C++ Builder 6.0
Он ругается на на отсутствие #include <System.Classes.hpp>
Я так понимаю этот файл есть в Embarcadero RAD Studio?
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
10.03.2015, 11:19
Цитата Сообщение от kochev_vladimir Посмотреть сообщение
Он ругается на на отсутствие #include <System.Classes.hpp>
замени на #include <Classes.hpp>
0
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 10
10.03.2015, 12:08  [ТС]
А можно ли как-то в этой процедуре, а не в отдельном .cpp файле указывать команды для запуска этих процессов, ну типа?
C++
1
2
3
4
5
6
void __fastcall TForm1::Button1Click(TObject *Sender)
{
blalblabla ("notepad.exe")
blalblabla ("calc.exe")
 new TThreadWaitForPocess(false); // хочешь - сделай обертку, если так не нравится
}
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
10.03.2015, 12:52
kochev_vladimir, не совсем так но все-же


поток:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//---------------------------------------------------------------------------
//ThreadWaitForPocess.cpp
//---------------------------------------------------------------------------
 
#include <System.hpp>
#pragma hdrstop
 
#include "WaitForProcess.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
__fastcall TThreadWaitForPocess::TThreadWaitForPocess(AnsiString CommandLine, bool CreateSuspended)
    : TThread(CreateSuspended)
{
 FreeOnTerminate = true;
 FCommandLine = new TStringList;
 FCommandLine->Delimiter = ';';
 FCommandLine->DelimitedText = CommandLine;
}
//---------------------------------------------------------------------------
__fastcall TThreadWaitForPocess::~TThreadWaitForPocess()
{
 delete FCommandLine;
}
//---------------------------------------------------------------------------
void __fastcall TThreadWaitForPocess::Execute()
{
 for (int i=0; i < FCommandLine->Count; i++)
  StartProcess(FCommandLine->Strings[i]);
}
//---------------------------------------------------------------------------
void __fastcall TThreadWaitForPocess::StartProcess(String Command)
{
 STARTUPINFO cif;
 ZeroMemory(&cif,sizeof(STARTUPINFO));
 PROCESS_INFORMATION pi;
 
 if (CreateProcess(NULL, Command.c_str(),
        NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==true)
  {
   WaitForSingleObject(pi.hProcess, INFINITE);
 
   CloseHandle(pi.hProcess);
   CloseHandle(pi.hThread);
  }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall StartProcess(AnsiString CommandLine)
{
 new TThreadWaitForPocess(CommandLine);
}
//---------------------------------------------------------------------------

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------
//ThreadWaitForPocess.h
//---------------------------------------------------------------------------
 
#ifndef WaitForProcessH
#define WaitForProcessH
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class TThreadWaitForPocess : public TThread
{
private:
protected:
    void __fastcall Execute();
    void __fastcall StartProcess(String Command);
    TStringList *FCommandLine;
public:
    __fastcall TThreadWaitForPocess(AnsiString CommandLine, bool CreateSuspended=false);
    __fastcall ~TThreadWaitForPocess();
};
//---------------------------------------------------------------------------
void __fastcall StartProcess(AnsiString CommandLine);
#endif
запуск потока в форме
C++
1
2
3
4
5
6
7
8
#include "WaitForProcess.h"
//  ......
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 StartProcess("calc; notepad");
}
//---------------------------------------------------------------------------
0
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 10
10.03.2015, 14:21  [ТС]
ОТЛИЧНО! Но мне нужно запускать процессы не notepad.exe/calc.exe, a
Bash
1
ffmpeg -y -loop 1 -i ./images/Vinni/bg480.jpg  -i ./videos/ChoosingDsign.mp4 -i ./images/Vinni/logo480.png -filter_complex "[2:v]scale=w=iw*1:h=ih*1[mylogo]; [1:v]scale=w=iw*0.75:h=ih*0.75[first];[0:v][first] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [temp];  [temp][mylogo] overlay=60:main_h-overlay_h-35 [video]" -map "[video]" -map 1:a:0 -metadata title="myvideo" -shortest ./videos/done/480_ChoosingDsign.mp4
мне нужно запускать 5-6 один за другим процессов поочередно.

Добавлено через 49 минут
Весь смысл в том, что нужно 5-6 раз поочередно выполнять запуск одного и того же консольного приложения "ffmpeg.exe" с разными параметрами, но запуск следующего приложения должен осуществляться по завершении выполнения предыдущего. Эти все процессы не должны вешать основную программу.
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
10.03.2015, 14:29
kochev_vladimir, если есть пробелы, то команду нужно взять в кавычки, а потом добавить разделитель (в даном примере ";")

Как-то так
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 AnsiString MyProcess;
 MyProcess += AnsiQuotedStr("твоя 1-я комманда",'"')+";";
 MyProcess += AnsiQuotedStr("твоя 2-я комманда",'"');
 
 StartProcess(MyProcess);
}
0
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 10
10.03.2015, 16:45  [ТС]
Получилось! Но еще желательно, чтобы работа кода приостановилась, а то сразу при запуске первого процесса выполняется ShowMessage("Готово!");. Это можно как-то реализовать?

мне нужно перебрать в цикле файлы и каждый файл будет подставляться в комм. строку консольных приложений (пример ниже). А у меня если файла три, то запускаются сразу 3 потока и работают одновременно, но при этом порядок запуска комманд внутри потоков сохраняется. И выходит, что ShowMessage("Готово!"); выполняется сразу, а в это время команды еще не выполнились до конца.
C++
1
2
3
4
5
6
7
8
9
10
11
12
AnsiString MyProcess;
for (int a = 0; a <= ListBox2->Items->Count-1; a++){
 AnsiString filename_mp4 = ListBox2->Items->Strings[a].c_str();
 MyProcess += AnsiQuotedStr("твоя 1-я комманда "+filename_mp4,'"')+";";
 MyProcess += AnsiQuotedStr("твоя 2-я комманда"+filename_mp4,'"')+";";
 MyProcess += AnsiQuotedStr("твоя 3-я комманда"+filename_mp4,'"')+";";
 MyProcess += AnsiQuotedStr("твоя 4-я комманда"+filename_mp4,'"');
 StartProcess(MyProcess);
}
 
 
ShowMessage("Готово!");
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
11.03.2015, 00:16
kochev_vladimir, може б ты про потоки почитал, а то мне стало не интересно тебе помогать ..........
0
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 10
11.03.2015, 00:19  [ТС]
я не программер, так когда-то что-то писал, а сейчас срочно понадобилось (((. Прости, уж, земляк. Ну больше не у кого спросить. Про потоки вообще узнал только вчера. С классами не дружу(((.
Помоги, пожалуйста...
Ты (и я) почти у цели!!
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
11.03.2015, 00:27
kochev_vladimir, давай по очереди. У меня этот код работает. Что у тебя не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.03.2015, 00:27
Помогаю со студенческими работами здесь

Как защититься от ddos блокируя IP не лету
Как защититься от ddos блокируя IP не лету без перезакрузки сервера.

Как запустить программу через CreateProcess со стилем по умолчанию?
Добрый вечер ! Подскажите, пожалуйста, данный код запускает калькулятор Windows. Внешний его вид выглядит как-то ущербно. ...

Как прослушивать сразу все порты на компьютере, не блокируя
Нужно прослушивать все порты на компьютере, не блокируя их. Задача в следующем. Сервер должен принимать от клиентов запрос по любому порту...

Как только встречается слово Compiling, нужно передать в основную программу переменную Nstr
Добрый день! Помогите пожалуйста с программой. Есть функция, которая считывает из файла строки. Как только встречается слово...

Составить программу для вычисления и вывода в виде таблицы следующих функций. Кроме этого добавить в основную программу две подпрограммы:
Добрый день!Помогите решить задачку. Составить программу для вычисления и вывода в виде таблицы следующих функций. Кроме этого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru