Форум программистов, компьютерный форум, киберфорум
Maks
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Команды формы и диалоговое окно

Запись от Maks размещена 26.03.2026 в 21:28. Обновил(-а) Maks 05.04.2026 в 18:59
Показов 2314 Комментарии 0

1. Команда формы "ЗаполнитьЗапчасти".



Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных выбран регистр накопления, в который записываются данные о выданных запчастях со склада обменом из БП3.
Реализован алгоритм вывода диалогового окна в случае, если табличная часть документа заполнена.

Первый вариант, с выносом алгоритма диалогового окна в отдельную процедуру:
1C
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
&НаСервере
Процедура ЗаполнитьЗапчастиНаСервере()       
    // Создаем объект запроса для получения данных из регистра накопления
    Запрос = Новый Запрос; 
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   МатериалыНаСкладахОстаткиИОбороты.Материал.Ссылка КАК Материал,
        |   МатериалыНаСкладахОстаткиИОбороты.Материал.Наименование КАК Наименование,
        |   МатериалыНаСкладахОстаткиИОбороты.КоличествоРасход КАК Количество,
        |   МатериалыНаСкладахОстаткиИОбороты.Регистратор.Дата КАК РегистраторДата,
        |   МатериалыНаСкладахОстаткиИОбороты.Регистратор.Ссылка КАК РегистраторСсылка
        |ИЗ
        |   РегистрНакопления.МатериалыНаСкладах.ОстаткиИОбороты(
        |       , 
        |       , 
        |       Регистратор, 
        |       , 
        |       РесурсЛокации = &Спецтехника
        |   ) КАК МатериалыНаСкладахОстаткиИОбороты
        |ГДЕ
        |   МатериалыНаСкладахОстаткиИОбороты.Регистратор.Дата >= &Дата";       
    Запрос.УстановитьПараметр("Дата", Объект.Дата);       
    Запрос.УстановитьПараметр("Спецтехника", Объект.Спецтехника);       
    Результат = Запрос.Выполнить(); 
    Если Результат.Пустой() Тогда       
        Сообщить("Нет данных для заполнения!");       
        Модифицированность = Ложь;    
    Иначе      
        Выборка = Результат.Выбрать();       
        Пока Выборка.Следующий() Цикл           
            НоваяСтрока = Объект.ВыполненныеРаботы.Добавить();            
            НоваяСтрока.мДата = Выборка.РегистраторДата;
            НоваяСтрока.Материал = Выборка.Материал;                                                                
            НоваяСтрока.Количество = Выборка.Количество;          
            НоваяСтрока.ОписаниеРабот = Выборка.РегистраторСсылка;          
            Модифицированность = Истина;        
        КонецЦикла;   
    КонецЕсли; 
КонецПроцедуры
 
&НаКлиенте
Процедура ЗаполнитьЗапчасти(Команда)   
    ОчиститьСообщения();
    ТЧ = Объект.ВыполненныеРаботы; 
    Если ТЧ.Количество() > 0 Тогда
        Если Объект.Статус <> ПредопределенноеЗначение("Перечисление.СтатусРемонтаТС.Выполнено") Тогда    
            ПоказатьВопрос(
                Новый ОписаниеОповещения("ЗаполнитьЗапчасти_Ответ", ЭтаФорма),
                "Перед заполнением таблица будет очищена. Продолжить?",
                РежимДиалогаВопрос.ДаНет
            );          
            Возврат;     
        Иначе          
            ТекстСообщения = "Нельзя выполнить данную команду, поскольку заявка уже выполнена!";           
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
                ТекстСообщения, 
                , 
                "Статус", 
                "Объект"
            );              
            Возврат;         
        КонецЕсли; 
    КонецЕсли;         
    ЗаполнитьЗапчасти_Ответ(КодВозвратаДиалога.Да,);  
КонецПроцедуры   
 
&НаКлиенте
Процедура ЗаполнитьЗапчасти_Ответ(Результат, ДопПараметры) Экспорт   
    Если Результат = КодВозвратаДиалога.Нет Тогда
        Возврат;
    КонецЕсли; 
    Объект.ВыполненныеРаботы.Очистить(); 
    ЗаполнитьЗапчастиНаСервере();     
КонецПроцедуры
Второй вариант клиентской процедуры, с алгоритмом диалогового окна внутри команды формы:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
&НаКлиенте
Процедура ЗаполнитьЗапчасти(Команда)   
    ОчиститьСообщения();
    ТЧ = Объект.ВыполненныеРаботы; 
    Если ТЧ.Количество() > 0 Тогда
        Если Объект.Статус <> ПредопределенноеЗначение("Перечисление.СтатусРемонтаТС.Выполнено") Тогда    
            Ответ = Вопрос("Перед заполнением таблица будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет);
            Если Ответ = КодВозвратаДиалога.Да Тогда
                Объект.ВыполненныеРаботы.Очистить(); 
            Иначе
                Возврат;
            КонецЕсли;   
        Иначе          
            ТекстСообщения = "Нельзя выполнить данную команду, поскольку заявка уже выполнена!";           
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
                ТекстСообщения, 
                , 
                "Статус", 
                "Объект"
            );              
            Возврат;         
        КонецЕсли; 
    КонецЕсли;          
КонецПроцедуры
С целью исключения возможности изменения даты документа пользователем в модуль формы, в процедуру "ПриСозданииНаСервере", добавлен следующий программный код:
1C
1
Элементы.Дата.ТолькоПросмотр = Истина;

2. Команда формы "Очистить".



Размещение в том же документе.
Реализован алгоритм вывода диалогового окна в случае, если табличная часть документа заполнена, а также вывод уведомления при вызове команды, если табличная часть пуста.

Первый вариант, с выносом алгоритма диалогового окна в отдельную процедуру:
1C
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
&НаКлиенте
Процедура Очистить(Команда)
    ТЧ = Объект.ВыполненныеРаботы;
    Если ТЧ.Количество() > 0 Тогда   
        Если Объект.Статус <> ПредопределенноеЗначение("Перечисление.сгэСтатусРемонтаТС.Выполнено") Тогда   
            ПоказатьВопрос(
                Новый ОписаниеОповещения("Очистить_Ответ", ЭтаФорма),
                "Таблица будет очищена. Продолжить?",
                РежимДиалогаВопрос.ДаНет
            );
            Возврат;
        Иначе 
            ОчиститьСообщения();
            ТекстСообщения = "Нельзя выполнить данную команду, поскольку заявка уже выполнена!";
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
                ТекстСообщения, 
                , 
                "Статус", 
                "Объект"
            );   
            Возврат;
        КонецЕсли;
    ИначеЕсли ТЧ.Количество() = 0 Тогда
        ОчиститьСообщения();
        Сообщить("Нет данных для очистки!");
        Возврат; 
        Модифицированность = Ложь;
    КонецЕсли; 
    Очистить_Ответ(КодВозвратаДиалога.Да,);
КонецПроцедуры    
 
&НаКлиенте
Процедура Очистить_Ответ(Результат, ДопПараметры) Экспорт
    Если Результат = КодВозвратаДиалога.Нет Тогда
        Возврат;
    КонецЕсли;
    Объект.ВыполненныеРаботы.Очистить();    
    Модифицированность = Истина;
КонецПроцедуры
Второй вариант реализации, с алгоритмом диалогового окна внутри команды формы:
1C
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
&НаКлиенте
Процедура Очистить(Команда)
    ТЧ = Объект.ВыполненныеРаботы;
    Если ТЧ.Количество() > 0 Тогда   
        Если Объект.Статус <> ПредопределенноеЗначение("Перечисление.сгэСтатусРемонтаТС.Выполнено") Тогда   
            Ответ = Вопрос("Таблица будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет);
            Если Ответ = КодВозвратаДиалога.Да Тогда
                Объект.ВыполненныеРаботы.Очистить();
                Модифицированность =Истина; 
            Иначе
                Возврат;
            КонецЕсли;
        Иначе 
            ОчиститьСообщения();
            ТекстСообщения = "Нельзя выполнить данную команду, поскольку заявка уже выполнена!";
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
                ТекстСообщения, 
                , 
                "Статус", 
                "Объект"
            );   
            Возврат;
        КонецЕсли;
    ИначеЕсли ТЧ.Количество() = 0 Тогда
        ОчиститьСообщения();
        Сообщить("Нет данных для очистки!");
        Возврат; 
        Модифицированность = Ложь;
    КонецЕсли; 
КонецПроцедуры
Нажмите на изображение для увеличения
Название: ТЧМатериалы.jpg
Просмотров: 108
Размер:	27.9 Кб
ID:	11816
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru