Печать таблицы значений в 1С 7.7 при отладке

30.06.21

Разработка - Универсальные функции

Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.

В 1С 7.7  возможности языка запросов сильно ограничены, поэтому большой объем обработки данных и сложных вычислений производится на таблицах значений.

Довольно полезной оказывается возможность вывести таблицу значений в табличный документ.

Особенно при отладке. Без изменения основного кода. Если таблица обрабатывается в несколько этапов, ставим точки останова после каждого, выводим таблицу при каждом останове и визуально сравниваем её на разных этапах обработки.

Хотя, можно внести вызовы и в сам код, в виде отладочной печати, если хочется.

Предлагаю способ вывода таблиц значений без создания шаблона табличного документа.

Нужно лишь добавить в глобальный модуль функцию глВывестиТаблицуЗначений

Самое полезное применение этой  функции - возможность вызова прямо из отладчика.

Именно для этого код помещен в функцию а не в процедуру, а также рекомендую поместить её в глобальный модуль с ключевым словом "Экспорт".

Нужно в отладчике во время останова лишь набрать в окне выражение:

глВывестиТаблицуЗначений(МояТаблица)

Можно сделать это несколько раз, после каждого этапа обработки таблицы. И завершив отладку, наблюдать открытые окна табличных документов.

Еще с помощью этой функции можно быстро создавать простейшие отчеты.

Никаких группировок, но есть общие итоги по колонкам. Перечень колонок для расчета итогов указывается в четвертом параметре.
Нужно только описать запрос, затем выполнить его, выгрузить в таблицу значений и вывести её на экран.

Процедура Сформировать()
	ТекстЗапроса="
	|//..................................
	|";
	
	Запрос=СоздатьОбъект("Запрос");
	Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
		Возврат;
	КонецЕсли;
	РезТаблица=СоздатьОбъект("ТаблицаЗначений");
	Запрос.Выгрузить(РезТаблица,1,0);
	глВывестиТаблицуЗначений(РезТаблица,"Экспресс отчет","Экспресс отчет");
КонецПроцедуры

Сама функция:

//******************************************************************************
// глВывестиТаблицуЗначений(Знач аТаблица,Знач аЗаголовокШапки="",Знач аЗаголовокТаб="ТаблицаЗначений",Знач СтрИтоги="")
//
// Параметры: 
//  аТаблица - таблица значений для вывода на экран
//  аЗаголовокШапки  - строка, выводимая в шапке печатной формы
//  аЗаголовокТаб    - строка заголовка окна выводимой формы
//  аСтрИтоги        - строка, содержащая, через запятую, перечень имен колонок по которым нужно 
//    посчитать и вывести итоговую сумму (числовую) по всей таблице. 
//    Может содержать также значения "_Все_" или "_Все_Числовые_"
//
// Возвращаемое значение:
//  1
//
// Описание:
//  Выводит на экране в табличной печатной форме содержимое таблицы значений
//
Функция глВывестиТаблицуЗначений(Знач аТаблица,Знач аЗаголовокШапки="",Знач аЗаголовокТаб="ТаблицаЗначений",Знач аСтрИтоги="") Экспорт
	
	ТипОснАргумента=ТипЗначенияСтр(аТаблица);
	Если ТипОснАргумента<>"ТаблицаЗначений" Тогда
		Сообщить("В процедуру вывода таблицы значений передан аргумент другого типа ("+ТипОснАргумента+")","!");
		Возврат 0;
	КонецЕсли;
	
	флВывестиИтогиПоКолонкам=0;
	
	СтрИтоги=СокрЛП(аСтрИтоги);
	СпИтоги=СоздатьОбъект("СписокЗначений");                          
	Если ПустоеЗначение(СтрИтоги)=0 Тогда
		РасшСтрока="";
		Пока ПустаяСтрока(СтрИтоги)=0 Цикл
			Поз=Найти(СтрИтоги,",");
			Если Поз<>0 Тогда
				ИмяЭлемента=СокрЛП(Лев(СтрИтоги,Поз-1));
				СтрИтоги=Сред(СтрИтоги,Поз+1);
			Иначе
				ИмяЭлемента=СокрЛП(СтрИтоги);
				СтрИтоги="";
			КонецЕсли;
			Если ПустоеЗначение(ИмяЭлемента)=1 Тогда
				Продолжить;
			КонецЕсли;           
			СпИтоги.ДобавитьЗначение(ИмяЭлемента);
		КонецЦикла;
	КонецЕсли;

	
	ТабКолонок=СоздатьОбъект("ТаблицаЗначений");
	ТабКолонок.НоваяКолонка("Номер","Число",15,0);
	ТабКолонок.НоваяКолонка("Имя","Строка");
	ТабКолонок.НоваяКолонка("Ширина","Число",15,0);
	ТабКолонок.НоваяКолонка("ТипЗн","Строка");
	ТабКолонок.НоваяКолонка("Длина","Число",15,0);
	ТабКолонок.НоваяКолонка("Точность","Число",15,0);
	ТабКолонок.НоваяКолонка("Заголовок","Строка");
	ТабКолонок.НоваяКолонка("ФорматнаяСтрока","Строка");
	ТабКолонок.НоваяКолонка("ВывестиИтог","Число",1,0);
	Для СчКол=1 По аТаблица.КоличествоКолонок() Цикл
		ТипЗн="";
		Длина=0;
		Точность=0;
		ЗаголовокКол="";
		ИмяКолонки=аТаблица.ПолучитьПараметрыКолонки(СчКол,ТипЗн,Длина,Точность,ЗаголовокКол,,,);
		Если ПустоеЗначение(ЗаголовокКол)=1 Тогда
		    ЗаголовокКол=ИмяКолонки;
		КонецЕсли;
		
		ФорматнаяСтрока="";
		ВывестиИтог=0;
		
		Если ТипЗн="Число" Тогда
			ДлинаФС=Длина;
			ТочностьФС=Точность;
			Если (ДлинаФС>0) ИЛИ (ТочностьФС>0) Тогда
				ДлинаФС=?(ДлинаФС=0,15,ДлинаФС);
				ФорматнаяСтрока="Ч0"+ДлинаФС+"."+ТочностьФС+".";
			КонецЕсли;
			Если СпИтоги.Принадлежит("_Все_Числовые_")=1 Тогда
				ВывестиИтог=1;
				флВывестиИтогиПоКолонкам=1;
			КонецЕсли;
		КонецЕсли;
		
		Если (СпИтоги.Принадлежит(ИмяКолонки)=1) ИЛИ (СпИтоги.Принадлежит("_Все_")=1) Тогда
		    ВывестиИтог=1;
			флВывестиИтогиПоКолонкам=1;
		КонецЕсли;
		
		ТабКолонок.НоваяСтрока();
		ТабКолонок.Номер=СчКол;
		ТабКолонок.Имя=ИмяКолонки;
		ТабКолонок.ТипЗн=ТипЗн;
		ТабКолонок.Длина=Длина;
		ТабКолонок.Точность=Точность;
		ТабКолонок.Заголовок=ЗаголовокКол;
		ТабКолонок.Ширина=СтрДлина(ЗаголовокКол)+3;
		ТабКолонок.ФорматнаяСтрока=ФорматнаяСтрока;
		ТабКолонок.ВывестиИтог=ВывестиИтог;
	КонецЦикла;
	
	Для СчСтр=1 По аТаблица.КоличествоСтрок() Цикл
		ТабКолонок.ВыбратьСтроки();
		Пока ТабКолонок.ПолучитьСтроку()=1 Цикл
			Если ТабКолонок.ФорматнаяСтрока<>"" Тогда
				Содержимое=СокрЛП(Формат(аТаблица.ПолучитьЗначение(СчСтр,ТабКолонок.Номер),ТабКолонок.ФорматнаяСтрока));
			Иначе
				Содержимое=СокрЛП(аТаблица.ПолучитьЗначение(СчСтр,ТабКолонок.Номер));
			КонецЕсли;
			ТабКолонок.Ширина=Макс(ТабКолонок.Ширина,СтрДлина(Содержимое));
		КонецЦикла;
	КонецЦикла;
	
	Таб=СоздатьОбъект("Таблица");
	
	СтрШапкиТ=1;
	НачКолТ=1;
	
	Если ПустоеЗначение(аЗаголовокШапки)=0 Тогда
	    
		ОбластьТ=Таб.Область(СтрШапкиТ,НачКолТ,СтрШапкиТ,НачКолТ); 
		ОбластьТ.Текст=аЗаголовокШапки;
		ОбластьТ.Контроль(1);
		ОбластьТ.ВертикальноеПоложение(3);
		ОбластьТ.ГоризонтальноеПоложение(1);
		ОбластьТ.РазмерШрифта(12);
		ОбластьТ.Полужирный(1);
		ОбластьТ.ЦветТекста(255);
		
		СтрШапкиТ=СтрШапкиТ+1;
	КонецЕсли;
	
	ОбластьТ=Таб.Область(СтрШапкиТ,НачКолТ,СтрШапкиТ,НачКолТ); 
	ОбластьТ.Текст="№ п/п";
	ОбластьТ.Полужирный(1);
	ОбластьТ.Контроль(4);
	ШиринаСтолбца=СтрДлина(аТаблица.КоличествоСтрок())+3;
	ОбластьТ.ШиринаСтолбца(ШиринаСтолбца);
	ОбластьТ.ВертикальноеПоложение(3);
	ОбластьТ.ГоризонтальноеПоложение(3);
	ОбластьТ.Рамка(3,3,3,3);
	
	ТабКолонок.ВыбратьСтроки();
	Пока ТабКолонок.ПолучитьСтроку()=1 Цикл
		НомКолТ=НачКолТ+ТабКолонок.Номер;
		ОбластьТ=Таб.Область(СтрШапкиТ,НомКолТ,СтрШапкиТ,НомКолТ); 
		ОбластьТ.Текст=ТабКолонок.Заголовок;
		ОбластьТ.Полужирный(1);
		ОбластьТ.Контроль(4);
		ШиринаСтолбца=ТабКолонок.Ширина;
		Если ШиринаСтолбца>=60 Тогда
			ШиринаСтолбца=Цел(ШиринаСтолбца/2);
		КонецЕсли;
		ОбластьТ.ШиринаСтолбца(ШиринаСтолбца);
		ОбластьТ.ВертикальноеПоложение(3);
		ОбластьТ.ГоризонтальноеПоложение(3);
		ОбластьТ.Рамка(3,3,3,3);
	КонецЦикла;
	 
	НомСтрТ=СтрШапкиТ;
	Для СчСтр=1 По аТаблица.КоличествоСтрок() Цикл
		НомСтрТ=НомСтрТ+1;
		
		ОбластьТ=Таб.Область(НомСтрТ,НачКолТ,НомСтрТ,НачКолТ);
		ОбластьТ.Текст=СчСтр;
		ОбластьТ.Контроль(4);
		ОбластьТ.ВертикальноеПоложение(3);
		ОбластьТ.ГоризонтальноеПоложение(3);
		ОбластьТ.Рамка(3,3,3,3);
		
		ТабКолонок.ВыбратьСтроки();
		Пока ТабКолонок.ПолучитьСтроку()=1 Цикл
			НомКолТ=НачКолТ+ТабКолонок.Номер;
			Если ТабКолонок.ФорматнаяСтрока<>"" Тогда
				Содержимое=СокрЛП(Формат(аТаблица.ПолучитьЗначение(СчСтр,ТабКолонок.Номер),ТабКолонок.ФорматнаяСтрока));
			Иначе
				Содержимое=СокрЛП(аТаблица.ПолучитьЗначение(СчСтр,ТабКолонок.Номер));
			КонецЕсли;
			ОбластьТ=Таб.Область(НомСтрТ,НомКолТ,НомСтрТ,НомКолТ);
			ОбластьТ.Текст=Содержимое;
			ОбластьТ.Контроль(4);
			ОбластьТ.ВертикальноеПоложение(3);
			Если ТабКолонок.ТипЗн="Число" Тогда
				ОбластьТ.ГоризонтальноеПоложение(2);
			Иначе
				ОбластьТ.ГоризонтальноеПоложение(1);
			КонецЕсли;	
			ОбластьТ.Рамка(3,3,3,3);
		КонецЦикла;
	КонецЦикла;	 
	
	Если флВывестиИтогиПоКолонкам=1 Тогда
		НомСтрТ=НомСтрТ+1;
		ОбластьТ=Таб.Область(НомСтрТ,НачКолТ,НомСтрТ,НачКолТ); 
		ОбластьТ.Текст="ИТ.";
		ОбластьТ.Полужирный(1);
		ОбластьТ.Контроль(4);
		ОбластьТ.ВертикальноеПоложение(3);
		ОбластьТ.ГоризонтальноеПоложение(3);
		ОбластьТ.Рамка(3,3,3,3);
		
		ТабКолонок.ВыбратьСтроки();
		Пока ТабКолонок.ПолучитьСтроку()=1 Цикл
		
			Содержимое="";
			Если ТабКолонок.ВывестиИтог=1 Тогда
				ИтогПоКол=0;
				
				Если ТабКолонок.ТипЗн="Число" Тогда
					ИтогПоКол=аТаблица.Итог(ТабКолонок.Имя);
				Иначе
					ИтогПоКол=0;
					аТаблица.ВыбратьСтроки();
					Пока аТаблица.ПолучитьСтроку()=1 Цикл
						ИтогПоКол=ИтогПоКол+Число(Строка(аТаблица.ПолучитьЗначение(аТаблица.НомерСтроки,ТабКолонок.Номер)));
					КонецЦикла;
				КонецЕсли;
				
				Если ТабКолонок.ФорматнаяСтрока<>"" Тогда
					Содержимое=СокрЛП(Формат(ИтогПоКол,ТабКолонок.ФорматнаяСтрока));
				Иначе
					Содержимое=СокрЛП(ИтогПоКол);
				КонецЕсли;
			КонецЕсли;
			
			
			НомКолТ=НачКолТ+ТабКолонок.Номер;
			ОбластьТ=Таб.Область(НомСтрТ,НомКолТ,НомСтрТ,НомКолТ); 
			ОбластьТ.Текст=Содержимое;
			ОбластьТ.Полужирный(1);
			ОбластьТ.Контроль(4);
			ОбластьТ.ВертикальноеПоложение(3);
			ОбластьТ.ГоризонтальноеПоложение(2);
			ОбластьТ.Рамка(3,3,3,3);
		КонецЦикла;
	КонецЕсли;
	
	Таб.Опции(0,0,СтрШапкиТ);
	Таб.ТолькоПросмотр(1);
	Таб.Показать(аЗаголовокТаб);
	Возврат 1;
КонецФункции  //глВывестиТаблицуЗначений()

 

ТаблицаЗначений отладка отладчик печать

См. также

Универсальные функции Программист Платформа 1С v7.7 Россия Абонемент ($m)

В библиотеку собраны различные функции по работе с документами, журналами, типами данных, строками, датой и временем, таблицами значений, Excel, файлами, XML, JSON, Http-сервисами, SMTP серверами и т.п.

1 стартмани

22.12.2023    1001    14    user706545_kseg1971    0    

4

Универсальные функции Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.

25.04.2022    2077    zhenyat    7    

6

Универсальные функции Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    13599    4    alsen    3    

5

Универсальные функции Программист Платформа 1С v7.7 Конфигурации 1cv7 1С:Комплексная 7.7 Абонемент ($m)

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    10409    malovandrey    6    

19

Универсальные функции Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

В статье дано описание создания индикатора на форме в среде разработки 1С:Предприятие 7.7 исключительно типовыми средствами.

1 стартмани

27.09.2016    18785    2    HAMMER_59    6    

2

Информационная безопасность Универсальные функции Программист Платформа 1С v7.7 Бесплатно (free)

При использовании терминалок для удаленных баз, иногда при входе в базу данных необходимо исключить возможность входа пользователей с компьютеров с другим часовым поясом. Например, работают в Новосибирской базе с временем UTC +6 и пытаются зайти в базу с UTC +3.

16.05.2016    12927    kudenzov    3    

10
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. serpent 69 30.06.21 11:39 Сейчас в теме
В Вашем решении СФОРМИРОВАННУЮ таблицу можно будет увидеть только после Завершения(прекращения) отладки.

С "ПромТЗ.ВыбратьСтроку()" можно посмотреть результат и вернуться в отладку.

я правильно понимаю?
3. Zoltan_Black 2 01.07.21 04:37 Сейчас в теме
(1) Да, все верно.
Но пользоваться "ВыбратьСтроку" не всегда удобно.
Особенно, если таблица большая.
Сложно найти нужное место в этом маленьком оконце, в котором еще и поиск нормально не работает.
2. CheBurator 3126 30.06.21 19:05 Сейчас в теме
печать ТЗ - это как перенумератор...
Не моя, но допилил всякого (не последняя версия)...
.
//********************************************************************************************************************************
//{--- ОПИСАНИЕ ------------------------------------------------------------------------------------------------------------------
// ПечатьТЗ()
//
// Входные параметры:
//
// 	1. ТЗ: обычно входные данные для вывода в виде плоской таблицы, в качестве входных данных допускаются:
//	- ТаблицаЗначений (или ИндексированнаяТЗ) - выводится на печать в виде плоского списка, если не задан параметр "Заголовок" - заголовка не будет
//	- СписокЗначений - выводится на печать в виде плоского списка из двух колонок (значение и представление), заглавие таблицы 
//	из параметра "Заголовок" дополняется литералом "значения списка"
//  - Документ - выводится на печать табличная часть документа, заглавие таблицы из параметра "Заголовок" дополняется 
//	символьной идентификацией документа по типу "Расходная накладная №00000128 от 01.07.19, дополнительно выводятся
//	автор и комментарий к документу если в конфигурации есть общие реквизиты "Автор" и/или "Комментарий"
//
// 	2. Заголовок: заголовок таблицы в печформе и в окне таблицы
//	по умолчанию - не задан
//
// 	3. КолонкиПоНазваниям: 1 - в шапке выводятся представления колонок, 0 - идентификаторы колонок
//	по умолчанию(1) - заглавия колонок из представлений колонок (заглавия колонок во входной ТЗ)
//
// 	4. ИтогиПоКолонкам: выводится итог, -1 - по всем числовым колонкам, 
//						"Колонка1,Колонка2"- по указанным колонкам(можно указаит идентификаторы или номера колонок), иначе - не выводить
//	по умолчанию(-1) - выводятся итоги по всем числовым колонкам
//
//  5. ИтогиПоЦенам: 0 - колонки, содержащие в идентификаторе колонки последовательность символов "Цена", суммироваться не будут,
//					 1 - будет выводится итог как и по всем остальным числовым колонкам
//	по умолчанию(0) - итог по ценовым колонкам не вычисляется
//
//  6. РазделительРазрядов: символ-разделитель разрядов в числовых значениях, используется если не задан параметр "ФорматЧисловыхЗначений",
//	по умолчанию(') - апостроф
//
//  7. ФорматЧисловыхЗначений: форматная строка для чисел по правилам языка 1С
//	по умолчанию("") - не задано, если параметр не задан - форматная строка конструируется автоматически и
//	символом-разделителем разрядов используется параметр РазделительРазрядов
//
// 	8. Таб: выходная таблица, в которую выводится результат, если не задан - создается новая таблица
//	по умолчанию - таблица выводится в отдельную печформу.
//
//  9. ВыводСетки: 0(или пустое значение) - не выводить сетку при отображении печформы на экране, иначе - выводить
//	по умолчанию(0) - сетку не выводить
//
//  10. ВыводЗаголовков: 0(или пустое значение) - не выводить заголовки строк/колонок при отображении печформы на экране, иначе - выводить
//	по умолчанию(0) - заголовоки строк/колонок не выводить
//
//  11.ВыводНулевойТаблицы: 1(или непустое значение) - выводить печформу на экран даже если в выводе нет строк,
//	0(или пустое значение) - не выводить печформу на экран если в выводе нет строк
//	по умолчанию(1) - выводитm печформу на экран если она получилась пустой
//
//  12.ВыводЗаголовковПодвал: 1(или непустое значение) - перед строкой подвала таблицы с итогами по колонкам 
//	повторно выводит шапку (заглавие колонок) таблицы (чтобы в большой таблице итоги можно было визуально соотнести с колонками),
//	0(или пустое значение) - не выводить перед строкой итогов заглавие таблицы
//	по умолчанию(1) - выводить перед итогами заглавия колонок таблицы
//
//  13.ПоказатьСформированнуюТаблицу: 1(или непустое значение) -показать сформированную таблицу на экран,
//	0(или пустое значение) - не показывать; параметр можно использовать если формирование таблицы идет "в цикле",
//  вывод выполняется в один макет (задан параметр макета "Таб") и результат имеет смысл показать один раз только "после цикла",
//	готовую таблицу можно в процедуре не показывать, а показывать за пределами процедуры (через параметр "Таб") с установкой 
//	за пределами процедуры нужных значений для параметров ВыводСетки, ВыводЗаголовков 
//	по умолчанию(1) - показывать сформированную таблицу
//
//}--- ОПИСАНИЕ ------------------------------------------------------------------------------------------------------------------
//
Функция ПечатьТЗ(Знач ТЗ, Заголовок="", КолонкиПоНазваниям=1, Знач ИтогиПоКолонкам=-1, ИтогиПоЦенам=0,
				ФорматЧисловыхЗначений="", РазделительРазрядов="'", Таб="", ВыводСетки=0, ВыводЗаголовков=0,
				ВыводНулевойТаблицы=1, ВыводЗаголовковПодвал=0, ПоказатьСформированнуюТаблицу=1) Экспорт
Показать
EarlyBird; +1 Ответить
4. serpent 69 01.07.21 08:36 Сейчас в теме
(2) А где текст самой функции?
5. CheBurator 3126 01.07.21 10:18 Сейчас в теме
(4) ну вот так возьми и все вам выложи! ;-) позже малость сделаю.
6. serpent 69 01.07.21 13:49 Сейчас в теме
(5) Спасибо, но нам не надо... у меня сделано на ИТЗ и ТабличномПоле...
7. CheBurator 3126 01.07.21 18:13 Сейчас в теме
8. serpent 69 01.07.21 22:00 Сейчас в теме
(7) там же где и Ваша, усиленно работает
9. alul 22.07.21 14:26 Сейчас в теме
Какие дебаты по измученной "семерке" в 2021 году!)))
10. alul 22.07.21 14:39 Сейчас в теме
Таб.Показать(аЗаголовокТаб); (223): Открытие окна в данном режиме недоступно!
11. Zoltan_Black 2 24.08.21 08:59 Сейчас в теме
(10)
Значит Вы запускаете функцию из такого места, где платформа не даёт открывать новые окна.
Вероятно, из формулы реквизита диалога.
Занятно что метод таблицы значений ВыбратьСтроку() здесь работает.
Я нашел четыре способа обойти эту проблему.

1. Если Вы выводите таблицу для просмотра при отладке, то можно переделать функцию,
чтобы она не выводила табличное поле на экран, а сохраняла в файл.

2. Не вызывать функцию из реквизита диалога, а, например, вызывать из формулы кнопки, добавив её на форму.

3. Метод, так называемое, "ложное закрытие формы".
Описывать не буду, можно найти здесь: https://forum.infostart.ru/forum9/topic4200/

4. Использовать внешнюю компоненту FormEx. Спасибо, АЛьФ!
Вызвать метод РазрешитьОткрытиеОкон(Флаг) объекта Сервис перед вызовом функции вывода таблицы.

Цитирую АЛьФ-а:
Метод РазрешитьОткрытиеОкон(Флаг) для обхода запрета открытия форм из формулы реквизита диалога.
Принимает в качестве параметра флаг: 1 - разрешить открытие форм, 0 - запретить открытие форм.
Метод надо вызывать непосредственно в месте, где открытие запрещено.


Как использовать:
Сервис = СоздатьОбъект("Сервис");
Сервис.РазрешитьОткрытиеОкон(1);
глВывестиТаблицуЗначений(МояТЗ)
Оставьте свое сообщение