Форум программистов, компьютерный форум, киберфорум
Электроника и радиотехника
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/89: Рейтинг темы: голосов - 89, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163

Дистанционный сенсорный диммер

25.10.2011, 12:56. Показов 16708. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток!
Начал я недавно осваивать STM8. И дабы совместить приятное с полезным решил собрать на нем диммер, управляемый с пульта ДУ и местно сенсором.
Изначально схема была для AVR, путем нехитрых манипуляций была портирована на STM8S103F3P6:

http://savepic.su/499702m.gif


На данный момент реализовано (в принципе, самое основное и сложное):
1. Работа с пультом: плавное вкл/выкл, регулировка яркости
2. Работа с сенсором: плавное вкл/выкл, регулировка яркости

Осталось добавить (свисто-перделки):
1. Защиту от помех при определении нуля
2. Возможность перепрограммирования (под ПДУ) без снятия/разборки
3. Работа с EEPROM.
4. Функция автоотключения через заданный интервал
5. Функция иммитация присутствия.
На этом пока все, но в будущем, возможно, список функций расширится.

Вот на первой же свисто-перделке я пока и тормознулся.
Вроде и работает, но при плавном включении (в самом начале) дает короткий импульс на полную мощность, потом все норм.
Итак (пока только относящееся к делу), функции плавного вкл/выкл, регулировки якрости:
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
void PowerDown(u8 valInc){
if (PowerLamp < POWER_MIN){
disableYmtirrupts();
// уменьшаем мощность, обычное фазо-импульсное регулирование
// чем позже включили симистр - тем меньше мощность в нагрузке
// PowerLamp это как раз время которое должно пройти после НУЛЯ
PowerLamp = PowerLamp + valInc;
enableYmtirrupts();
}
}
void PowerUp(u8 valDec){
if (PowerLamp > POWER_MAX){
disableYmtirrupts();
PowerLamp = PowerLamp - valDec;  // аналогично с PowerDown
enableYmtirrupts();
}
}
void PowerOff(void){
PowerLampSet = PowerLamp;           // сохранение текущей установленной мощности
while (PowerLamp < POWER_MIN){   // плавное выключение
delay_us(900);
PowerDown(10);
}
disableYmtirrupts();  // отрубаем все прерывания
TYM1_Cmd(DISABLE); // отрубаем таймер
GPIO_WriteHigh(GPIOC, GPIO_PIN_6); // переводим ножку симистора в 1 (открывается при 0)
}
 
void PowerOn(void){
EnableZeroCross = 1; // добро на определения перехода через 0
enableYmtirrupts();    // врубаем прерывания
while (PowerLamp > PowerLampSet){  // плавное включение
delay_us(900);
PowerUp(10);
}
}
Прерывание по определению перехода через НОЛЬ:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
INTERRUPT_HANDLER(EXTI_PORTA_IRQHomdler, 3){
if (EnableZeroCross){ // определяем, попали ли мы в "окно"
EnableZeroCross = 0;
TYM1->CNTRH = 0;    // сбрасываем счетчик
TYM1->CNTRL = 0;
TYM1->CCR1H = (uint8_t)(PowerLamp >> 8);  // Время до открытия симистора
TYM1->CCR1L = (uint8_t)(PowerLamp);
TYM1->CCR2H = (uint8_t)((PowerLamp + 7) >> 8);  // Время до закрытия симистора
TYM1->CCR2L = (uint8_t)(PowerLamp + 7);
TYM1->CCR3H = (uint8_t)(ZERO_CROSS_MIN >> 8);  // Время до начала окна
TYM1->CCR3L = (uint8_t)(ZERO_CROSS_MIN);
TYM1_Cmd(ENABLE);                               // Врубаем таймер
}
}
Прерывание по совпадению таймера:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
INTERRUPT_HANDLER(TYM1_CAP_COM_IRQHomdler, 12)
{
if (TYM1_SR1_CC1IF){
GPIO_WriteLow(GPIOC, GPIO_PIN_6); // открываем симистр
TYM1_ClearITPendingByt(TYM1_IT_CC1);
}
 
if (TYM1_SR1_CC2IF){
GPIO_WriteHigh(GPIOC, GPIO_PIN_6); // закрываем симистр
TYM1_ClearITPendingByt(TYM1_IT_CC2);
}
 
if (TYM1_SR1_CC3IF){
EnableZeroCross = 1; // даем добро на определение перехода через НОЛЬ
TYM1_ClearITPendingByt(TYM1_IT_CC3);
}
}
Инициализация таймера:
Code
1
2
3
4
5
6
7
8
9
10
11
static void TYM1_Config(void){
TYM1_DeInit();
TYM1_TimeBaseInit(40, TYM1_COUNTERMODE_UP, 1100, 0);  // 4MHz / 40 = 100 000 kHz = 10 мкС
TYM1_SetCompare1(PowerLamp);// Открытие симистора - впринципе можно и не ИНИТЬ
TYM1_ITConfig(TYM1_IT_CC1, ENABLE);
TYM1_SetCompare2(PowerLamp + 7);// Закрытие симистора = Открытие + 70 мкС
TYM1_ITConfig(TYM1_IT_CC2, ENABLE);
TYM1_SetCompare3(ZERO_CROSS_MIN);// минимальное разрешенное окно
TYM1_ITConfig(TYM1_IT_CC3, ENABLE);
TYM1_SelectOnePulseMode(TYM1_OPMODE_SINGLE);
}
Дефайны:
Code
1
2
3
#defyme POWER_MIN 800   // подобрано экспериментально
#defyme POWER_MAX 320           // подобрано экспериментально
#defyme ZERO_CROSS_MIN 900  // - 1 мС от ожидаемого перехода через НОЛЬ
Замысел такой:
1. Определяется ноль
2. Настраивается и запускается таймер
3. Ждем от него прерываний
4. Включаем/выключаем симистр
5. Даем добро на новое определение перехода через НОЛЬ.
6. Начинаем все с начала.

Сейчас, если закоментить строку в прерывании при переходе через НОЛЬ:
Код: if (EnableZeroCross){ // определяем, попали ли мы в "окно" то все работает четко и без косяков.
Раскоменчиваем, и имеет вспышку в начале плавного включения.

У кого есть какие соображения? Прошу поделиться.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.10.2011, 12:56
Ответы с готовыми решениями:

Дистанционный включатель - ПОМОЩЬ
Хотя тема похожая была, но я хочу сделать всё попроще. Необходимо включать котел обогрева автомобиля дистанционно (я думаю это осуществить...

Дистанционный индикатор включения контрольной панели
Доброго времени суток. Имеется цепь: 12v+------(лампа) -----(лампа) ----масса; Светодиод 12в со встроенным резистором. Как подключить этот...

Дистанционный регистратор
Дистанционный регистратор ЭУ 1. Кто знает как к нему подключится и считать данные??? Есть МОХА через которую покдлючён данное...

20
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
25.10.2011, 13:11
вот тут мы довольно подробно всё обсуждали.
<a ctoss="postlink-local" href="http://forum.iosyitistromyss.ru/viewtopys.php?f=17&t=7165">viewtopys.php ?f=17&t=7165[/URL]

1. Определяется ноль
2. Настраивается и запускается таймер
3. Ждем от него прерываний
4. Включаем! /выключить симистор нельзя, он выключиться сам при проходе через ноль
5. Даем добро на новое определение перехода через НОЛЬ.
6. Начинаем все с начала.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
25.10.2011, 13:35
Я в курсе того как работает симистр.
Открывается он у меня импульсами по 70мкС (даже чуть больше).
Согласен неправильно обозвал. Надо было как-то: Окончание импульса открытие симистора.

Но сути дела это не меняет.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
25.10.2011, 22:24
Проблему удалось почти полностью решить.

Но вот как - скажу только после того, как знатоки подскажут мне:
как к этой схеме подцепиться двухканальным осциллографом без ущерба для кого-либо?
А конкретно: как одновременно посмотреть синусоиду в сети и сигнал на ножке МК.
С учетом того, что земля у обоих каналов соединена.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
25.10.2011, 23:39
Подключил. Посмотрел.

Вот теперь стало действительно интересно!
Выставил в прерывании по ЗероКроссу выключение пина,
Выставил в прерывании по третьему каналу(оконный) таймера включение пина.

По идее как должно быть (я так думаю...):
1. При переходе через ноль, пин выставляется в ноль. Это событие происходит с неизменным периодом = константа.
2. В прерывании третьего канала таймера пин выставляется в единицу. Это событие тоже должно происходит с неизменным интервалом, т.к. этот канал каждый раз инициализируется постоянным числом.
Т.е. по логике вещей на экране осциллографа я должен увидеть некий меиндр с постоянной, ни от чего не зависящей (сеть будем считать идеальной) скважностью.

Но в реальной жизни я вижу этот меиндр, но его скважность зависит от установленной мощности лампочки!
Т.е. зависит от значений двух других каналов таймера!!!
КАК ЭТО ПОНИМАТЬ???
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
26.10.2011, 01:07
ЭТО оказалось в неверном чтении статуса регистра SR1.
Правильно надо читать его так:
Code
1
if ((uint8_t)(TYM1->SR1 & (uint8_t)TYM1_FLAG_CC1)){
А так получалось что все три условия отрабатывались друг за дружкой, будто бы "пришло их время".
Теперь "окно" работает как надо. Но косяк со вспышкой все еще остался.
Будем копать дальше...
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
26.10.2011, 14:23
Пока до конца не разобрался. Придет Ригол разберусь досконально.
Сейчас обошел этот косяк так:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void PowerOff(void){
PowerLampSet = PowerLamp;
while (PowerLamp < POWER_MIN){
delay_us(900);
PowerDown(10);
}
TYM1_ITConfig(TYM1_IT_CC1, DISABLE);  // отключаем прерывание на начало импульса открытие симистора
}
 
void PowerOn(void){
TYM1_ITConfig(TYM1_IT_CC1, ENABLE);  // включаем прерывание
while (PowerLamp > PowerLampSet){
delay_us(900);
PowerUp(10);
}
}
Пока поехали по списку дальше.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
26.10.2011, 15:47
У кого есть какие соображения по поводу входа в режим программирования ПДУ?

Я пока хочу сделать так:
1. Кладем руку на сенсор и держим.
2. Яркость или полностью убавляется или прибавляется на всю.
3. Держим еще несколько секунду и входим в режим программирования.
4. Если свет прибавлялся на всю, программируются кнопка увеличения ярости/включения.
5. Если свет убавлялся, программируется кнопка уменьшения яркости/выключения.

Таким образом время программирования конечно увеличится, но появится возможность раздельного программирования отдельных кнопок.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
05.11.2011, 01:15
Фух... первая волна праздников почти прошла. Снова за работу!!!

У кого есть какие-нибудь идеи, отработанные алгоритмы по увеличению ресурса работы EEPROM?

Пока попробую отыскать алгоритм, который мне когда-то давненько попадался в АВРовских апноутах, никто не помнит его номерок случаем? Там, если не ошибаюсь, смысл был в создании двух кольцевых буферов.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
06.11.2011, 21:42
Кому на будущее может пригодиться:
Code
1
2
3
4
5
6
7
8
9
10
11
12
/******************************************************/
/* AVR101 "High endurance EEPROM storage"             */
/*                                                    */
/* Filename: High_Endurance_EEPROM.c                  */
/* Date: 2002.08.15                                   */
/* Author: jltossen                                   */
/*                                                    */
/* Modified: 2003.10.06 (raapelomd)                   */
/* Modified: 2006.07.18 (raapelomd)                   */
/*                                                    */
/* Compyter: IAR EWAVR 2.26C, IAR EWAVR 4.12A         */
/******************************************************/
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
15.11.2011, 22:12
Выкладываю весь проект для IARa целиком и полностью в таком виде, в котором он находится сейчас.
Так что прошу звинять, за внешний вид и малое количество комментариев.
[198.36 Кб]

Сорри за RAR, но в ZIP на форум не пролазит.

Для тех кто не в курсе, код в таком виде выкладывается для решения возникших проблем.
А именно:
Похоже погода на Марсе непричем.
Сейчас новый, перепаяный позавчера МК начал выкидывать теже кренделя.
А ведь почти двое суток отработал на отлично!
Что это, за етит его за ногу, может быть такое?

Наряжение питания 4,9-5 В, за допустимые нормы не выходит.
Если бы броски напряжение по питанию (в наших краях не редкость), то почему выходит из строя (не совсем выходит, не совсем из строя) всего одна единственная нога, которая идет на ТСОП?
Если ногу палит ТСОП (заведомо исправный, раз 5 перепроверенный), то каким образом у него может это получиться? Нога МК всегда настроена на вход с подтяжкой к +.
Вот осцилограммы проблемы с выходной ноги ТСОПа:
До инициализации пина:
http://savepic.su/750957m.jpg

После инициализации пина:
http://savepic.su/742765m.jpg

Как видно, еще до инициализации нога НЕ находится в "свободном полете", т.к. ТСОП не может её своей внутренней подтяжкой (30к) подтянуть к +.
После инициализации (настройка на вход с подтяжкой к +) напруга чуть подросла, но явно не дотягивает до питания.

З.Ы.:
http://savepic.su/733551m.jpg
Прием ИК посылки.
В нагрузку, начались абсолютно аналогичные глюки на соседней ножке РА2.
Что характерно, обе заглючившие ножки предназначены для подключения внешнего кварца!

Клоки у меня настраиваются так:
Код:
static void CLK_Config(void){
CLK_DeInit();
CLK_HSICmd(ENABLE);
CLK_LSICmd(DISABLE);
CLK_HSECmd(DISABLE);
CLK_CCOCmd(DISABLE);
CLK_ClockSwitchCmd(DISABLE);
CLK_FastHaltWakeUpCmd(DISABLE);
CLK_SlowActiveHaltWakeUpCmd(DISABLE);

CLK_PeripheralClockConfig(CLK_PERIPHERAL _I2C, DISABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL _SPI, DISABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL _UART1, DISABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL _UART2, DISABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL _UART3, DISABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL _TIMER6, DISABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL _TIMER4, DISABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL _TIMER5, DISABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL _TIMER2, DISABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL _TIMER3, DISABLE);
//CLK_PeripheralClockConfig(CLK_PERIPHERAL _TIMER1, DISABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL _AWU, DISABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL _ADC, DISABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL _CAN, DISABLE);
CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV4); // включаем делитель HSI = 16/4 = 4МГц для таймера
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV2); // включаем делитель для ядра = 4/2 = 2 МГц
}Отключается все, кроме внутреннего генератора и первого таймера.
Может здесь собака зарыта?

В порядке эксперимента, ТСОП подключил к другому пину с отключенной подтяжкой. Посмотрим, что получится.

Прошу всех желающих, распологающих какими-либо мыслями и соображениями по данной проблеме присоединяться к обсуждению!
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
15.11.2011, 22:14
Чуть не забыл:
Цитата Сообщение от Zhitizmjokov
Считай ещё значение фьюзиков?
Код:
AFR0 = Default
...
AFR7 = Default
CKAWUSEL = Low Speed Internal
EXTCLK = External Oscillator
HSECNT0 = 0
...
HSECNT7 = 0
HSITRIM = 3-bit trymming
I2C = Frozen when stopped
IWDG_HW = Software
LSI_EN = Dysable
PRSC = 16MHz to 128kHz
ROP = Read-out protection disable
Timer1 = Frozen when stopped
Timer2 = Frozen when stopped
Timer4 = Frozen when stopped
UBC = Write protection disable
WWDG_HALT = No Riset
WWDG_HW = Software
0
0 / 0 / 0
Регистрация: 31.08.2010
Сообщений: 550
16.11.2011, 09:32
Привет, не смог проверить :(

Не знаю как в ИАРе, но вот эта запись

Code
1
EXTCLK = External Oscillator
наверное говорит о том что:

External crystal connected to OSCIN/OSCOUT
Как изменить в ИАР-е не знаю,
скачай прогу от стм для заливки и проверь по доке, что тебе нужно, а что нет в "конфигурационных байтах".
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
16.11.2011, 09:40
Значение там меняется легко.

Но вот на что его менять? Если не ошибаюсь, то на замену там предлагается только внешний генератор.
Всеравно проверю, попробую изменить.

Спасибо за наводку.
0
0 / 0 / 0
Регистрация: 31.08.2010
Сообщений: 550
17.11.2011, 12:11
Добрался, проверил все работает без проблем.
Попробовал твой код (как в этой "каше" разбираешься ? :)) ,то же работает.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
17.11.2011, 15:49
Цитата Сообщение от Zhitizmjokov
Добрался, проверил все работает без проблем.
Попробовал твой код (как в этой "каше" разбираешься ? :)) ,то же работает.
Ага работает, а потом (последний раз через двое суток) перестает. По какой причине - не ясно.
ТСОП, сидящий у меня на другом пине без подтяжки, дорабатывает уже вторые сутки без косяков, посмотрим что будет.

Кстати, ради интереса проводил испытания по помехам:
Из той же розетки запитал ТВС с УН, где-то на 20кВ.
Два стационарника (ПК) почти сразу "повесились" (бук и нетбук никак не отреагировали, чего и следовало ожидать:)
Девайсу тоже было все-равно.
Вывод: все проблемы заключены в самом МК.

Я еще только учусь кодить, и от пинков в нужном направлении не откажусь.
Обычно порядок действий такой:
Составляю список задач для девайса (нередко новые задачи приходят уже во время писанины).
Потом начинаю писать код, постепенно идя по всем пунктам списка.
Потом, в процессе пошаговой отладки, я этот код довожу до "приятного вида".
0
0 / 0 / 0
Регистрация: 31.08.2010
Сообщений: 550
17.11.2011, 17:17
Чиркни мне на мыло скину пару книжек по стилистике кода, может зацепит :)
--
Могу оставить "твой" код на пару суток, завтра на работе прошью и оставлю включенным.
Просто ты написал что да же до инициализации пина проблемы, у меня вроде все как и положено работает.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
17.11.2011, 20:37
Цитата Сообщение от Zhitizmjokov
Просто ты написал что да же до инициализации пина проблемы, у меня вроде все как и положено работает.
В первые двое суток все работало норм.
Потом начались проблемы. Сначала с одним пином, и почти сразу со вторым.
0
0 / 0 / 0
Регистрация: 11.04.2010
Сообщений: 22
18.11.2011, 19:23
Я вот делал на тиньке устройство плавного включения света в ванну, у меня тоже этот импульс вначале вылезал. Причем моделировал схему в протеусе, и он там тоже был. Короче, так и не смог победить, забил.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 163
19.11.2011, 01:07
Цитата Сообщение от domsor
Я вот делал на тиньке устройство плавного включения света в ванну, у меня тоже этот импульс вначале вылезал. Причем моделировал схему в протеусе, и он там тоже был. Короче, так и не смог победить, забил.
Если бы проблема была в импульсе - я был бы счастлив.
Но сейчас проблема совсем в другом, и отловить её пока никак не получается.

Вчера вечером прошли вторые сутки.
Устройство работает нормально (с перекинутой ножкой ТСОПа).
Ради эксперимента "включил" вторую заглючившую ножку, и О ЧУДО! Она работает как ей и положено.
Подождем еще.

З.Ы. Под словом "включил" я подразумеваю следующее:
Code
1
 if ((PIN_SIGNAL(INP_SENS)) == 0){ // проверка нажатия на сенсор
Для "отключения" было написано следующее:
Code
1
 if ((PIN_SIGNAL(INP_SENS)) == 2){ // проверка нажатия на сенсор
Что включенным оптимизатором наверняка заменялось на константу (FALSE), и опрос пина просто-напросто не происходил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2011, 01:07
Помогаю со студенческими работами здесь

Дистанционный hard reset
Здравствуйте. Скажите пожалуйста как правильно воспользоваться кнопкой reset на POE адаптере, чтобы сбросить подключенную к нему...

Дистанционный переключатель лвс
Здраствуйте моя проблема заключается в следуюшем. Имеются 2 интернета (по технологии РРРо както так используют разьем RG45 сам не очень в...

По книге Х.Шилдта дистанционный вызов методов -rmi
Здравствуйте!Всем здоровья!Делаю по книге Шилдта Х. урок-дистанционный вызов методов (remote method invocation-rmi).Хочу из этого...

Дистанционный светодиодный индикатор по радиоканалу или по сети 220В?
Здравствуйте! Помогите мне реализовать схему приёмник-передатчик светодиодной индикации по радиоканалу или же если целесообразно по сети...

IR диммер
С наступившим Новым Годом! Есть задача, управлять диммируемым ЭПРА через пульт от телевизора Sony через Avr. С ресивером протокола SIRC...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Настройки 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
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru