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

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

Запись от Maks размещена 26.03.2026 в 21:28. Обновил(-а) Maks 05.04.2026 в 18:59
Показов 2215 Комментарии 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
Комментарии
 
Новые блоги и статьи
После бана на Пикабу не работает авторизация аккаунта с Яндекса.
Hrethgir 09.07.2026
В частности https:/ / auto. ru/ logbook/ zapret-na-vozhdenie-posle-65-let_1cf28789-07b4-4c75-a2f7-4cd4edf9deeb тут хотел оставить комментарий такой Зрите в корень - монополизация на разработку программ. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru