Добавление дополнительных отчетов и обработок в тонком клиенте БП 3.0, ЗУП 3.0, УТ 11 Любой отчет и обработку можно подключить пользователям как дополнительные отчеты или обработки, вот например пункт в БП - Банк:
Добавление происходит через
далее Дополнительные отчеты и обработки , в списке нажмите Создать и Выберите Файл отчета/обработки:
Перед добавлением файл нужно подготовить, дописать в модуль объекта код подключения:
Для обработок код:
Код 1C v 8.3 Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации. Вставить( "Вид" , "ДополнительнаяОбработка" ) ;
ПараметрыРегистрации. Вставить( "Назначение" , Новый СписокЗначений) ;
ПараметрыРегистрации. Вставить( "Наименование" , "Сравнение документов БУХ и УТ" ) ;
ПараметрыРегистрации. Вставить( "Версия" , "1.0" ) ;
ПараметрыРегистрации. Вставить( "БезопасныйРежим" , Истина ) ;
ПараметрыРегистрации. Вставить( "Информация" , "" ) ;
ПараметрыРегистрации. Вставить( "Команды" , Новый СписокЗначений) ;
ТаблицаКоманд = ПолучитьТаблицу_Команд( ) ;
ДобавитьКоманду( ТаблицаКоманд,
"Сравнение документов БУХ и УТ" ,
"Сравнение документов БУХ и УТ" ,
"ОткрытиеФормы" ,
Ложь ,
"" ) ;
ПараметрыРегистрации. Вставить( "Команды" , ТаблицаКоманд) ;
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицу_Команд()
Команды = Новый ТаблицаЗначений;
Команды. Колонки. Добавить( "Представление" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Идентификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Использование" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "ПоказыватьОповещение" , Новый ОписаниеТипов( "Булево" ) ) ;
Команды. Колонки. Добавить( "Модификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "" )
НоваяКоманда = ТаблицаКоманд. Добавить( ) ;
НоваяКоманда. Представление = Представление;
НоваяКоманда. Идентификатор = Идентификатор;
НоваяКоманда. Использование = Использование;
НоваяКоманда. ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда. Модификатор = Модификатор;
КонецПроцедуры
Для отчетов и печатных форм меняйте параметр Вид :
Код 1C v 8.3
ПараметрыРегистрации. Вставить( "Вид" , "ДополнительнаяОбработка" ) ;
Возможные значения этого поля приведу в виде таблицы
Значение поля "Вид" Расположение команды
Расширение
файла
ПечатнаяФорма В меню "Печать" на форме объекта или списка epf ЗаполнениеОбъекта В меню "Заполнить" на форме объекта или списка epf СозданиеСвязанныхОбъектов В меню "Создать на основании" - "Создание связанных объектов.." на форме объекта или списка epf Отчет В меню "Отчеты" на форме объекта или списка erf ДополнительнаяОбработка В списке соответствующих подсистем в меню "Сервис" - "Дополнительные обработки" epf ДополнительныйОтчет В списке соответствующих подсистем в меню "Сервис" - "Дополнительные отчеты" erf
Это поле может принимать одно из значений, возвращаемых функциями в типовых конфигурациях:
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки<Вид>(). Например, для вида "ПечатнаяФорма" есть функция ВидОбработкиПечатнаяФорма().
Категория:
Внешние печатные формы, отчеты и обработк�… Добавление дополнительных отчетов и обработок в управляемом приложении Для добавления отчета или обработки нужно в модуле добавить Функцию СведенияОВнешнейОбработке()
Код 1C v 8.2 УП Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
ПараметрыРегистрации. Вставить( "Вид" , "ДополнительнаяОбработка" ) ;
ПараметрыРегистрации. Вставить( "Назначение" , МассивНазначений) ;
ПараметрыРегистрации. Вставить( "Наименование" , "Выгрузка проводок в БП 2.0" ) ;
ПараметрыРегистрации. Вставить( "БезопасныйРежим" , Истина ) ;
ПараметрыРегистрации. Вставить( "Версия" , "1.0" ) ;
ПараметрыРегистрации. Вставить( "Информация" , "Обработка 'Выгрузка проводок в БП 2.0'" ) ;
ТаблицаКоманд = ПолучитьТаблицуКоманд( ) ;
ДобавитьКоманду( ТаблицаКоманд,
"Выгрузка проводок в БП 2.0" ,
"ВыгрузкапроводоквБП20" ,
"ОткрытиеФормы" ,
Ложь ,
"" ) ;
ПараметрыРегистрации. Вставить( "Команды" , ТаблицаКоманд) ;
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды. Колонки. Добавить( "Представление" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Идентификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Использование" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "ПоказыватьОповещение" , Новый ОписаниеТипов( "Булево" ) ) ;
Команды. Колонки. Добавить( "Модификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "" )
НоваяКоманда = ТаблицаКоманд. Добавить( ) ;
НоваяКоманда. Представление = Представление;
НоваяКоманда. Идентификатор = Идентификатор;
НоваяКоманда. Использование = Использование;
НоваяКоманда. ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда. Модификатор = Модификатор;
КонецПроцедуры
После сохранения приступим к добавлению в программу:
Ставим галку Дополнительные отчеты и обработки
Открываем дополнительные отчеты и обработки и жмем создать, появляется окно выбора файла, после выбора:
Укажите Размещение (в каком разделе отображать данный отчет/обработку) и в списке в колонке Быстрый доступ выберите пользователей, которым будет доступен данный отчет/обработка.
Если при добавлении вы получаете ошибку:
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(2621)}: Поле объекта не обнаружено (ХранилищеВариантов)
Если ВнешнийОбъектМетаданные.ХранилищеВариантов <> Неопределено Тогда
То нужно заменить в модуле объекта, в ф ункции СведенияОВнешнейОбработке() :
Код 1C v 8.2 УП РегистрационныеДанные. Вставить( "Вид" , "ДополнительнаяОтчет" ) ;
на:
РегистрационныеДанные. Вставить( "Вид" , "ДополнительнаяОбработка" ) ;
Категория:
Внешние печатные формы, отчеты и обработк�… Функции сохранения таблицы значений в файл и чтения из файла В данном примере хочу привести несколько универсальных функций по выгрузке таблицы значений в файл и дальнейшего чтения из файла:
П орядок программных действий при выгрузке в файл выглядит так:
Подготавливаем таблицу значений (выгружаем из табличной части, выбираем колонки); Конвертируем таблицу значений в табличный документ; Сохраняем табличный документ в MXL.
При загрузке таблицы порядок действий такой:
Читаем из файла табличный документ; Конвертируем табличный документ в таблицу значений; Используем эту таблицу значений в своих целях (загружаем в табличную часть).
Соответственно файл для хранения данных таблицы имеет расширение *.mxl.
Основные функции для реализации поставленной задачи следующие:
ПреобразоватьТДвТЗ – Функция преобразования табличного документа в таблицу значений.
ПреобразоватьТЗвТД – Функция обратного преобразования таблицы значений в табличный документ.
ПрочитатьТЗИзMXL – Читает из файла данные, определяет колонки таблицы и преобразует эти данные в таблицу значений.
ЗаписатьТЗВMXL – Преобразует таблицу значений в табличный документ и записывает его в файл.
Код 1C v 8.3
Функция ПреобразоватьТДвТЗ(ТабДок, СтруктураКолонок, Знач НачалоСтрока = Неопределено, Знач НачалоСтолбец = Неопределено, Знач КонецСтрока = Неопределено, Знач КонецСтолбец = Неопределено) Экспорт
Если НачалоСтрока = Неопределено И НачалоСтолбец = Неопределено Тогда
НачалоСтрока = 1 ;
НачалоСтолбец = 1 ;
КонецЕсли ;
Если НачалоСтрока = Неопределено Тогда
НачалоСтрока = 1 ;
Пока НЕ ТабДок. Область( НачалоСтрока, НачалоСтолбец) . СодержитЗначение
И НачалоСтрока < ТабДок. ВысотаТаблицы
Цикл
НачалоСтрока = НачалоСтрока + 1 ;
КонецЦикла ;
ИначеЕсли НачалоСтолбец = Неопределено Тогда
НачалоСтолбец = 1 ;
Пока НЕ ТабДок. Область( НачалоСтрока, НачалоСтолбец) . СодержитЗначение
И НачалоСтолбец < ТабДок. ШиринаТаблицы
Цикл
НачалоСтолбец = НачалоСтолбец + 1 ;
КонецЦикла ;
КонецЕсли ;
КонецСтрока = ? ( КонецСтрока = Неопределено , ТабДок. ВысотаТаблицы, КонецСтрока) ;
КонецСтолбец = ? ( КонецСтолбец = Неопределено , ТабДок. ШиринаТаблицы, КонецСтолбец) ;
ЭтоТаблица = ( ТипЗнч( СтруктураКолонок) = Тип( "ТаблицаЗначений" ) ) ;
ТабЗначений = ПолучитьТаблицуВывода( СтруктураКолонок) ;
Для ИндексСтроки = НачалоСтрока По КонецСтрока Цикл
СтрокаТЗ = ТабЗначений. Добавить( ) ;
ИндексКолонки = НачалоСтолбец;
Для Каждого Колонка Из СтруктураКолонок Цикл
НаименованиеКолонки = ? ( ЭтоТаблица, Колонка. Наименование, Колонка. Ключ) ;
пИндексКолонки = ? ( ЭтоТаблица, Колонка. СтолбецОтчёт, ИндексКолонки) ;
Если ТабДок. Область( ИндексСтроки, пИндексКолонки) . СодержитЗначение Тогда
СтрокаТЗ[НаименованиеКолонки] = ТабДок. Область( ИндексСтроки, пИндексКолонки) . Значение;
Иначе
СтрокаТЗ[НаименованиеКолонки] = ТабДок. Область( ИндексСтроки, пИндексКолонки) . Текст;
КонецЕсли ;
ИндексКолонки = ИндексКолонки + 1 ;
КонецЦикла ;
КонецЦикла ;
Возврат ТабЗначений;
КонецФункции ;
Функция ПреобразоватьТЗвТД(ТабЗначений, ТабДок = Неопределено, Знач НачалоСтрока = Неопределено, Знач НачалоСтолбец = Неопределено, ВыводитьЗаголовки = Ложь) Экспорт
Если ТабДок = Неопределено Тогда
ТабДок = Новый ТабличныйДокумент;
КонецЕсли ;
НачалоСтрока = ? ( НачалоСтрока = Неопределено , 1 , НачалоСтрока) ;
НачалоСтолбец = ? ( НачалоСтолбец = Неопределено , 1 , НачалоСтолбец) ;
ИндексСтроки = НачалоСтрока;
Если ВыводитьЗаголовки Тогда
ИндексКолонки = НачалоСтолбец;
Для Каждого Колонка Из ТабЗначений. Колонки Цикл
ТабДок. Область( ИндексСтроки, ИндексКолонки) . Текст = ? ( ПустаяСтрока( Колонка. Заголовок) , Колонка. Имя, Колонка. Заголовок) ;
ИндексКолонки = ИндексКолонки + 1 ;
КонецЦикла ;
ИндексСтроки = ИндексСтроки + 1 ;
КонецЕсли ;
Для Каждого Элемент Из ТабЗначений Цикл
ИндексКолонки = НачалоСтолбец;
Для Каждого Колонка Из ТабЗначений. Колонки Цикл
ТабДок. Область( ИндексСтроки, ИндексКолонки) . СодержитЗначение = Истина ;
ТабДок. Область( ИндексСтроки, ИндексКолонки) . ТипЗначения = Новый ОписаниеТипов( Колонка. ТипЗначения) ;
ТабДок. Область( ИндексСтроки, ИндексКолонки) . Значение = Элемент[Колонка. Имя];
ИндексКолонки = ИндексКолонки + 1 ;
КонецЦикла ;
ИндексСтроки = ИндексСтроки + 1 ;
КонецЦикла ;
Возврат ТабДок;
КонецФункции ;
Функция ПрочитатьТЗИзMXL(ИмяФайла, СтруктураКолонок = Неопределено, ЕстьЗаголовок = Истина) Экспорт
ТабДок = Новый ТабличныйДокумент;
ТабДок. Прочитать( ИмяФайла) ;
Если СтруктураКолонок = Неопределено И ЕстьЗаголовок Тогда
СтруктураКолонок = Новый Структура;
Для ИндексКолонки = 1 По ТабДок. ШиринаТаблицы Цикл
Обл1 = ТабДок. Область( 1 , ИндексКолонки) ;
Обл2 = ТабДок. Область( 2 , ИндексКолонки) ;
ИмяКолонки = СокрЛП( Обл1 . Текст) ;
ИмяКолонки = ? ( Найти( ИмяКолонки, " " ) > 0 , СтрЗаменить( ТРег( ИмяКолонки) , " " , "" ) , ИмяКолонки) ;
СтруктураКолонок. Вставить( ИмяКолонки, ? ( Обл2 . СодержитЗначение, Обл2 . ТипЗначения, Новый ОписаниеТипов) ) ;
КонецЦикла ;
ИначеЕсли СтруктураКолонок = Неопределено И НЕ ЕстьЗаголовок Тогда
СтруктураКолонок = Новый Структура;
Для ИндексКолонки = 1 По ТабДок. ШиринаТаблицы Цикл
Обл2 = ТабДок. Область( 1 , ИндексКолонки) ;
ИмяКолонки = "К" + Формат( ИндексКолонки, "ЧДЦ=0; ЧН=0; ЧГ=0" ) ;
СтруктураКолонок. Вставить( ИмяКолонки, ? ( Обл2 . СодержитЗначение, Обл2 . ТипЗначения, Новый ОписаниеТипов) ) ;
КонецЦикла ;
КонецЕсли ;
Таблица = ПреобразоватьТДвТЗ( ТабДок, СтруктураКолонок, ? ( ЕстьЗаголовок, 2 , 1 ) , 1 ) ;
Возврат Таблица;
КонецФункции ;
Процедура ЗаписатьТЗВMXL(ИмяФайла, ТабЗначений, ЕстьЗаголовок = Истина) Экспорт
ТабДок = ПреобразоватьТЗвТД( ТабЗначений, Неопределено , 1 , 1 , ЕстьЗаголовок) ;
ТабДок. Записать( ИмяФайла, ТипФайлаТабличногоДокумента. MXL) ;
КонецПроцедуры ;
Еще небольшой набор функций для вывода таблицы значений в табличный документ. После формирования табличного документа, - сохраняем его в файл mxl.
Табличный документ можно сохранить a файлы следующих типов:
ANSITXT - Текстовый документ DOCX - документ MS Word HTML HTML3 HTML4 HTML5 MXL MXL7 ODS - Файл Open Office PDF - файл Acrobat Readr TXT - Текстовый документ XLS - файл Excel XLS95 - файл Excel95 XLS97 - файл Excel97 XLSX - файл Excel2010
Код 1C v 8.3
Функция ЗагрузитьТЗизФайла(ИмяФайла)
Путь = КаталогВременныхФайлов( ) + ИмяФайла;
Текст = Новый ЧтениеТекста( Путь, КодировкаТекста. UTF8) ;
стрТЗ = Текст. Прочитать( ) ;
Текст. Закрыть( ) ;
ТЗ = ЗначениеИзСтрокиВнутр( стрТЗ) ;
Возврат ТЗ;
КонецФункции
Функция ЗаписьТЗ2ТабДок(записьТЗ,НомерСтроки,ТабличныйДокумент)
НомерКолонки = 1 ;
Символ160 = Символ( 160 ) ;
Для каждого полеТЗ из ЗаписьТЗ цикл
типПоляТЗ = ТипЗнч( полеТЗ) ;
если типПоляТЗ = Тип( "Число" ) тогда
полеТЗ= Строка( полеТЗ) ;
полеТЗ= СтрЗаменить( полеТЗ, Символ160 , "" ) ;
полеТЗ= СтрЗаменить( полеТЗ, "," , "." ) ;
иначеесли типПоляТЗ = Тип( "Строка" ) тогда
иначе
полеТЗ = строка( полеТЗ) ;
КонецЕсли ;
имяОбласти = "R" + номерСтроки + "C" + НомерКолонки;
имяОбласти = СтрЗаменить( имяОбласти, Символ( 160 ) , "" ) ;
Ячейка = ТабличныйДокумент. Область( имяОбласти) ;
Ячейка. Текст = полеТЗ;
НомерКолонки = НомерКолонки + 1 ;
КонецЦикла ;
КонецФункции
Функция НаимКолонок2Mxl(ТаблицаЗначений,ТабличныйДокумент)
номерСтроки= 1 ;
номКолонки= 1 ;
ТабличныйДокумент = новый ТабличныйДокумент;
Для НомКол= 0 по ТаблицаЗначений. Колонки. Количество( ) - 1 Цикл
имяКолонки= ТаблицаЗначений. Колонки[НомКол]. Имя;
имяОбласти = "R" + номерСтроки + "C" + номКолонки;
имяОбласти = СтрЗаменить( имяОбласти, Символ( 160 ) , "" ) ;
Ячейка = ТабличныйДокумент. Область( имяОбласти) ;
Ячейка. Текст = имяКолонки;
ЖирныйШрифт = ? ( ЖирныйШрифт = Неопределено , Новый Шрифт( Ячейка. Шрифт, , , Истина ) , ЖирныйШрифт) ;
Ячейка. Шрифт = ЖирныйШрифт;
номКолонки = номКолонки + 1 ;
КонецЦикла ;
КонецФункции
Функция Таблица2Mxl(ТаблицаЗначений,ТабличныйДокумент)
НомСтр= 1 ;
Для каждого записьТЗ из ТаблицаЗначений Цикл
НомСтр = НомСтр + 1 ;
ЗаписьТЗ2 ТабДок( записьТЗ, НомСтр, ТабличныйДокумент) ;
КонецЦикла ;
КонецФункции
Функция ТаблицаЗначений2Mxl(ТаблицаЗначений,ФайлMxl)
ТабличныйДокумент = новый ТабличныйДокумент;
НаимКолонок2 Mxl( ТаблицаЗначений, ТабличныйДокумент) ;
Таблица2 Mxl( ТаблицаЗначений, ТабличныйДокумент) ;
ТабличныйДокумент. Записать( ФайлMxl, ТипФайлаТабличногоДокумента. MXL) ;
ТабличныйДокумент. Показать( ФайлMxl, ФайлMxl) ;
Возврат 0 ;
КонецФункции
Функция Тест_ВыгрузитьТЗвMxl() ;
файл_мТЗИсходныеДанные = "мТЗИсходныеДанные.dat" ;
ТЗ = ЗагрузитьТЗизФайла( файл_мТЗИсходныеДанные) ;
ФайлMxl = КаталогВременныхФайлов( ) + СтрЗаменить( файл_мТЗИсходныеДанные, ".dat" , ".mxl" ) ;
ТаблицаЗначений2 Mxl( ТЗ, ФайлMxl) ;
КонецФункции
Тест_ВыгрузитьТЗвMxl( ) ;
Пример выгруженной таблицы значений в файл:
Категория:
Работа с Таблицей Значений Преобразование ТаблицыЗначений во временную таблицу Код 1C v 8.х Процедура ПреобразоватьТЗвТЗсОписаниемТипов(ТЗ)
ТипизированнаяТЗ = Новый ТаблицаЗначений;
Для й= 1 По Тз. Количество( ) Цикл ТипизированнаяТЗ. Добавить( ) ;
КонецЦикла ;
ДЗТипов = Новый ДеревоЗначений;
ДЗТипов. Колонки. Добавить( "ИмяКолонки" ) ;
ДЗТипов. Колонки. Добавить( "ТипЗначений" ) ;
Для Каждого Колонка из Тз. Колонки Цикл
СтрокаКолонки = ДЗТипов. Строки. Добавить( ) ;
СтрокаКолонки. ИмяКолонки = Колонка. Имя;
ТекСТрокаТипа = СтрокаКолонки. Строки. Добавить( ) ;
ТекСТрокаТипа. ИмяКолонки = Колонка. Имя;
ТекСТрокаТипа. ТипЗначений = ТипЗнч( тз[0 ][Колонка. Имя]) ;
Для Каждого СтокаТЗ из Тз Цикл
ТекТип = ТипЗнч( СтокаТЗ[Колонка. Имя]) ;
Если НЕ ТекТип = ТекСТрокаТипа. ТипЗначений Тогда
Если СтрокаКолонки. Строки. Найти( ТекТип, "ТипЗначений" ) = Неопределено Тогда
ТекСТрокаТипа = СтрокаКолонки. Строки. Добавить( ) ;
ТекСТрокаТипа. ИмяКолонки = Колонка. Имя;
ТекСТрокаТипа. ТипЗначений = ТекТип;
КонецЕслИ ;
КонецЕслИ ;
КонецЦикла ;
МассивТипов = СтрокаКолонки. Строки. ВыгрузитьКолонку( "ТипЗначений" ) ;
ТипизированнаяТЗ. Колонки. Добавить( Колонка. Имя, Новый ОписаниеТипов( МассивТипов) , Колонка. Заголовок) ;
ТипизированнаяТЗ. ЗагрузитьКолонку( Тз. ВыгрузитьКолонку( Колонка) , Колонка. Имя) ;
КонецЦикла ;
КонецПроцедуры
Источник
Категория:
Запросы Импорт/экспорт CSV в ТЗ Код 1C v 8.х
&НаСервереБезКонтекста
Функция ПреобразоватьТекстCSVвТЗ(ТекстCSV="" , Разделитель=";" ) Экспорт
ТЗ = Новый ТаблицаЗначений;
ОсобаяСтрока = "$#%^&*!xyxb$#%&*!^" ;
НомерСтроки = 1 ;
Стр = СтрПолучитьСтроку( ТекстCSV, НомерСтроки) ;
Пока НомерСтроки < = СтрЧислоСтрок( ТекстCSV) Цикл
СтрокаТЗ = ТЗ. Добавить( ) ;
НомерПоля = 0 ;
Пока Стр < > "" Цикл
Токен = "" ;
ПозицияРазделителя = Найти( стр, Разделитель) ;
ПозицияОткрКавычек = Найти( стр, """ " ) ;
Если ( ПозицияРазделителя > ПозицияОткрКавычек ИЛИ ПозицияРазделителя = 0 ) И ПозицияОткрКавычек > 0 Тогда
Токен = Сред( Стр, 1 , ПозицияОткрКавычек) ;
Стр = СтрЗаменить( Сред( Стр, ПозицияОткрКавычек+ 1 ) , """ "" " , ОсобаяСтрока) ;
ПозицияЗакрКавычек = Найти( Стр, """ " ) ;
Пока ПозицияЗакрКавычек = 0 Цикл
Токен = Токен + Стр + Символы. ПС;
НомерСтроки = НомерСтроки + 1 ;
Стр = СтрПолучитьСтроку( ТекстCSV, НомерСтроки) ;
Стр = СтрЗаменить( Стр, """ "" " , ОсобаяСтрока) ;
ПозицияЗакрКавычек = Найти( Стр, """ " ) ;
КонецЦикла ;
ПозицияРазделителя= Найти( Сред( Стр, ПозицияЗакрКавычек) , Разделитель) ;
ПозицияРазделителя = ? ( ПозицияРазделителя> 0 , ПозицияЗакрКавычек + ПозицияРазделителя- 1 , 0 ) ;
КонецЕсли ;
Токен = Токен + ? ( ПозицияРазделителя> 0 , Сред( Стр, 1 , ПозицияРазделителя- 1 ) , Стр) ;
Стр = ? ( ПозицияРазделителя> 0 , Сред( Стр, ПозицияРазделителя+ 1 ) , "" ) ;
Если Лев( Токен, 1 ) = """ " Тогда
Токен = Сред( Токен, 2 ) ;
Токен = ? ( Прав( Токен, 1 ) = """ " , Сред( Токен, 1 , СтрДлина( Токен) - 1 ) , Токен) ;
КонецЕсли ;
Токен = СтрЗаменить( Токен, ОсобаяСтрока, """ " ) ;
НомерПоля = НомерПоля + 1 ;
Если ТЗ. Колонки. Количество( ) < НомерПоля Тогда
ТЗ. Колонки. Добавить( "Колонка" + НомерПоля, Новый ОписаниеТипов( "Строка" ) ) ;
КонецЕсли ;
СтрокаТЗ[НомерПоля- 1 ] = Токен;
КонецЦикла ;
НомерСтроки = НомерСтроки + 1 ;
Стр = СтрПолучитьСтроку( ТекстCSV, НомерСтроки) ;
КонецЦикла ;
Возврат ТЗ;
КонецФункции
&НаСервереБезКонтекста
Функция ПреобразоватьТЗвТекстCSV(ТЗ, Разделитель = ";" , флЭкспортироватьИменаКолонок = Ложь) Экспорт
ТекстCSV = "" ;
Если флЭкспортироватьИменаКолонок Тогда
ПодготовленнаяСтрока = "" ;
Для Каждого Колонка Из ТЗ. Колонки Цикл
ПодготовленнаяСтрока = ПодготовленнаяСтрока + Колонка. Имя + Разделитель;
КонецЦикла ;
ПодготовленнаяСтрока = Лев ( ПодготовленнаяСтрока, СтрДлина( ПодготовленнаяСтрока) - 1 ) ;
ТекстCSV = ТекстCSV + ПодготовленнаяСтрока + Символы. ПС;
КонецЕсли ;
Для Каждого Строка Из ТЗ Цикл
ПодготовленнаяСтрока = "" ;
Для Каждого Колонка Из ТЗ. Колонки Цикл
ПреобразованноеПоле = Строка[Колонка. Имя];
Если Найти( ПреобразованноеПоле, """ " ) Тогда
ПреобразованноеПоле = СтрЗаменить( ПреобразованноеПоле, """ " , """ "" " ) ;
КонецЕсли ;
Если Найти( ПреобразованноеПоле, Разделитель) ИЛИ Найти( ПреобразованноеПоле, Символы. ПС) ИЛИ Найти( ПреобразованноеПоле, """ " ) Тогда
ПреобразованноеПоле = """ " + ПреобразованноеПоле + """ " ;
КонецЕсли ;
ПодготовленнаяСтрока = ПодготовленнаяСтрока + ПреобразованноеПоле + Разделитель;
КонецЦикла ;
ПодготовленнаяСтрока = Лев ( ПодготовленнаяСтрока, СтрДлина( ПодготовленнаяСтрока) - 1 ) ;
ТекстCSV = ТекстCSV + ПодготовленнаяСтрока + Символы. ПС;
КонецЦикла ;
Возврат ТекстCSV;
КонецФункции
Источник
Категория:
Работа с Таблицей Значений ДеревоЗначений в ТекстовыйДокумент Код 1C v 8.2 УП
&НаСервереБезКонтекста
Процедура ВывестиДеревоЗначенийВТекст(Знач рВетка,рТекст,Знач рПараметры=Неопределено)
Попытка
Если рТекст= Неопределено Тогда
Если ТипЗнч( рВетка) < > Тип( "ДеревоЗначений" ) Тогда Возврат КонецЕсли ;
Если ТипЗнч( рПараметры) < > Тип( "Структура" ) Тогда рПараметры= Новый Структура КонецЕсли ;
стрКолонок= ? ( рПараметры. Свойство( "Колонки" ) , рПараметры. Колонки, Неопределено ) ;
Если ТипЗнч( стрКолонок) < > Тип( "Структура" ) Тогда стрКолонок= Новый Структура КонецЕсли ;
рПоказыватьУровни= ? ( рПараметры. Свойство( "ПоказыватьУровни" ) , рПараметры. ПоказыватьУровни, Ложь ) ;
рШагОтступа= ? ( рПараметры. Свойство( "ШагОтступа" ) , рПараметры. ШагОтступа, 2 ) ;
рДеревоДляТеста= рВетка;
рЗапись= Новый ЗаписьXML;
рЗапись. УстановитьСтроку( ) ;
СериализаторXDTO. ЗаписатьXML( рЗапись, рДеревоДляТеста) ;
стро= рЗапись. Закрыть( ) ;
стро= СтрЗаменить( стро, "xmlns=" , "xmlns:myns1C=" ) ;
рЧтение= Новый ЧтениеXML;
рЧтение. УстановитьСтроку( стро) ;
постр= Новый ПостроительDOM;
рДокументДОМ= постр. Прочитать( рЧтение) ;
рВыражение= "/ValueTree/row" ; максКолвоУровней= 1 ;
рРазыменователь= Новый РазыменовательПространствИменDOM( рДокументДОМ) ;
Пока Истина Цикл
#Если Клиент Тогда
ОбработкаПрерыванияПользователя( ) ;
#КонецЕсли
рРезультат= рДокументДОМ. ВычислитьВыражениеXPath( рВыражение, рДокументДОМ, рРазыменователь, ТипРезультатаDOMXPath. Любой) ;
Если рРезультат. ПолучитьСледующий( ) = Неопределено Тогда Прервать КонецЕсли ;
рВыражение= рВыражение+ "/row" ;
максКолвоУровней= максКолвоУровней+ 1 ;
КонецЦикла ;
максКолвоУровней= максКолвоУровней- 1 ;
строПробелы= " " ;
строРазделители= "===============================================================================================" ;
строОтступы= "___________________________________________________________________________________________" ;
секШапка1 = "|[_HCS" + Лев( строПробелы, максКолвоУровней* рШагОтступа) + "]|" ;
секГорРазделитель1 = "|" + Лев( строОтступы, максКолвоУровней* рШагОтступа+ 6 ) + "|" ;
рШиринаКолонкиИерархии= СтрДлина( секШапка1 ) - 2 ;
строПолейШапки= "#Поле _HCS
| #Выравнивание Центр" ;
строПолейЗаписи= "" ;
Если рПоказыватьУровни Тогда
секШапка1 = секШапка1 + "[_Level]|" ;
секГорРазделитель1 = секГорРазделитель1 + Лев( строРазделители, 8 ) + "|" ;
строПолейШапки= строПолейШапки+ "
|#Поле _Level
| #Выравнивание Центр" ;
строПолейЗаписи= "#Поле _Level
| #Выравнивание Центр
| #Забивать Истина" ;
КонецЕсли ;
мИменКолонок= Новый Массив;
Для каждого кол Из рВетка. Колонки Цикл
Если стрКолонок. Количество( ) < > 0 и не стрКолонок. Свойство( кол. Имя) Тогда Продолжить КонецЕсли ;
рДлинаИмениКолонки= СтрДлина( кол. Имя) ;
рНужнаяШирина= Макс( ? ( кол. Ширина< 3 , 10 , кол. Ширина) , рДлинаИмениКолонки) ;
секШапка1 = секШапка1 + "[" + кол. Имя+ Лев( строПробелы, рНужнаяШирина- рДлинаИмениКолонки) + "]|" ;
секГорРазделитель1 = секГорРазделитель1 + Лев( строРазделители, рНужнаяШирина+ 1 ) + "=|" ;
строПолейШапки= строПолейШапки+ "
|#Поле " + кол. Имя+ "
| #Выравнивание Центр" ;
рОписТипов= кол. ТипЗначения;
Если рОписТипов. Типы( ) . Количество( ) = 1 и рОписТипов. СодержитТип( Тип( "Булево" ) ) Тогда
рВыравнивание= "Центр" ;
ИначеЕсли рОписТипов. СодержитТип( Тип( "Число" ) ) Тогда
рВыравнивание= "Право" ;
ИначеЕсли рОписТипов. СодержитТип( Тип( "Строка" ) ) и рОписТипов. КвалификаторыСтроки. Длина= 0 Тогда
рВыравнивание= "ПоШирине" ;
Иначе
рВыравнивание= "Лево" ;
КонецЕсли ;
строПолейЗаписи= строПолейЗаписи+ ? ( ПустаяСтрока( строПолейЗаписи) , "" , Символы. ПС) + "#Поле " + кол. Имя+ "
| #Выравнивание " + рВыравнивание;
Попытка
Если ЗначениеЗаполнено( стрКолонок[кол. Имя]) Тогда
строПолейЗаписи= строПолейЗаписи+ "
| #Формат "" " + СокрЛП( стрКолонок[кол. Имя]) + """ " ;
КонецЕсли ;
Исключение
КонецПопытки ;
мИменКолонок. Добавить( кол. Имя) ;
КонецЦикла ;
секШапка2 = СтрЗаменить( СтрЗаменить( секШапка1 , "[" , "<" ) , "]" , ">" ) ;
секЗапись1 = секШапка1 ; секЗапись2 = секШапка2 ;
секГорРазделитель2 = СтрЗаменить( СтрЗаменить( секГорРазделитель1 , "=" , "-" ) , "|" , "+" ) ;
секГорРазделитель1 = СтрЗаменить( секГорРазделитель1 , "_" , "=" ) ;
секГорРазделитель2 = СтрЗаменить( секГорРазделитель2 , "_" , " " ) ;
тМакет= Новый ТекстовыйДокумент;
тМакет. ДобавитьСтроку( "#Область Шапка" ) ;
тМакет. ДобавитьСтроку( строПолейШапки) ;
тМакет. ДобавитьСтроку( секГорРазделитель1 ) ;
тМакет. ДобавитьСтроку( секШапка1 ) ;
тМакет. ДобавитьСтроку( секШапка2 ) ;
тМакет. ДобавитьСтроку( секГорРазделитель1 ) ;
тМакет. ДобавитьСтроку( "#КонецОбласти" ) ;
тМакет. ДобавитьСтроку( "" ) ;
тМакет. ДобавитьСтроку( "#Область Запись" ) ;
тМакет. ДобавитьСтроку( строПолейЗаписи) ;
тМакет. ДобавитьСтроку( секЗапись1 ) ;
тМакет. ДобавитьСтроку( секЗапись2 ) ;
тМакет. ДобавитьСтроку( секГорРазделитель2 ) ;
тМакет. ДобавитьСтроку( "#КонецОбласти" ) ;
рПараметры. Вставить( "ИсходныйМакет" , тМакет) ;
рТекст= Новый ТекстовыйДокумент;
сек= тМакет. ПолучитьОбласть( "Шапка" ) ;
сек. Параметры. _HCS= "Иерархия" ;
Для каждого имякол Из мИменКолонок Цикл
кол= рВетка. Колонки[имякол];
сек. Параметры[кол. Имя]= ? ( ПустаяСтрока( кол. Заголовок) , кол. Имя, кол. Заголовок) ;
КонецЦикла ;
рТекст. Вывести( сек) ;
пар= Новый Структура;
пар. Вставить( "МассивИмёнКолонок" , мИменКолонок) ;
пар. Вставить( "ТекущаяСекция" , тМакет. ПолучитьОбласть( "Запись" ) ) ;
пар. Вставить( "ШиринаКолонкиИерархии" , рШиринаКолонкиИерархии) ;
пар. Вставить( "ПоказыватьУровни" , рПоказыватьУровни) ;
пар. Вставить( "Отступ" , 0 ) ;
пар. Вставить( "ШагОтступа" , рШагОтступа) ;
ВывестиДеревоЗначенийВТекст( рВетка, рТекст, пар) ;
Иначе
мИменКолонок= рПараметры. МассивИмёнКолонок;
рСекция= рПараметры. ТекущаяСекция;
рОтступ= рПараметры. Отступ;
рШиринаКолонкиИерархии= рПараметры. ШиринаКолонкиИерархии;
рПоказыватьУровни= рПараметры. ПоказыватьУровни;
строОтступы= "_________________________________________________________________________________________________________" ;
строПробелы= " " ;
пар= Новый Структура;
пар. Вставить( "МассивИмёнКолонок" , мИменКолонок) ;
пар. Вставить( "ТекущаяСекция" , рПараметры. ТекущаяСекция) ;
пар. Вставить( "ШиринаКолонкиИерархии" , рШиринаКолонкиИерархии) ;
пар. Вставить( "ПоказыватьУровни" , рПоказыватьУровни) ;
пар. Вставить( "ШагОтступа" , рПараметры. ШагОтступа) ;
пар. Вставить( "Отступ" , рОтступ+ рПараметры. ШагОтступа) ;
Для каждого рПодветка Из рВетка. Строки Цикл
рСекция. Параметры. _HCS= Лев( строПробелы, рОтступ) + "\" + Лев( строОтступы, рШиринаКолонкиИерархии- рОтступ- 1 ) ;
Если рПоказыватьУровни Тогда
рСекция. Параметры. _Level= рПодветка. Уровень( ) ;
КонецЕсли ;
Для каждого имякол Из мИменКолонок Цикл
рСекция. Параметры[имякол]= рПодветка[имякол];
КонецЦикла ;
рТекст. Вывести( рСекция) ;
ВывестиДеревоЗначенийВТекст( рПодветка, рТекст, пар)
КонецЦикла ;
КонецЕсли ;
Исключение
Сообщить( "ВывестиДеревоЗначенийВТекст, ошибка: " + ОписаниеОшибки( ) , СтатусСообщения. ОченьВажное) ;
КонецПопытки ;
КонецПроцедуры
Источник
Категория:
Работа с Деревом Значений Как отобразить дерево значений на управляемой форме Создадим новую внешнюю обработку.
Добавляем управляемую форму и создаем обработчик ПриСозданииНаСервере(). Никаких реквизитов и элементов “вручную” не добавляем, будем делать это программно.
Код 1C v 8.2 УП &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ДеревоОбъект = Новый ДеревоЗначений;
ДеревоОбъект. Колонки. Добавить( "Узел" , Новый ОписаниеТипов( "Строка" ) ) ;
Для к1 = 1 По 3 Цикл
СтрокаУ1 = ДеревоОбъект. Строки. Добавить( ) ;
СтрокаУ1 . Узел = "Узел" + к1 ;
Для к2 = 1 По 3 Цикл
СтрокаУ2 = СтрокаУ1 . Строки. Добавить( ) ;
СтрокаУ2 . Узел = СтрокаУ1 . Узел+ к2 ;
Для к3 = 1 По 3 Цикл
СтрокаУ3 = СтрокаУ2 . Строки. Добавить( ) ;
СтрокаУ3 . Узел = СтрокаУ2 . Узел+ к3 ;
КонецЦикла ;
КонецЦикла ;
КонецЦикла ;
МассивДобавляемыхРеквизитов = Новый Массив;
МассивДобавляемыхРеквизитов. Добавить( Новый РеквизитФормы( "Дерево" ,
Новый ОписаниеТипов( "ДеревоЗначений" ) ) ) ;
Для Каждого Колонка Из ДеревоОбъект. Колонки Цикл
МассивДобавляемыхРеквизитов. Добавить(
Новый РеквизитФормы( Колонка. Имя, Колонка. ТипЗначения, "Дерево" ) ) ;
КонецЦикла ;
ИзменитьРеквизиты( МассивДобавляемыхРеквизитов) ;
ЗначениеВРеквизитФормы( ДеревоОбъект, "Дерево" ) ;
ЭлементДерево = Элементы. Добавить( "Дерево" , Тип( "ТаблицаФормы" ) ) ;
ЭлементДерево. ПутьКДанным = "Дерево" ;
ЭлементДерево. Отображение = ОтображениеТаблицы. Дерево;
Для Каждого Колонка Из ДеревоОбъект. Колонки Цикл
НовыйЭлемент = Элементы. Добавить( Колонка. Имя, Тип( "ПолеФормы" ) ,
ЭлементДерево) ;
НовыйЭлемент. Вид = ВидПоляФормы. ПолеВвода;
НовыйЭлемент. ПутьКДанным = "Дерево." + Колонка. Имя;
КонецЦикла ;
КонецПроцедуры
Категория:
Работа с Деревом Значений Пример создания внешней печатной формы для управляемого приложения Пример создания внешней печатной формы АКТа для Бухгалтерии 3.0
1. В конфигураторе 1C Предприятия 8 создаем внешнюю обработку (Файл->Новый->Внешняя обработка), задаем имя.
2. В модуле обработки пишем код. Постараюсь его максимально комментировать. Главное должно быть:
функция ПечатьВнешнейПечатнойФормы табличного документа - которая выведет данные в макет функция Печать - вызывается из конфигурации! в нее передается массив печатаемых объектов и функция СведенияОВнешнейОбработке(). Она необходима для регистрации печатной формы в справочнике ДополнительныеОтчетыИОбработки, в ней собирается структура с данными для подключения формы. Эта функция, а также ряд сопутствующих ей, практически одинаковы для всех печатных форм, поэтому их можно просто копировать в новую печатную форму ничего не меняя.
Код 1C v 8.3
Функция ПечатьВнешнейПечатнойФормы(МассивОбъектов, ОбъектыПечати, Подписант) Экспорт
ТабДок = новый ТабличныйДокумент;
Макет = ПолучитьМакет( "Макет" ) ;
ОбластьШапки = Макет. ПолучитьОбласть( "Шапка" ) ;
ОбластьДанные = Макет. ПолучитьОбласть( "Данные" ) ;
ОбластьПодвал = Макет. ПолучитьОбласть( "Подвал" ) ;
Запрос = новый запрос;
Запрос. УстановитьПараметр( "МассивОбъектов" , МассивОбъектов) ;
Запрос. Текст = "ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.Сумма,
| РеализацияТоваровУслугТовары.Количество,
| РеализацияТоваровУслугТовары.Цена,
| РеализацияТоваровУслугТовары.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка В(&МассивОбъектов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РеализацияТоваровУслугУслуги.Номенклатура,
| РеализацияТоваровУслугУслуги.Сумма,
| РеализацияТоваровУслугУслуги.Количество,
| РеализацияТоваровУслугУслуги.Цена,
| РеализацияТоваровУслугУслуги.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
|ГДЕ
| РеализацияТоваровУслугУслуги.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка" ;
ОбщаяВыборка = Запрос. Выполнить( ) . Выгрузить( ) ;
Для Каждого СсылкаНаОбъект из МассивОбъектов Цикл
ОбластьШапки. Параметры. ТекстЗаголовка = "Акт № " + СсылкаНаОбъект. Номер;
ОбластьШапки. Параметры. Организация = СсылкаНаОбъект. Организация;
ТабДок. Вывести( ОбластьШапки) ;
Отбор = Новый Структура;
Отбор. Вставить( "Ссылка" , СсылкаНаОбъект) ;
Выборка = ОбщаяВыборка. НайтиСтроки( Отбор) ;
ИтогоСумма = 0 ;
ИтогоКоличество = 0 ;
Для Каждого Стр из Выборка Цикл
ЗаполнитьЗначенияСвойств( ОбластьДанные. Параметры, Стр) ;
ИтогоСумма = ИтогоСумма + Стр. Сумма;
ИтогоКоличество = ИтогоКоличество + Стр. Количество;
ТабДок. Вывести( ОбластьДанные) ;
КонецЦикла ;
ОбластьПодвал. Параметры. ИтогоСумма = ИтогоСумма;
ОбластьПодвал. Параметры. Подписант = Подписант;
ТабДок. Вывести( ОбластьПодвал) ;
ТабДок. ВывестиГоризонтальныйРазделительСтраниц( ) ;
КонецЦикла ;
Возврат ТабДок;
КонецФункции
Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью. НужноПечататьМакет( КоллекцияПечатныхФорм, "АКТПечатьВнешняя" ) Тогда
ТабличныйДокумент = ПечатьВнешнейПечатнойФормы( МассивОбъектовНазначения, ОбъектыПечати, "" ) ;
УправлениеПечатью. ВывестиТабличныйДокументВКоллекцию( КоллекцияПечатныхФорм, "АКТПечатьВнешняя" , "АКТ (внешний)" , ТабличныйДокумент) ;
ИначеЕсли УправлениеПечатью. НужноПечататьМакет( КоллекцияПечатныхФорм, "АКТПечатьВнешняяИван" ) Тогда
ТабличныйДокумент = ПечатьВнешнейПечатнойФормы( МассивОбъектовНазначения, ОбъектыПечати, "Иванов А.Ю." ) ;
УправлениеПечатью. ВывестиТабличныйДокументВКоллекцию( КоллекцияПечатныхФорм, "АКТПечатьВнешняяИван" , "АКТ (внешний) Иванов" , ТабличныйДокумент) ;
ИначеЕсли УправлениеПечатью. НужноПечататьМакет( КоллекцияПечатныхФорм, "АКТПечатьВнешняяПетр" ) Тогда
ТабличныйДокумент = ПечатьВнешнейПечатнойФормы( МассивОбъектовНазначения, ОбъектыПечати, "Петров В.С." ) ;
УправлениеПечатью. ВывестиТабличныйДокументВКоллекцию( КоллекцияПечатныхФорм, "АКТПечатьВнешняяПетр" , "АКТ (внешний) Петров" , ТабличныйДокумент) ;
КонецЕсли ;
КонецПроцедуры
#Область СведенияОВнешнейОбработке
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации. Вставить( "Вид" , "ПечатнаяФорма" ) ;
МассивНазначений = Новый Массив;
МассивНазначений. Добавить( "Документ.РеализацияТоваровУслуг" ) ;
ПараметрыРегистрации. Вставить( "Назначение" , МассивНазначений) ;
ПараметрыРегистрации. Вставить( "Наименование" , "АКТ (Внешний)" ) ;
ПараметрыРегистрации. Вставить( "БезопасныйРежим" , ЛОЖЬ ) ;
ПараметрыРегистрации. Вставить( "Версия" , "1.0" ) ;
ПараметрыРегистрации. Вставить( "Информация" , "Дополнительная печатная форма" ) ;
ТаблицаКоманд = ПолучитьТаблицуКоманд( ) ;
ДобавитьКоманду( ТаблицаКоманд, "Внешний: АКТ" , "АКТПечатьВнешняя" , "ВызовСерверногоМетода" , Истина , "ПечатьMXL" ) ;
ДобавитьКоманду( ТаблицаКоманд, "Внешний: АКТ (Иванов)" , "АКТПечатьВнешняяИван" , "ВызовСерверногоМетода" , Истина , "ПечатьMXL" ) ;
ДобавитьКоманду( ТаблицаКоманд, "Внешний: АКТ (Петров)" , "АКТПечатьВнешняяПетр" , "ВызовСерверногоМетода" , Истина , "ПечатьMXL" ) ;
ПараметрыРегистрации. Вставить( "Команды" , ТаблицаКоманд) ;
Возврат ПараметрыРегистрации;
КонецФункции
#КонецОбласти
#Область Вспомогательное
Функция ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы = Неопределено, НаименованиеОбработки = "" , Информация = "" , Версия = "1.0" )
Если ТипЗнч( ОбъектыНазначенияФормы) = Тип( "Строка" ) Тогда
ОбъектНазначенияФормы = ОбъектыНазначенияФормы;
ОбъектыНазначенияФормы = Новый Массив;
ОбъектыНазначенияФормы. Добавить( ОбъектНазначенияФормы) ;
КонецЕсли ;
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации. Вставить( "Вид" , "ПечатнаяФорма" ) ;
ПараметрыРегистрации. Вставить( "БезопасныйРежим" , Истина ) ;
ПараметрыРегистрации. Вставить( "Назначение" , ОбъектыНазначенияФормы) ;
Если Не ЗначениеЗаполнено( НаименованиеОбработки) Тогда
НаименованиеОбработки = ЭтотОбъект. Метаданные( ) . Представление( ) ;
КонецЕсли ;
ПараметрыРегистрации. Вставить( "Наименование" , НаименованиеОбработки) ;
Если Не ЗначениеЗаполнено( Информация) Тогда
Информация = ЭтотОбъект. Метаданные( ) . Комментарий;
КонецЕсли ;
ПараметрыРегистрации. Вставить( "Информация" , Информация) ;
ПараметрыРегистрации. Вставить( "Версия" , Версия) ;
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды. Колонки. Добавить( "Представление" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Идентификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Использование" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "ПоказыватьОповещение" , Новый ОписаниеТипов( "Булево" ) ) ;
Команды. Колонки. Добавить( "Модификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовСерверногоМетода" , ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL" )
НоваяКоманда = ТаблицаКоманд. Добавить( ) ;
НоваяКоманда. Представление = Представление;
НоваяКоманда. Идентификатор = Идентификатор;
НоваяКоманда. Использование = Использование;
НоваяКоманда. ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда. Модификатор = Модификатор;
КонецПроцедуры
#КонецОбласти
3. Добавляем макет вывода печатной формы:
4. Сохраняем и добавляем в конфигурацию:
Подключается через Администрирование - Печатные формы, отчеты и обработки:
Создаете новую обработку, записывайте и при открытии документа Реализация, нажав на Печать - появляются доступные печатные формы с разными подписывающими.
Скачать Шаблон внешней печатной формы для управляемого приложения
Категория:
Внешние печатные формы, отчеты и обработк�… Динамический отчет на СКД с разными вариантами На днях делал несколько однотипных отчетов на СКД.
Общий принцип: формируются все варианты отчета, указанные в настройках схемы и каждый вариант выводится на отдельной вкладке.
Потом возникла мысль попробовать объединить все схемы в один отчет, чтобы не плодить лишних объектов в конфигурации. При этом количество вариантов в этих схемах заранее неизвестно. Ok, challenge accepted.
В тестовой конфигурации создаю для отчета две схемы компоновки, "Склад" и "Заявки".
Запросы наборов данных приводить не буду, для каждой схемы в настройках добавляю несколько вариантов отчетов.
Теперь переходим к созданию формы. Практически все реквизиты формы будут создаваться при выборе необходимого макета отчета.
Код 1C v 8.2 УП &НаСервере
Процедура СоздатьПереченьОтчетов()
Для Каждого Макет Из РеквизитФормыВЗначение( "Отчет" ) . Метаданные( ) . Макеты Цикл
Элементы. МакетОтчета. СписокВыбора. Добавить( Макет. Имя, Макет. Синоним) ;
КонецЦикла ;
КонецПроцедуры
&НаСервере
Процедура ОбработатьВыборМакета()
Макет = РеквизитФормыВЗначение( "Отчет" ) . ПолучитьМакет( МакетОтчета) ;
мУдалить = ? ( ПустаяСтрока( РеквизитыКУдалению) , Новый Массив, ПолучитьИзВременногоХранилища( РеквизитыКУдалению) ) ;
мДобавить = Новый Массив;
кУдалению = Новый Массив;
Для Каждого Вариант Из Макет. ВариантыНастроек Цикл
ИмяРеквизита = "ТабДок_" + Вариант. Имя;
тРеквизит = Новый РеквизитФормы( ИмяРеквизита, Новый ОписаниеТипов( "ТабличныйДокумент" ) ) ;
мДобавить. Добавить( тРеквизит) ;
кУдалению. Добавить( ИмяРеквизита) ;
КонецЦикла ;
ИзменитьРеквизиты( мДобавить, мУдалить) ;
Пока Элементы. СтраницыОтчета. ПодчиненныеЭлементы. Количество( ) Цикл
Элементы. Удалить( Элементы. СтраницыОтчета. ПодчиненныеЭлементы[0 ]) ;
КонецЦикла ;
Для Каждого Вариант Из Макет. ВариантыНастроек Цикл
Страница = Элементы. Добавить( "Страница_" + Вариант. Имя, Тип( "ГруппаФормы" ) , Элементы. СтраницыОтчета) ;
Страница. Вид = ВидГруппыФормы. Страница;
Страница. Заголовок = Вариант. Представление;
ИмяРеквизита = "ТабДок_" + Вариант. Имя;
ТабДок = Элементы. Добавить( ИмяРеквизита, Тип( "ПолеФормы" ) , Страница) ;
ТабДок. Вид = ВидПоляФормы. ПолеТабличногоДокумента;
ТабДок. ПутьКДанным = ИмяРеквизита;
ТабДок. ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы. Нет;
ЭтаФорма[ИмяРеквизита]. Очистить( ) ;
КонецЦикла ;
РеквизитыКУдалению = ПоместитьВоВременноеХранилище( кУдалению, УникальныйИдентификатор) ;
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчеты()
Схема = РеквизитФормыВЗначение( "Отчет" ) . ПолучитьМакет( МакетОтчета) ;
Для Каждого Вариант Из Схема. ВариантыНастроек Цикл
Отчет. КомпоновщикНастроек. ЗагрузитьНастройки( Вариант. Настройки) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета. Выполнить( Схема, Отчет. КомпоновщикНастроек. ПолучитьНастройки( ) ) ;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки. Инициализировать( Макет) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ЭтаФорма["ТабДок_" + Вариант. Имя]) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновки) ;
КонецЦикла ;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СоздатьПереченьОтчетов( ) ;
КонецПроцедуры
&НаКлиенте
Процедура МакетОтчетаПриИзменении(Элемент)
ОбработатьВыборМакета( ) ;
КонецПроцедуры
&НаКлиенте
Процедура Сформировать(Команда)
СформироватьОтчеты( ) ;
КонецПроцедуры
Смотрим, что получилось.
Выгрузка базы 1Cv8skd.rar
Источник
Категория:
Схема Компоновки Данных Как программно изменить текст, цвет, фон ячейки или области табличного документа? Ниже приведено несколько полезных шаблонов кода по работе с табличным документом:
Код 1C v 8.х
ПолеТабДок = ЭлементыФормы. тдПолеТабличногоДокумента;
ПолеТабДок. Область( "R1C2" ) . Текст = спрНоменклатура. Наименование;
ПолеТабДок. Область( "R2C2" ) . Текст = "Это Строка" ;
Код 1C v 8.х
Для а = 11 по ТабличныйДокумент. ВысотаТаблицы Цикл
текстЯчейка = ТабличныйДокумент. Область( "R" + а+ "C2" ) . Текст;
Если Строка( ТабличныйДокумент. Область( "R" + а+ "C2" ) . ЦветФона) = "стиль: Фон кнопки" Тогда
ТабличныйДокумент. Область( "R" + а+ "C7" ) . Текст= "" ;
ТабличныйДокумент. Область( "R" + а+ "C11" ) . Текст= "" ;
ТабличныйДокумент. Область( "R" + а+ "C8" ) . Текст= "" ;
ТабличныйДокумент. Область( "R" + а+ "C9" ) . Текст= "" ;
ТабличныйДокумент. Область( "R" + а+ "C10" ) . Текст= "" ;
КонецЕсли ;
КонецЦикла ;
Код 1C v 8.х
ТабДок = ЭлементыФормы. ПолеТабличногоДокумента;
ТабДок. Очистить( ) ;
Макет = ПолучитьМакет( "Макет" ) ;
ОбластьСтрокаТаб = Макет. ПолучитьОбласть( "СтрокаТаб" ) ;
ОбластьСтрокаТаб. Параметры. НашПараметр = 1 ;
ОбластьОформления = ТабДок. Вывести( ОбластьСтрокаТаб) ;
ТабДок. Область( ОбластьОформления. Верх, ОбластьОформления. Лево, ОбластьОформления. Низ, ОбластьОформления. Лево) . ЦветФона = WebЦвета. Красный;
Код 1C v 8.х //Пример изменения цвета текста при выводе данных в табличный документ
Таб.ВывестиСекцию("Контрагент");
// Изменим Текст ячейки, имя которой заранее задали как "ТекстОСостоянии"
Таб.Область("ТекстОСостоянии").Текст = "Хорошо ";
// В зависимости от условия изменим Цвет Текста
Если Раз<0 Тогда
Таб.Область(Таб.ВысотаТаблицы(),9,Таб.ВысотаТаблицы(),9).ЦветТекста(255,0,0);
ИначеЕсли Раз>0 Тогда
Таб.Область(Таб.ВысотаТаблицы(),9,Таб.ВысотаТаблицы(),9).ЦветТекста(0,0,255);
КонецЕсли;
Для того, чтобы появилась возможность использовать свойство "Значение", необходимо явно присвоить свойству ячейки "СодержитЗначение" значение Истина или установить флажок "Содержит значение" в палитре свойств.
Для ячейки, у которой установлен признак "СодержитЗначение", можно задать тип значения, размещаемого в ячейке.
Следующий фрагмент демонстрирует, как можно управлять этими свойствами из встроенного языка://задаем нужный тип с помощью объекта "ОписаниеТипов"
Код 1C v 8.х МассивБулево = Новый Массив;
МассивБулево. Добавить( Тип( "Булево" ) ) ;
ОписаниеТиповБулево = Новый ОписаниеТипов( МассивБулево) ;
ПолеТабДок = ЭлементыФормы. тдПолеТабличногоДокумента;
ПолеТабДок. Область( "R3C3" ) . СодержитЗначение = Истина ;
ПолеТабДок. Область( "R3C3" ) . ТипЗначения = ОписаниеТиповБулево;
ПолеТабДок. Область( "R3C3" ) . Значение = СпрНоменклатура. Услуга;
Для ячейки табличного документа можно задавать формат вывода данных. Для этого используется свойство "Формат", которое содержит форматную строку. Приемы работы с форматной строкой полностью совпадают с функцией Формат()
Код 1C v 8.х ПолеТабДок = ЭлементыФормы. тдПолеТабличногоДокумента;
ПолеТабДок. Область( "R4C3" ) . ТипЗначения = ОписаниеТиповДата;
ПолеТабДок. Область( "R4C3" ) . Значение = ТекущаяДата( ) ;
ПолеТабДок. Область( "R4C3" ) . Формат = "ДФ=[ггММдд-ЧЧмм]-" ;
Элемент управления в табличном документе
Для ячейки, у которой установлен признак "СодержитЗначение", можно также задать элемент управления, который будет использоваться для редактирования этого значения.
Элемент управления можно назначить через палитру свойств или из встроенного языка с помощью метода "УстановитьЭлементУправления()". Чтобы проверить в программе, установлен ли элемент управления для конкретной ячейки, можно использовать свойство "ЭлементУправления", которое возвращает элемент управления, назначенный для ячейки.
Элементы управления, встроенные в ячейку, отображаются только при входе в режим редактирования значения. На приведенном ниже рисунке редактируемая ячейка обведена овалом и в ней отображается флажок:
Ниже показан пример установки элемента управления типа "Флажок" из встроенного языка://задаем нужный тип с помощью объекта "ОписаниеТипов"
Код 1C v 8.х МассивБулево = Новый Массив;
МассивБулево. Добавить( Тип( "Булево" ) ) ;
ОписаниеТиповБулево = Новый ОписаниеТипов( МассивБулево) ;
. . .
ПолеТабДок = ЭлементыФормы. тдПолеТабличногоДокумента;
ПолеТабДок. Область( "R5C3" ) . СодержитЗначение = Истина ;
ПолеТабДок. Область( "R5C3" ) . ТипЗначения = ОписаниеТиповБулево;
ПолеТабДок. Область( "R5C3" ) . Значение = СпрНоменклатура. Услуга;
ПолеТабДок. Область( "R5C3" ) . УстановитьЭлементУправления( Тип( "Флажок" ) ) ;
Для элементов управления, расположенных в табличном документе, расширяется набор свойств, методов и событий:
Разберем самые важные свойства и методы:
Свойство "ВстроенВЯчейку" имеет тип "булево" и говорит о том, что элемент управления встраивается в ячейку или просто привязывается к ней, о чем было рассказано выше.
Свойство "Видимость" позволяет показать или скрыть элемент управления.
Свойство "Значение" предоставляет доступ к значению, которое редактируется в элементе управления. Оно используется только для элементов управления, поддерживающих связь с данными.
Метод "Расположить" позволяет разместить элемент управления в конкретной области ячеек табличного документа. Именно этот метод был использован в вышеприведенном примере.
Код 1C v 8.х ПолеТабДок = ЭлементыФормы. тдПолеТабличногоДокумента;
ПолеТабДок. Область( "R4C3" ) . Защита = Истина ;
Категория:
Табличный документ Как мы писали парсер сайта с ценами для 1С Недавно, мой постоянный клиент решил проводить маркетинговые исследования по изменению цен на товары у конкурентов... и эти данные захотел использовать в 1С в связке с его прайс-листом + куча отчетов с графиками и процентным отклонением от цен основного конкурента
В результате этого, была написана обработка собирающая данные со страниц разных сайтов. Из целей конфиденциальности - сайты раскрывать не буду...
Вид обработки загрузки данных с сайта в 1С
Ниже код загрузки данных со страницы сайта , смысл такой :
в функция передается адрес страницы сайта полученный текст страницы обрабатывается, удаляются теги из полученного текста формируется ТЗ с данными По названию ищется поставщик из вспомогательного справочника Справочники.Pr_Поставщики.НайтиПоНаименованию(, если нет - создается на выходе ТЗ с данными Код 1C v 8.х Функция ПолучитьТаблицуДанных(Строка)
тзДанных = Новый ТаблицаЗначений;
Сервер = "site.ru" ;
Соединение = Новый HTTPСоединение( Сервер) ;
Заголовки = Новый Соответствие;
Заголовки. Вставить( "host" , Сервер) ;
ТекАдрес = СтрЗаменить( Строка. Наименование. УРЛСтраницы, "http://" , "" ) ;
ТекАдрес = СтрЗаменить( ТекАдрес, Сервер, "" ) ;
Запрос = Новый HTTPЗапрос( ТекАдрес, Заголовки) ;
Ответ = Соединение. Получить( Запрос) ;
Если Ответ. КодСостояния = 200 Тогда
Содержимое= Ответ. ПолучитьТелоКакСтроку( ) ;
НачалоБлока = "<table id=" + """ " + "table-price" + """ " + " cellspacing=" + """ " + "0" + """ " + " border=" + """ " + "1" + """ " + " bordercolor=" + """ " + "#dedede" + """ " + " class=" + """ " + "tablesorter" + """ " + " >" ;
КонецБлока = "</table>" ;
ТекстБлока = Сред( Содержимое, Найти( Содержимое, НачалоБлока) + СтрДлина( НачалоБлока) , Найти( Содержимое, КонецБлока) - Найти( Содержимое, НачалоБлока) - СтрДлина( НачалоБлока) ) ;
обрТекст = СтрЗаменить( ТекстБлока, "<tr>" , "" ) ;
обрТекст = СтрЗаменить( обрТекст, "</tr>" , Символы. ПС) ;
обрТекст = СтрЗаменить( обрТекст, " >" , ">" ) ;
обрТекст = СтрЗаменить( обрТекст, "</th> <th>" , " | " ) ;
обрТекст = СтрЗаменить( обрТекст, "</td> <td>" , " | " ) ;
обрТекст = СтрЗаменить( обрТекст, "</th> <th class=" + """ " + "sortable_header" + """ " + ">" , " | " ) ;
обрТекст = СтрЗаменить( обрТекст, "</th> <th >" , " | " ) ;
обрТекст = СтрЗаменить( обрТекст, "</th><th>" , " | " ) ;
обрТекст = СтрЗаменить( обрТекст, "</td><td>" , " | " ) ;
обрТекст = СтрЗаменить( обрТекст, " >" , ">" ) ;
RegExp = Новый COMОбъект( "VBScript.RegExp" ) ;
RegExp. IgnoreCase = Ложь ;
RegExp. Global = Истина ;
RegExp. MultiLine = Истина ;
RegExp. Pattern = "<[^>]*>" ;
обрТекст= RegExp. Replace( обрТекст, "" ) ;
Если СокрЛП( обрТекст) = "Ни одной позиции не найдено." Тогда
Сообщить( Строка( Строка. Наименование) + " = Ни одной позиции не найдено! Строка " + Строка. Наименование) ;
Возврат тзДанных;
КонецЕсли ;
Если Найти( обрТекст, "Страница не найдена" ) > 0 Тогда
Сообщить( Строка( ТекАдрес) + " = Страница не найдена, строка " + Строка. Наименование) ;
Возврат тзДанных;
КонецЕсли ;
Для н= 1 По СтрЧислоСтрок( обрТекст) Цикл
СтрТекста= СтрПолучитьСтроку( обрТекст, н) ;
Если Найти( СтрТекста, "Длина Цена" ) > 0 Тогда
СтрТекста = СтрЗаменить( СтрТекста, "Длина Цена" , "Длина | Цена" ) ;
КонецЕсли ;
Если Найти( СтрТекста, "Марка стали Цена" ) > 0 Тогда
СтрТекста = СтрЗаменить( СтрТекста, "Марка стали Цена" , "Марка стали | Цена" ) ;
КонецЕсли ;
Если Найти( СтрТекста, ", Поставщик" ) > 0 Тогда
СтрТекста = СтрЗаменить( СтрТекста, ", Поставщик" , " | Поставщик" ) ;
КонецЕсли ;
мсДанных = ПолучитьМассивИзСтрокиСРазделителем( СтрТекста, "|" , Истина ) ;
Если н= 1 Тогда
Для Каждого ткЗнач из мсДанных Цикл
СтрЗапрещСимволов = " .,<>"" \/-" ;
ИмяКолонки = ткЗнач;
Для сч33 = 1 по СтрДлина( СтрЗапрещСимволов) Цикл
ЗапрещСимв = Сред( СтрЗапрещСимволов, сч33 , 1 ) ;
ИмяКолонки = СтрЗаменить( ИмяКолонки, ЗапрещСимв, "_" ) ;
КонецЦикла ;
Если НРег( ИмяКолонки) = "поставщик" Тогда
Для Сч_дк = ( Строка. Наименование. Родитель. Поставшик - 2 ) по тзДанных. Колонки. Количество( ) Цикл
тзДанных. Колонки. Добавить( "Колонка_" + ( тзДанных. Колонки. Количество( ) + 1 ) ) ;
КонецЦикла ;
КонецЕсли ;
тзДанных. Колонки. Добавить( ИмяКолонки) ;
КонецЦикла ;
тзДанных. Колонки. Добавить( "ном" , , , 7 ) ;
Иначе
НовСтр = тзДанных. Добавить( ) ; нмас= 0 ;
Для Каждого ткЗнач из мсДанных Цикл
НовСтр[нмас] = ткЗнач;
нмас= нмас+ 1 ;
КонецЦикла ;
НовСтр. ном = н;
КонецЕсли ;
КонецЦикла ;
тзДанных. Колонки. Добавить( "ЕстьСоответствие" , Новый ОписаниеТипов( "Булево" ) ) ;
тзДанных. Колонки. Добавить( "СпрPr_Поставщики" , Новый ОписаниеТипов( "СправочникСсылка.Pr_Поставщики" ) ) ;
Для каждого стр из тзДанных Цикл
текПоставщик = Справочники. Pr_Поставщики. НайтиПоНаименованию( стр[Строка. Наименование. родитель. Поставшик- 1 ]) ;
Если текПоставщик = Справочники. Pr_Поставщики. ПустаяСсылка( ) Тогда
НовЭлем = Справочники. Pr_Поставщики. СоздатьЭлемент( ) ;
НовЭлем. Наименование = СокрЛП( стр[Строка. Наименование. родитель. Поставшик- 1 ]) ;
НовЭлем. Записать( ) ;
текПоставщик = НовЭлем. Ссылка;
КонецЕсли ;
стр. СпрPr_Поставщики = текПоставщик;
КонецЦикла ;
Иначе
тзДанных. Колонки. Добавить( "ЕстьСоответствие" , Новый ОписаниеТипов( "Булево" ) ) ;
тзДанных. Колонки. Добавить( "СпрPr_Поставщики" , Новый ОписаниеТипов( "СправочникСсылка.Pr_Поставщики" ) ) ;
Сообщить( "Ошибка получения данных для строки " + Строка. Наименование) ;
КонецЕсли ;
Возврат тзДанных;
КонецФункции
В коде используется вспомогательная функция ПолучитьМассивИзСтрокиСРазделителем
Код 1C v 8.2 УП
Функция ПолучитьМассивИзСтрокиСРазделителем(Знач Стр, Разделитель = "." , ОбрезатьНепечатныеСимволы = Ложь) Экспорт
МассивСтрок = Новый Массив;
Если Разделитель = " " Тогда
Стр = СокрЛП( Стр) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
МассивСтрок. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = СокрЛ( Сред( Стр, Поз) ) ;
КонецЦикла ;
Иначе
ДлинаРазделителя = СтрДлина( Разделитель) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
Фрагмент = Стр;
Если ОбрезатьНепечатныеСимволы Тогда
Фрагмент = СокрЛП( Фрагмент) ;
КонецЕсли ;
МассивСтрок. Добавить( Фрагмент) ;
Возврат МассивСтрок;
КонецЕсли ;
Фрагмент = Лев( Стр, Поз- 1 ) ;
Если ОбрезатьНепечатныеСимволы Тогда
Фрагмент = СокрЛП( Фрагмент) ;
КонецЕсли ;
МассивСтрок. Добавить( Фрагмент) ;
Стр = Сред( Стр, Поз+ ДлинаРазделителя) ;
КонецЦикла ;
КонецЕсли ;
Возврат МассивСтрок;
КонецФункции
Конечно, перед тем как мы начали это делать - прошерстили интернет и нашли несколько решений , вот они:
Код 1C v 8.х Соединение = ПолучитьCOMОбъект( "" , "Microsoft.XMLHTTP" ) ;
ИмяВременногоФайла= ПолучитьИмяВременногоФайла( "htm" ) ;
Соединение. open( "GET" , "http://mamba.ru/my" , 0 ) ;
Соединение. send( ) ;
ТаймАут = 200 ;
Начало= ТекущаяДата( ) ;
Пока Соединение. readyState < > 4 И ( ТаймАут= 0 ИЛИ ТекущаяДата( ) - Начало< ТаймАут) Цикл
бфДиалоги. ксОбработкаПрерыванияПользователя( ) ;
КонецЦикла ;
обСохранитьДвоичныйБуферВФайл( Соединение. responseBody, ИмяВременногоФайла) ;
Соединение. open( "POST" , "http://mamba.ru/my" ) ;
Соединение. send( "login=xxx&password=&&&" ) ;
Функция обСохранитьДвоичныйБуферВФайл(Буфер, ИмяФайла) Экспорт
Поток = Новый COMОбъект( "ADODB.Stream" ) ;
Поток. Type = 1 ;
Поток. Mode = 3 ;
Поток. Open( ) ;
Поток. Write( Буфер) ;
Поток. SaveToFile( ИмяФайла) ;
Поток. Close( ) ;
КонецФункции
Код 1C v 8.х НТТР = ПолучитьCOMОбъект( "" , "Microsoft.XMLHTTP" ) ;
ИмяФайлаОтвета = КаталогВременныхФайлов( ) + "filename.tmp" ;
НТТР. open( "GET" , "www.google.com" , 0 , , ) ;
НТТР. send( ) ;
StreamTypeEnum = Новый Структура( "adTypeBinary, adTypeText" , 1 , 2 ) ;
ConnectModeEnum = Новый Структура(
"adModeRead, adModeReadWrite, adModeRecursive, adModeShareDenyNone,
|adModeShareDenyRead, adModeShareDenyWrite, adModeShareExclusive,
|adModeUnknown, adModeWrite" , 1 , 3 , 4194304 , 16 , 4 , 8 , 12 , 0 , 2 ) ;
SaveOptionsEnum = Новый Структура( "adSaveCreateNotExist, adSaveCreateOverWrite" , 1 , 2 ) ;
StreamOut = Новый COMОбъект( "ADODB.Stream" ) ;
StreamOut. Type = StreamTypeEnum. adTypeBinary;
StreamOut. Mode = ConnectModeEnum. adModeReadWrite;
StreamOut. Open( ) ;
StreamOut. Write( НТТР. responseBody) ;
StreamOut. SaveToFile( ИмяФайлаОтвета, SaveOptionsEnum. adSaveCreateOverWrite) ;
StreamOut. Close( ) ;
И даже не этом сайте есть статья : Парсер сайта связного на 1С
Нужен парсер сайта в 1С!? - Обращайтесь, контакты в
профиле Категория:
Работа с Интернет, Почтой (Mail), FTP Дерево значений в таблицу значений или в табличную часть и обратно Для одной организации надо было реализовать документы, где вместо табличной части надо использовать дерево и все это на управляемых формах. Но дерево нельзя сохранить в базе в текущем виде. Пришлось использовать табличную часть документа для хранения данных дерева. И при открытии формы получать данные из ТЧ и выводить их в дерево. Далее все манипуляции производить с деревом и при сохранении документа помещать данные в обратно в ТЧ.
Поиск по интернету не дал нужного варианта, пришлось реализовавыть свой механизм, используя информацию которая была на просторах интернета.
Для реализации такого механизма в ТЧ был добавлен реквизит “КлючСвязи” (обязательный реквизит) с типом число, куда помещался “НомерСтроки” (стандартный реквизит ТЧ) родителя (верхний уровень). А самый верхний элемент дерева имеет “КлючСвязи” равный 0.
На картинке ниже видно структуру дерева и структуру ТЧ
Нагрузка на сервер осуществляется при окрытии и при сохранении документа. А с деревом работают уже на клиенте.
На рабочей базе обрабатывается около 200 строк в одном документе.
Открытие и сохранение документа происходит моментально. С большем количеством строк не тестировалось.
Чтобы алгорит правильно работал, у рекизита фомы с типом дерево значений должны быть все реквизиты табличной части, кроме “КлючСвязи” и “НомерСтроки”. Иначе платформа выдаст ошибку. В дерево можо добавлять свои реквизиты отличные от ТЧ, они будут использоваться только в дереве.
Ниже приведен код преобразования дерева в таблицу и обратно .
Код 1C v 8.2 УП &НаКлиенте
Процедура КомандаТаблицуВДерево(Команда)
КомандаТаблицуВДеревоНаСервере( ) ;
КонецПроцедуры
&НаСервере
Процедура КомандаТаблицуВДеревоНаСервере()
Дерево = ТаблицаВДерево( РеквизитФормыВЗначение( "Объект" ) , "Товары" ) ;
ЗначениеВРеквизитФормы( Дерево, "ДеревоЗначений" ) ;
Элементы. ДеревоЗначений. Обновить( ) ;
КонецПроцедуры
&НаКлиенте
Процедура КомандаДеревоВТаблицу(Команда)
КомандаДеревоВТаблицуНаСервере( ) ;
КонецПроцедуры
&НаСервере
Процедура КомандаДеревоВТаблицуНаСервере()
Объект. Товары. Очистить( ) ;
ДОбъект = РеквизитФормыВЗначение( "Объект" ) ;
ДеревоВТаблицу( ДОбъект, РеквизитФормыВЗначение( "ДеревоЗначений" ) , "Товары" ) ;
ЗначениеВРеквизитФормы( ДОбъект, "Объект" ) ;
КонецПроцедуры
Формирование дерева из таблицы значений
Код 1C v 8.2 УП
&НаСервере
Функция ТаблицаВДерево(ДокОбъект, НаименованиеТабличнойЧастиДокумента, КлючСвязи = NULL, ЭлементРодитель = NULL) Экспорт
КолонкиТаблицы = ДокОбъект. Метаданные( ) . ТабличныеЧасти[НаименованиеТабличнойЧастиДокумента]. Реквизиты;
ДеревоЗначений2 = Новый ДеревоЗначений;
Для каждого Кол из КолонкиТаблицы Цикл
Если Кол. Имя = "НомерСтроки" ИЛИ Кол. Имя = "КлючСвязи" Тогда
Продолжить;
Иначе
ДеревоЗначений2 . Колонки. Добавить( Кол. Имя, Новый ОписаниеТипов( Кол. Тип) ) ;
КонецЕсли ;
КонецЦикла ;
Если КлючСвязи = NULL И ЭлементРодитель = NULL Тогда
ИсточникВыборки = ДеревоЗначений2 . Строки;
КлючСвязи = 0 ;
Иначе
ИсточникВыборки = ЭлементРодитель. Строки;
КонецЕсли ;
Фильтр = Новый Структура( "КлючСвязи" , КлючСвязи) ;
М = ДокОбъект[НаименованиеТабличнойЧастиДокумента]. НайтиСтроки( Фильтр) ;
Если М. Количество( ) = 0 Тогда
Возврат ДеревоЗначений2 ;
КонецЕсли ;
Для каждого Стр из М Цикл
Элемент = ИсточникВыборки. Добавить( ) ;
Для каждого Кол из КолонкиТаблицы Цикл
Если Кол. Имя = "НомерСтроки" ИЛИ Кол. Имя = "КлючСвязи" Тогда
Продолжить;
Иначе
Элемент[Кол. Имя] = Стр[Кол. Имя];
КонецЕсли ;
КонецЦикла ;
ТаблицаВДерево( ДокОбъект, НаименованиеТабличнойЧастиДокумента, Стр. НомерСтроки, Элемент) ;
КонецЦикла ;
Возврат ДеревоЗначений2 ;
КонецФункции
Формирование таблицы из дерева
Код 1C v 8.2 УП
&НаСервере
Процедура ДеревоВТаблицу(ДокОбъект, ДеревоЗначений, НаименованиеТабличнойЧастиДокумента, СтрокаДерева = NULL, КлючСвязи = NULL) Экспорт
Если СтрокаДерева = NULL И КлючСвязи = NULL Тогда
ПервыйВызов = Истина ;
ДокОбъект[НаименованиеТабличнойЧастиДокумента]. Очистить( ) ;
ИсточникВыборки = ДеревоЗначений. Строки;
КлючСвязи = 0 ;
Иначе
ПервыйВызов = Ложь ;
ИсточникВыборки = СтрокаДерева. Строки;
КонецЕсли ;
Для каждого Стр из ИсточникВыборки Цикл
НС = ДокОбъект[НаименованиеТабличнойЧастиДокумента]. Добавить( ) ;
Для каждого Кол из ДокОбъект. Метаданные( ) . ТабличныеЧасти[НаименованиеТабличнойЧастиДокумента]. Реквизиты Цикл
Если Кол. Имя = "КлючСвязи" Тогда
НС. КлючСвязи = КлючСвязи
ИначеЕсли Кол. Имя = "НомерСтроки" Тогда
Продолжить;
Иначе
НС[Кол. Имя] = Стр[Кол. Имя];
КонецЕсли ;
КонецЦикла ;
Если НЕ Стр. Строки. Количество( ) = 0 Тогда
ДеревоВТаблицу( ДокОбъект, , НаименованиеТабличнойЧастиДокумента, Стр, НС. НомерСтроки) ;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Категория:
Работа с Деревом Значений Программное создание динамического списка для регистра сведений Код 1C v 8.х &НаСервере
Процедура ИзменитьНаСервере(ИмяРеквизита)
Если Элементы. Найти( ИмяРеквизита) = Неопределено Тогда
МассивРеквизитов = Новый Массив;
МассивРеквизитов. Добавить( Новый РеквизитФормы( ИмяРеквизита, Новый ОписаниеТипов( "ДинамическийСписок" ) , , "Поле таблицы" ) ) ;
ЭтаФорма. ИзменитьРеквизиты( МассивРеквизитов) ;
ЭтаФорма[ИмяРеквизита]. ОсновнаяТаблица = "РегистрСведений." + ИмяРеквизита;
Элемент = Элементы. Добавить( ИмяРеквизита, Тип( "ТаблицаФормы" ) , ЭтаФорма) ;
Элемент. ПутьКДанным = ИмяРеквизита;
Элемент. Видимость = Истина ;
КолонкаКод = Элементы. Добавить( "Код" + ИмяРеквизита, Тип( "ПолеФормы" ) , Элементы[ИмяРеквизита]) ;
КолонкаКод. Вид = ВидПоляФормы. ПолеВвода;
КолонкаКод. ПутьКДанным = ИмяРеквизита + ".Код" ;
КолонкаНаименование = Элементы. Добавить( "Наименование" + ИмяРеквизита, Тип( "ПолеФормы" ) , Элементы[ИмяРеквизита]) ;
КолонкаНаименование. Вид = ВидПоляФормы. ПолеВвода;
КолонкаНаименование. ПутьКДанным = ИмяРеквизита + ".Наименование" ;
КонецЕсли ;
Если ТекущийСписок < > ИмяРеквизита Тогда
Если НЕ ПустаяСтрока( ТекущийСписок) Тогда
Элементы[ТекущийСписок]. Видимость = Ложь ;
конецЕсли ;
Элементы[ИмяРеквизита]. Видимость = Истина ;
ТекущийСписок = ИмяРеквизита;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура АдресныеСокращения(Команда)
ИзменитьНаСервере( "АдресныеСокращения" ) ;
КонецПроцедуры
&НаКлиенте
Процедура АдресныйКлассификатор(Команда)
ИзменитьНаСервере( "АдресныйКлассификатор" ) ;
КонецПроцедуры
Пример
Категория:
1С Бухгалтерия 2.0 Форма ~ Добавление элементов на форму [Команда, Кнопка, ТаблицаЗначений] Код 1C v 8.2 УП &НаСервере
Процедура ДобавитьНаСервере()
ДобавляемыеРеквизиты = Новый Массив;
Реквизит1 = Новый РеквизитФормы( "Таб" , Новый ОписаниеТипов( "ТаблицаЗначений" ) , , "Таблица" , Истина ) ;
ДобавляемыеРеквизиты. Добавить( Реквизит1 ) ;
ИзменитьРеквизиты( ДобавляемыеРеквизиты) ;
ДобавляемыеРеквизиты = Новый Массив;
Реквизит2 = Новый РеквизитФормы( "Кол" , Новый ОписаниеТипов( "Строка" ) , "Таб" , "Колонка" , Истина ) ;
ДобавляемыеРеквизиты. Добавить( Реквизит2 ) ;
ИзменитьРеквизиты( ДобавляемыеРеквизиты) ;
ТаблицаФормы = ЭтаФорма. Элементы. Добавить( "Таблица" , Тип( "ТаблицаФормы" ) , ЭтаФорма) ;
ТаблицаФормы. ПутьКДанным = "Таб" ;
Колонка = ЭтаФорма. Элементы. Добавить( "Колонка" , Тип( "ПолеФормы" ) , ТаблицаФормы) ;
Колонка. ПутьКДанным = "Таб.Кол" ;
КонецПроцедуры
еще
Код 1C v 8.2 УП
Кмд = ЭтаФорма. Команды. Добавить( "Выгрузить" ) ;
Кмд. Действие = "Выгрузить" ;
Кмд. Заголовок = "Выгрузить в файл" ;
КмдЗ = ЭтаФорма. Команды. Добавить( "Загрузить" ) ;
КмдЗ. Действие = "Загрузить" ;
КмдЗ. Заголовок = "Загрузить из файла" ;
КмдЗ = ЭтаФорма. Команды. Добавить( "ЗаписатьВДокумент" ) ;
КмдЗ. Действие = "ЗаписатьВДокумент" ;
КмдЗ. Заголовок = "Записать в документ" ;
Горизонт = ЭтаФорма. Элементы. Добавить( "Горизонт" , Тип( "ГруппаФормы" ) , ЭтаФорма) ;
Горизонт. Вид = ВидГруппыФормы. ОбычнаяГруппа;
Элемент2 = ЭтаФорма. Элементы. Добавить( "Выгрузить" , Тип( "КнопкаФормы" ) , Горизонт) ;
Элемент2 . Вид = ВидКнопкиФормы. ОбычнаяКнопка;
Элемент2 . ИмяКоманды = "Выгрузить" ;
Элемент = ЭтаФорма. Элементы. Добавить( "Загрузить" , Тип( "КнопкаФормы" ) , ЭтаФорма) ;
Элемент. Вид = ВидКнопкиФормы. ОбычнаяКнопка;
Элемент. ИмяКоманды = "Загрузить" ;
Элемент = ЭтаФорма. Элементы. Добавить( "ЗаписатьВДокумент" , Тип( "КнопкаФормы" ) , ЭтаФорма) ;
Элемент. Вид = ВидКнопкиФормы. ОбычнаяКнопка;
Элемент. ИмяКоманды = "ЗаписатьВДокумент" ;
ТаблицаФормы = Элементы. Добавить( "ф__ТЗ" , Тип( "ТаблицаФормы" ) ) ;
ТаблицаФормы. ПутьКДанным = "ТЗ" ;
Категория:
Работа с Формой (Диалог) и её элементами Обход метаданных (полезные функции) При написании небольших автоматизированных тестов часто надо обойти всю конфигурацию и проверить, например, для всех форм какое-нибудь свойство. Это всё легко делается через свойство глобального контекста "Метаданные", но чтоб дорбаться до обхода реквизитов надо написать кучу вложенных циклов. При этом код становится слабочитаемым и слабомодифицируемым.
Ниже приведен небольшой модуль, который решает задачу легко и удобно. Создана специальная функция РазвернутьСтрокуОбходаМетаданных, которая может по строке типа "Метаданные.Справочники.*.Реквизиты.*" построить массив строк с перечислением всех реквизитов всех справочников. При помощи этой и нескольких других функций в экспортных функциях модуля реализованы вполне прикладные задачи - получение всех реквизитов, всех макетов, всех форм конфигурации и построение таблицы всех составных типов.
Код 1C v 8.х
Функция РазвернутьСтрокуОбходаМетаданных(СтрокаОбхода, ЗаменяемоеЗначение = "*" , ПредставлениеПоУмолчанию = "" )
Рез = Новый Массив;
ЧастиСтрокиОбхода = РазобратьСтрокуОбхода( СтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию) ;
Если ЧастиСтрокиОбхода = Неопределено тогда
Рез. Добавить( СтрокаОбхода) ;
Иначе
ОбъектКоллекции = Вычислить( ЧастиСтрокиОбхода. СтрокаКоллекции) ;
РазвернутаяКоллекция = РазвернутьКоллекциюВПредставления( ОбъектКоллекции, ЧастиСтрокиОбхода. СтрокаПредставление) ;
Для каждого ЭлементРазвернутойКоллекции Из РазвернутаяКоллекция Цикл
ТекущаяСтрокаОбхода = ЧастиСтрокиОбхода. СтрокаНачало + ЭлементРазвернутойКоллекции + ЧастиСтрокиОбхода. СтрокаКонец;
МассивЭлемента = РазвернутьСтрокуОбходаМетаданных( ТекущаяСтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию) ;
Для каждого ПримитивныйЭлементОбхода Из МассивЭлемента Цикл
Рез. Добавить( ПримитивныйЭлементОбхода) ;
КонецЦикла ;
КонецЦикла ;
КонецЕсли ;
Возврат Рез;
КонецФункции
Функция РазобратьСтрокуОбхода(СтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию)
Если ПустаяСтрока( ЗаменяемоеЗначение) Тогда
ВызватьИсключение "Некорректное выражение заменяемого значения" ;
КонецЕсли ;
ПозицияЗамены = Найти( СтрокаОбхода, ЗаменяемоеЗначение) ;
Если ПозицияЗамены = 0 Тогда
Возврат Неопределено ;
КонецЕсли ;
СтрокаНачало = Лев( СтрокаОбхода, ПозицияЗамены - 1 ) ;
СтрокаКоллекции = СтрокаНачало;
Если Прав( СтрокаКоллекции, 1 ) = "." Тогда
СтрокаКоллекции = Лев( СтрокаКоллекции, СтрДлина( СтрокаКоллекции) - 1 ) ;
КонецЕсли ;
ПозицияОкончанияЗамены = ПозицияЗамены + СтрДлина( ЗаменяемоеЗначение) ;
ОстатокВыражения = Сред( СтрокаОбхода, ПозицияОкончанияЗамены) ;
ОткрывающаяСкобка = "[" ;
ЗакрывающаяСкобка = "]" ;
Если Найти( ОстатокВыражения, ОткрывающаяСкобка) = 1 Тогда
ОстатокВыражения = Сред( ОстатокВыражения, СтрДлина( ОткрывающаяСкобка) + 1 ) ;
ПозицияЗакрывающейСкобки = Найти( ОстатокВыражения, ЗакрывающаяСкобка) ;
Если ПозицияЗакрывающейСкобки = 0 Тогда
ВызватьИсключение "Синтаксическая ошибка разбора выражения" ;
КонецЕсли ;
СтрокаПредставление = Лев( ОстатокВыражения, ПозицияЗакрывающейСкобки - 1 ) ;
ОстатокВыражения = Сред( ОстатокВыражения, ПозицияЗакрывающейСкобки + СтрДлина( ЗакрывающаяСкобка) ) ;
Иначе
СтрокаПредставление = ПредставлениеПоУмолчанию;
КонецЕсли ;
СтрокаКонец = ОстатокВыражения;
Рез = Новый Структура( "ПозицияЗамены, СтрокаНачало, СтрокаКоллекции, СтрокаПредставление, СтрокаКонец" ,
ПозицияЗамены, СтрокаНачало, СтрокаКоллекции, СтрокаПредставление, СтрокаКонец) ;
Возврат Рез;
КонецФункции
Функция РазвернутьКоллекциюВПредставления(Коллекция, Знач ПредставлениеЭлемента = "" )
Если не ПустаяСтрока( ПредставлениеЭлемента) Тогда
Если Найти( ПредставлениеЭлемента, ";" ) > 0 Тогда
ВызватьИсключение "Некорректное выражение представления" ;
КонецЕсли ;
ПредставлениеЭлемента = "." + ПредставлениеЭлемента;
КонецЕсли ;
Рез = Новый Массив;
Для каждого ЭлементКоллекции Из Коллекция Цикл
ТекПредставление = Строка( Вычислить( "ЭлементКоллекции" + ПредставлениеЭлемента) ) ;
Рез. Добавить( ТекПредставление) ;
КонецЦикла ;
Возврат Рез;
КонецФункции
Функция РазвернутьМассивСтрокОбходаМетаданных(МассивСтрокОбхода, ЗаменяемоеЗначение = "*" , ПредставлениеПоУмолчанию = "Имя" )
Рез = Новый Массив;
Для каждого СтрокаОбхода Из МассивСтрокОбхода Цикл
ДополнениеРезультата = РазвернутьСтрокуОбходаМетаданных( СтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию) ;
Для каждого ТекСтрока Из ДополнениеРезультата Цикл
Рез. Добавить( ТекСтрока) ;
КонецЦикла ;
КонецЦикла ;
Возврат Рез;
КонецФункции
Функция ПолучитьМассивСтрокМногострочнойСтроки(ПреобразуемаяСтрока, ИгнорироватьПустые = Истина, СокращатьПробелы = Истина)
Рез = Новый Массив;
ЧислоСтрок = СтрЧислоСтрок( ПреобразуемаяСтрока) ;
Для Сч = 1 По ЧислоСтрок Цикл
ТекСтрока = СтрПолучитьСтроку( ПреобразуемаяСтрока, Сч) ;
Если ИгнорироватьПустые и ПустаяСтрока( ТекСтрока) Тогда
Продолжить;
КонецЕсли ;
Если СокращатьПробелы Тогда
ТекСтрока = СокрЛП( ТекСтрока) ;
КонецЕсли ;
Рез. Добавить( ТекСтрока) ;
КонецЦикла ;
Возврат Рез;
КонецФункции
Функция ПолучитьВсеХранимыеРеквизитыКонфигурации() Экспорт
СтрокаВсехРеквизитов =
"
|Метаданные.Константы.*
|Метаданные.ПланыОбмена.*.Реквизиты.*
|Метаданные.ПланыОбмена.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Справочники.*.Реквизиты.*
|Метаданные.Справочники.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Документы.*.Реквизиты.*
|Метаданные.Документы.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Последовательности.*.Измерения.*
|Метаданные.ПланыВидовХарактеристик.*.Реквизиты.*
|Метаданные.ПланыВидовХарактеристик.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.ПланыСчетов.*.Реквизиты.*
|Метаданные.ПланыСчетов.*.ПризнакиУчета.*
|Метаданные.ПланыСчетов.*.ПризнакиУчетаСубконто.*
|Метаданные.ПланыСчетов.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.ПланыВидовРасчета.*.Реквизиты.*
|Метаданные.ПланыВидовРасчета.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.РегистрыСведений.*.Измерения.*
|Метаданные.РегистрыСведений.*.Ресурсы.*
|Метаданные.РегистрыСведений.*.Реквизиты.*
|Метаданные.РегистрыНакопления.*.Измерения.*
|Метаданные.РегистрыНакопления.*.Ресурсы.*
|Метаданные.РегистрыНакопления.*.Реквизиты.*
|Метаданные.РегистрыБухгалтерии.*.Измерения.*
|Метаданные.РегистрыБухгалтерии.*.Ресурсы.*
|Метаданные.РегистрыБухгалтерии.*.Реквизиты.*
|Метаданные.РегистрыРасчета.*.Измерения.*
|Метаданные.РегистрыРасчета.*.Ресурсы.*
|Метаданные.РегистрыРасчета.*.Реквизиты.*
|Метаданные.БизнесПроцессы.*.Реквизиты.*
|Метаданные.БизнесПроцессы.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Задачи.*.Реквизиты.*
|Метаданные.Задачи.*.РеквизитыАдресации.*
|Метаданные.Задачи.*.ТабличныеЧасти.*.Реквизиты.*
|" ;
ВсеХранимыеРеквизитыКонфигурации = РазвернутьМассивСтрокОбходаМетаданных( ПолучитьМассивСтрокМногострочнойСтроки( СтрокаВсехРеквизитов) ) ;
Возврат ВсеХранимыеРеквизитыКонфигурации;
КонецФункции
Функция ПолучитьВсеХранимыеРеквизитыКонфигурацииСоставногоТипа() Экспорт
ВсеХранимыеРеквизитыКонфигурации = ПолучитьВсеХранимыеРеквизитыКонфигурации( ) ;
Рез = Новый ТаблицаЗначений;
Рез. Колонки. Добавить( "Имя" , Новый ОписаниеТипов( "Строка" ) ) ;
Рез. Колонки. Добавить( "Тип" , Новый ОписаниеТипов( "ОписаниеТипов" ) ) ;
Рез. Колонки. Добавить( "КоличествоПростыхТипов" , Новый ОписаниеТипов( "Число" ) ) ;
Для каждого ТекРеквизит Из ВсеХранимыеРеквизитыКонфигурации Цикл
Реквизит = Вычислить( ТекРеквизит) ;
Тип = Реквизит. Тип;
КоличествоПростыхТипов = Тип. Типы( ) . Количество( ) ;
Если КоличествоПростыхТипов< > 1 Тогда
ТекСтрока = Рез. Добавить( ) ;
ТекСтрока. Имя = ТекРеквизит;
ТекСтрока. Тип = Тип;
ТекСтрока. КоличествоПростыхТипов = КоличествоПростыхТипов;
КонецЕсли ;
КонецЦикла ;
Возврат Рез;
КонецФункции
Функция ПолучитьВсеФормыКонфигурации() Экспорт
СтрокаВсехРеквизитов =
"
|Метаданные.ПланыОбмена.*.Формы.*
|Метаданные.КритерииОтбора.*.Формы.*
|Метаданные.ОбщиеФормы.*
|Метаданные.Справочники.*.Формы.*
|Метаданные.Документы.*.Формы.*
|Метаданные.ЖурналыДокументов.*.Формы.*
|Метаданные.Перечисления.*.Формы.*
|Метаданные.Отчеты.*.Формы.*
|Метаданные.Обработки.*.Формы.*
|Метаданные.ПланыВидовХарактеристик.*.Формы.*
|Метаданные.ПланыСчетов.*.Формы.*
|Метаданные.ПланыВидовРасчета.*.Формы.*
|Метаданные.РегистрыСведений.*.Формы.*
|Метаданные.РегистрыНакопления.*.Формы.*
|Метаданные.РегистрыБухгалтерии.*.Формы.*
|Метаданные.РегистрыРасчета.*.Формы.*
|Метаданные.БизнесПроцессы.*.Формы.*
|Метаданные.Задачи.*.Формы.*
|" ;
ВсеФормыКонфигурации = РазвернутьМассивСтрокОбходаМетаданных( ПолучитьМассивСтрокМногострочнойСтроки( СтрокаВсехРеквизитов) ) ;
Возврат ВсеФормыКонфигурации;
КонецФункции
Функция ПолучитьВсеМакетыКонфигурации() Экспорт
СтрокаВсехРеквизитов =
"
|Метаданные.ПланыОбмена.*.Макеты.*
|Метаданные.ОбщиеМакеты.*
|Метаданные.Справочники.*.Макеты.*
|Метаданные.Документы.*.Макеты.*
|Метаданные.ЖурналыДокументов.*.Макеты.*
|Метаданные.Перечисления.*.Макеты.*
|Метаданные.Отчеты.*.Макеты.*
|Метаданные.Обработки.*.Макеты.*
|Метаданные.ПланыВидовХарактеристик.*.Макеты.*
|Метаданные.ПланыСчетов.*.Макеты.*
|Метаданные.ПланыВидовРасчета.*.Макеты.*
|Метаданные.РегистрыСведений.*.Макеты.*
|Метаданные.РегистрыНакопления.*.Макеты.*
|Метаданные.РегистрыБухгалтерии.*.Макеты.*
|Метаданные.РегистрыРасчета.*.Макеты.*
|Метаданные.БизнесПроцессы.*.Макеты.*
|Метаданные.Задачи.*.Макеты.*
|" ;
ВсеМакетыКонфигурации = РазвернутьМассивСтрокОбходаМетаданных( ПолучитьМассивСтрокМногострочнойСтроки( СтрокаВсехРеквизитов) ) ;
Возврат ВсеМакетыКонфигурации;
КонецФункции
Категория:
Метаданные