Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/72: Рейтинг темы: голосов - 72, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430

MicroMenu stm32

07.05.2017, 07:19. Показов 14431. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.
Поделиться рабочем кодом MicroMenu для stm32f4.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.05.2017, 07:19
Ответы с готовыми решениями:

MicroMenu для ARM
Портирую MicroMenu в ARM. Выскакивает куча ошибок. Я уже окончательно запутался. Кто нибудь работал с ним? MicroMenu.h ...

Создание меню для LCD на основе micromenu
Всем привет. Пробую прикрепить микроменю для LCD екрена. Честно говоря многое не понятного в коде. До этого момента я делал маленькое...

Чем связать STM32 + STM32 в одном корпусе?
Есть 2 платы: (1) - STM32 (Вывод на LCD + запись SD) и (2) - STM32F4 (обработка сигналов + коммуникация с датчиками). Чем связать данные...

13
0 / 0 / 0
Регистрация: 05.10.2007
Сообщений: 498
07.05.2017, 11:47
Что сделал сам и что не получается. На какой платформе работаешь?
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
07.05.2017, 12:33
ТС, наверное, имеет в виду это - http://iosyitistromyss.ru/organizaciya- ... menyu.html ?
0
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430
08.05.2017, 10:13
Да оно самое.
До меня не доперла.
Вот пишут
MAKE_MENU(Level1Item1 , Level1Item2, Level1Item3, NULL_ENTRY , Level1Item1Sub1, NULL_FUNC , NULL_FUNC , "ITEM 1");
Это получается, что на экране будет только надпись ITEM 1? А как заполнить остальные 3 строчки лсд?
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
08.05.2017, 10:22
Это вообще не описывает, что будет на экране. Это только данные, касающиеся одного пункта меню.
Референсная реализация, скорей всего, рисует один пункт (читать лень). Но это легко исправить: к примеру, берёте next (если есть) и рисуете строчкой ниже, previous (если есть) строчкой выше. Если previous нет - можно нарисовать parent, как-то выделив его.
UPD: заглянул. Там автор русским по белому пишет: рисую, мол, текущий пункт, два до него и два после. В общем, всё в вашей власти.
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
09.05.2017, 00:22
Цитата Сообщение от zhytimkov
Да оно самое.
До меня не доперла.
Вот пишут
MAKE_MENU(Level1Item1 , Level1Item2, Level1Item3, NULL_ENTRY , Level1Item1Sub1, NULL_FUNC , NULL_FUNC , "ITEM 1");
Это получается, что на экране будет только надпись ITEM 1? А как заполнить остальные 3 строчки лсд?
А чем их надо заполнить?
0
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430
09.05.2017, 09:49
Да вроде стал понимать как работает микроменю.
Столкнулся с проблемой старта меню.
Написал следующие:
Code
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
#define MAKE_MENU(Name, Next, Previous, Parent, Child, Select, Text) \
extern menuItem Next;     \
extern menuItem Previous; \
extern menuItem Parent;   \
extern menuItem Child;  \
menuItem Name = {(void*)&Next, (void*)&Previous, (void*)&Parent, (void*)&Child, (uint8_t)Select, { Text }}
 
#define PREVIOUS   ((menuItem*)(selectedMenuItem->Previous))
#define NEXT       ((menuItem*)(selectedMenuItem->Next))
#define PORENT     ((menuItem*)(selectedMenuItem->Parent))
#define CHILD      ((menuItem*)(selectedMenuItem->Child))
#define SELECT      (pgm_read_byte(&selectedMenuItem->Select))
 
#define NULL_ENTRY Null_Menu
 
typedef struct PROGMEM{
void       *Next;
void       *Previous;
void       *Parent;
void       *Child;
uint8_t     Select;
const char  Text[];
} menuItem;
 
menuItem   Null_Menu = {(void*)0, (void*)0, (void*)0, (void*)0, 0, {0x00}};
 
menuItem* selectedMenuItem; // текущий пункт меню
 
void menuChange(menuItem* NewMenu)
{
if ((void*)NewMenu == (void*)&NULL_ENTRY)
return;
 
selectedMenuItem = NewMenu;
 
LCDCLEAR LCD_SetPos(0, 0); //Очистка экрана LCD
prymtf("%s",(char *)NewMenu->Text);
}
 
MAKE_MENU(m_s1i1,  m_s1i2,    NULL_ENTRY,  NULL_ENTRY, m_s2i1,       0, "Запуск");
Когда пишу
Code
1
2
3
MenuChange (&m_s1i1);
или
selectedMenuItem = (menuItem*)&m_s1i1;
Iar ругается Error[Li005]: no defymition for "m_s1i2"
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
09.05.2017, 10:10
Ну да, его тоже надо определить. У вас должно быть по строчке MAKE_MENU на каждый пункт, и ссылаться можно только на другие пункты или NULL_ENTRY.
0
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430
09.05.2017, 10:27
Понял. Скажите, а как можно изменять переменную и сразу отобрать значение её на дисплее?
Пример хочу изменить время измерения. Захожу в пункт меню изменения времени измерения. На дисплее отображается текущие время измерения. По нажатию на кнопку "+" или "-" прибавляю или убавляю время. По нажатию на кнопку "OK" выхожу и сохраняю. И все это происходит в реальном времени.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 397
09.05.2017, 12:48
Там самая фишка - это то, что за счет хитрых defymов с externами можно сослаться на пункт меню, который по тексту еще не определен... А все остальное - делается под себя. Просто нужно засесть и вкурить все это хорошенько.
К каждому пункту можно прикрутить функцию, которая будет управлять экраном в то время, пока выбран соответствующий пункт меню.
0
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430
09.05.2017, 14:00
Хочу еще спросить. А как правильно менять язык с русского на английский?
Чтобы можно было вывести настройки или settings.
Code
1
MAKE_MENU(m_s1i1,  m_s1i2,    m_s1i3,      NULL_ENTRY, m_s2i1,       0, "Настройки");
Глупа конечно, но написал вот так и не чего не заработало
Code
1
MAKE_MENU(m_s1i1,  m_s1i2,    m_s1i3,      NULL_ENTRY, m_s2i1,       0, language!=1?"настройки":"settings");
0
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430
10.05.2017, 13:52
решил проще добавил второй текст в структуру:
Code
1
2
3
4
5
6
7
8
9
10
11
typedef struct PROGMEM{
void       *Next;
void       *Previous;
void       *Parent;
void       *Child;
uint8_t     Select;
FuncPtr    SelectFunc;   // программа для отображения в самом меню
FuncPtr    EnterFunc;   // программа работы, вызываемая при нажатии Enter в меню
const char Text_RUS[20];
const char Text_ENG[20];
} menuItem;
Столкнулся с другой проблемой.
Нету перехода в функцию void Language (void).
Вот код: menu.h
Code
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
#ifndef   _MENU_H_
#define   _MENU_H_
 
#define NULL_ENTRY Null_Menu
#define NULL_FUNC  (void*)0
 
#define MAKE_MENU(Name, Next, Previous, Parent, Child, Select, Selectf, Enterf, Text_RUS,Text_ENG) \
extern menuItem Next;     \
extern menuItem Previous; \
extern menuItem Parent;   \
extern menuItem Child;  \
menuItem Name = {(void*)&Next, (void*)&Previous, (void*)&Parent, (void*)&Child, (uint8_t)Select, (FuncPtr)Selectf, (FuncPtr)Enterf, { Text_RUS }, { Text_ENG }}
 
#define PREVIOUS   ((menuItem*)(selectedMenuItem->Previous))
#define NEXT       ((menuItem*)(selectedMenuItem->Next))
#define PORENT     ((menuItem*)(selectedMenuItem->Parent))
#define CHILD      ((menuItem*)(selectedMenuItem->Child))
#define SELECT      (selectedMenuItem->Select)
#define SELECTFUNC  ((FuncPtr)(selectedMenuItem->SelectFunc))
#define ENTERFUNC   ((FuncPtr)(selectedMenuItem->EnterFunc))
 
#define NULL_ENTRY Null_Menu
 
// Typedefs:
typedef void (*FuncPtr)(void);
 
typedef struct PROGMEM{
void       *Next;
void       *Previous;
void       *Parent;
void       *Child;
uint8_t     Select;
FuncPtr    SelectFunc;   // программа для отображения в самом меню
FuncPtr    EnterFunc;   // программа работы, вызываемая при нажатии Enter в меню
const char Text_RUS[20];
const char Text_ENG[20];
} menuItem;
 
menuItem   Null_Menu = {(void*)0, (void*)0, (void*)0, (void*)0, 0, NULL_FUNC, NULL_FUNC, {0x00}, {0x00}};
 
menuItem* selectedMenuItem; // текущий пункт меню
 
enum {
MENU_CANCEL=1,
MENU_RESIT,
MENU_MODE1,
MENU_MODE2,
MENU_MODE3,
MENU_MODE4,
MENU_MODE5,
MENU_MODE6,
MENU_SENS1,
MENU_SENS2,
MENU_WARM,
MENU_PROCESS
};
 
#endif
в main.c пишу
Code
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
void menuChange(menuItem* NewMenu)
{
if ((void*)NewMenu == (void*)&NULL_ENTRY)
return;
 
selectedMenuItem = NewMenu;
 
LCDCLEAR LCD_SetPos(0, 0); //Очистка экрана LCD
if (Mem.EEPROMMap.language_messages != 0) //Если в настройках установлен режим русского языка
{
prymtf("%s",(char *)NewMenu->Text_RUS);
}
else
{
prymtf("%s",(char *)NewMenu->Text_ENG);
}
}
 
void Language (void){
LCDCLEAR LCD_SetPos(0, 1);
if (Mem.EEPROMMap.language_messages != 0) //Если в настройках установлен режим русского языка
{
prymtf(" РУС ");
}
else
{
prymtf(" ENG ");
}
}
 
//                 NEXT,      PREVIOUS     PORENT,     CHILD
MAKE_MENU(m_s1i1,  m_s1i2,    m_s1i3,      NULL_ENTRY, m_s2i1,           0, NULL_FUNC, NULL_FUNC, "Настройки","Settings");
MAKE_MENU(m_s1i2,  m_s1i3,    m_s1i1,      NULL_ENTRY, NULL_ENTRY,       0, NULL_FUNC, NULL_FUNC, "Корекция","Correction");
MAKE_MENU(m_s1i3,  m_s1i1,    m_s1i2,      NULL_ENTRY, NULL_ENTRY,       0, NULL_FUNC, NULL_FUNC, "Стереть стек","Erase stack");
 
// подменю настройки
MAKE_MENU(m_s2i1,  m_s2i2,    NULL_ENTRY,  m_s1i1,     NULL_ENTRY,   MENU_MODE1, Language, NULL_FUNC, "Язык(Language)","Language");
MAKE_MENU(m_s2i2,  m_s2i3,    m_s2i1,      m_s1i1,     NULL_ENTRY,   MENU_MODE1, NULL_FUNC, NULL_FUNC, "Режим измерения","Measurement mode");
MAKE_MENU(m_s2i3,  m_s2i4,    m_s2i2,      m_s1i1,     NULL_ENTRY,   MENU_MODE1, NULL_FUNC, NULL_FUNC, "Режим мойки","Washing mode");
MAKE_MENU(m_s2i4,  m_s2i5,    m_s2i3,      m_s1i1,     NULL_ENTRY,   MENU_MODE1, NULL_FUNC, NULL_FUNC, "Звук","Soumd");
MAKE_MENU(m_s2i5,  m_s2i6,    m_s2i4,      m_s1i1,     NULL_ENTRY,   MENU_MODE1, NULL_FUNC, NULL_FUNC, "Округление","Rounding");
MAKE_MENU(m_s2i6,  NULL_ENTRY,    m_s2i5,      m_s1i1,     NULL_ENTRY,   MENU_MODE1, NULL_FUNC, NULL_FUNC, "Сервесный режим","Servesny mode");
0
1 / 1 / 0
Регистрация: 08.05.2015
Сообщений: 225
10.05.2017, 22:08
Ндаа! typedef - это определение типа PROGMEM не работает так как не выделяется память. Правильно так
Code
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct {
void       *Next;
void       *Previous;
void       *Parent;
void       *Child;
uint8_t     Select;
FuncPtr    SelectFunc;   // программа для отображения в самом меню
FuncPtr    EnterFunc;   // программа работы, вызываемая при нажатии Enter в меню
const char Text_RUS[20];
const char Text_ENG[20];
} menuItem;
menuitem PROGMEM item1;
Но топик про stm32 там нет PROGMEM а есть const, что вызовет ошибку - у вас константа в которой масса переопределяемых указателей(как вы их во флэш собираетесь определять?).
0
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430
11.05.2017, 07:14
Если я напишу так:
menu.h
Code
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
60
#ifndef   _MENU_H_
#define   _MENU_H_
 
#define NULL_ENTRY Null_Menu
#define NULL_FUNC  (void*)0
 
#define MAKE_MENU(Name, Next, Previous, Parent, Child, Select, Selectf, Enterf, Text_RUS,Text_ENG) \
extern const menuItem Next;     \
extern const menuItem Previous; \
extern const menuItem Parent;   \
extern const menuItem Child;  \
const menuItem Name = {(void*)&Next, (void*)&Previous, (void*)&Parent, (void*)&Child, (uint8_t)Select, (FuncPtr)Selectf, (FuncPtr)Enterf, { Text_RUS }, { Text_ENG }}
 
#define PREVIOUS   ((menuItem*)(selectedMenuItem->Previous))
#define NEXT       ((menuItem*)(selectedMenuItem->Next))
#define PORENT     ((menuItem*)(selectedMenuItem->Parent))
#define CHILD      ((menuItem*)(selectedMenuItem->Child))
#define SELECT      (selectedMenuItem->Select)
#define SELECTFUNC  ((FuncPtr)(selectedMenuItem->SelectFunc))
#define ENTERFUNC   ((FuncPtr)(selectedMenuItem->EnterFunc))
 
#define NULL_ENTRY Null_Menu
 
// Typedefs:
typedef void (*FuncPtr)(void);
 
typedef struct {
void       *Next;
void       *Previous;
void       *Parent;
void       *Child;
const char     Select;
FuncPtr    SelectFunc;   // программа для отображения в самом меню
FuncPtr    EnterFunc;   // программа работы, вызываемая при нажатии Enter в меню
const char Text_RUS[20];
const char Text_ENG[20];
} menuItem;
 
extern const menuItem m_s1i1;
 
menuItem   Null_Menu = {(void*)0, (void*)0, (void*)0, (void*)0, 0, NULL_FUNC, NULL_FUNC, {0x00}, {0x00}};
 
menuItem* selectedMenuItem; // текущий пункт меню
 
enum {
MENU_CANCEL=1,
MENU_RESIT,
MENU_MODE1,
MENU_MODE2,
MENU_MODE3,
MENU_MODE4,
MENU_MODE5,
MENU_MODE6,
MENU_SENS1,
MENU_SENS2,
MENU_WARM,
MENU_PROCESS
};
 
#endif
main.c
Code
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
void Language (void){
LCDCLEAR LCD_SetPos(0, 1);
if (Mem.EEPROMMap.language_messages != 0) //Если в настройках установлен режим русского языка
{
prymtf(" РУС ");
}
else
{
prymtf(" ENG ");
}
}
 
void menuChange(const menuItem* NewMenu)
{
if ((void*)NewMenu == (void*)&NULL_ENTRY)
return;
 
selectedMenuItem = (menuItem *)NewMenu;
 
LCDCLEAR LCD_SetPos(0, 0); //Очистка экрана LCD
if (Mem.EEPROMMap.language_messages != 0) //Если в настройках установлен режим русского языка
{
prymtf("%s",(char *)NewMenu->Text_RUS);
}
else
{
prymtf("%s",(char *)NewMenu->Text_ENG);
}
}
 
//                 NEXT,      PREVIOUS     PORENT,     CHILD
MAKE_MENU(m_s1i1,  m_s1i2,    m_s1i3,      NULL_ENTRY, m_s2i1,           0, NULL_FUNC, NULL_FUNC, "Настройки","Settings");
MAKE_MENU(m_s1i2,  m_s1i3,    m_s1i1,      NULL_ENTRY, NULL_ENTRY,       0, NULL_FUNC, NULL_FUNC, "Корекция","Correction");
MAKE_MENU(m_s1i3,  m_s1i1,    m_s1i2,      NULL_ENTRY, NULL_ENTRY,       0, NULL_FUNC, NULL_FUNC, "Стереть стек","Erase stack");
 
// подменю настройки
MAKE_MENU(m_s2i1,  m_s2i2,    NULL_ENTRY,  m_s1i1,     NULL_ENTRY,   MENU_MODE1, Language, Language, "Язык(Language)","Language");
MAKE_MENU(m_s2i2,  m_s2i3,    m_s2i1,      m_s1i1,     NULL_ENTRY,   MENU_MODE1, Language, NULL_FUNC, "Режим измерения","Measurement mode");
MAKE_MENU(m_s2i3,  m_s2i4,    m_s2i2,      m_s1i1,     NULL_ENTRY,   MENU_MODE1, NULL_FUNC, NULL_FUNC, "Режим мойки","Washing mode");
MAKE_MENU(m_s2i4,  m_s2i5,    m_s2i3,      m_s1i1,     NULL_ENTRY,   MENU_MODE1, NULL_FUNC, NULL_FUNC, "Звук","Soumd");
MAKE_MENU(m_s2i5,  m_s2i6,    m_s2i4,      m_s1i1,     NULL_ENTRY,   MENU_MODE1, NULL_FUNC, NULL_FUNC, "Округление","Rounding");
MAKE_MENU(m_s2i6,  NULL_ENTRY,    m_s2i5,      m_s1i1,     NULL_ENTRY,   MENU_MODE1, NULL_FUNC, NULL_FUNC, "Сервесный режим","Servesny mode");
то iar выдает ошибку Error[Pe147]: declaration is insompatible wyth "menuItem const Null_Menu" (declared at line 43 of
43 линия menuItem Null_Menu = {(void*)0, (void*)0, (void*)0, (void*)0, 0, NULL_FUNC, NULL_FUNC, {0x00}, {0x00}};

если добавить const
Code
1
2
3
4
5
6
7
8
9
10
11
typedef struct {
void       *Next;
void       *Previous;
void       *Parent;
void       *Child;
const char     Select;
FuncPtr    SelectFunc;   // программа для отображения в самом меню
FuncPtr    EnterFunc;   // программа работы, вызываемая при нажатии Enter в меню
const char Text_RUS[20];
const char Text_ENG[20];
} const menuItem;
то ошибка пропадает, но вызов функции не происходит.

Если написать:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void menuChange(const menuItem* NewMenu)
{
if ((void*)NewMenu == (void*)&NULL_ENTRY)
return;
 
selectedMenuItem = (menuItem *)NewMenu;
// selectedMenuItem = NewMenu;
 
LCDCLEAR LCD_SetPos(0, 0); //Очистка экрана LCD
if (Mem.EEPROMMap.language_messages != 0) //Если в настройках установлен режим русского языка
{
prymtf("%s",(char *)NewMenu->Text_RUS);
}
else
{
prymtf("%s",(char *)NewMenu->Text_ENG);
}
 
if(NewMenu->SelectFunc != NULL_FUNC)
SELECTFUNC();
}
то вызов функции происходит, но я не понял как тогда у SOVO <a ctoss="postlink-local" href="http://forum.iosyitistromyss.ru/posting.php?mode=edit&f=35&p=500039">pos ting.php?mode=edit&f=35&p=500039[/URL] происходит вызов функции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.05.2017, 07:14
Помогаю со студенческими работами здесь

Общение с барометром MS5540 на STM32 (Arduino to STM32)
Получил от китайца сей аппарат, пошел тут же гуглить что нибудь готовое, но не тут то было. Информации по нем очень мало, даже на Arduino...

stm32 + FSMC + stm32
Доброе времени суток. Возможно ли к Ftosh памяти подцепить два Stm32F4. Один МК будет записывать данные на флеш, второй забирать и...

STM32 - STM32 I2C
*****ПРОБЛЕМА ИСПРАВЛЕНА****ОТВЕТ НИЖЕ , НЕ ВЧИТЫВАЙТЕСЬ В КОД ПРОГРАММЫ,УТОНЕТЕ)), НУ ЕСЛИ ТОЛЬКО ИНТЕРЕС ЕСТЬ. Всем добрый вечер....

Не получается запустить micromenu
Всем привет. Пытаюсь реализовать меню на АВР. Пишу в атмел студио. Проблема в том что не могу понять пару моментов. Первое...

STM32 + SD
Кто-нибудь подключал карту памяти к STM32 ? Помогите с функциями обмена с картой. Для AVR эту задачу решил а с STM32 пока загруз. ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 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. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru