Найдено результатов: 24
//вариант 1
&НаКлиенте
Процедура ВывестиНаПечать(Команда)
ТабДок = ВывестиНаПечатьНаСервере();
ТабДок.Показать();
КонецПроцедуры
&НаСервере
Функция ВывестиНаПечатьНаСервере()
ТЗ = РеквизитФормыВЗначение("Реквизит1");
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
ТабДок = Новый ТабличныйДокумент;
ПостроительОтчета.Вывести(ТабДок);
Возврат ТабДок
КонецФункции
//вариант 2
&НаКлиенте
Процедура ВывестиНаПечать2(Команда)
ТабДок = ВывестиНаПечатьНаСервере2();
ТабДок.Показать();
КонецПроцедуры
&НаСервере
Функция ВывестиНаПечатьНаСервере2()
ТЗ = РеквизитФормыВЗначение("Реквизит1");
ТабДок = Новый ТабличныйДокумент;
Сч = 1;
Для Каждого Колонка Из ТЗ.Колонки Цикл
ТабДок.Область(1, Сч).Текст = Колонка.Имя;
Сч = Сч + 1
КонецЦикла;
КоличествоКолонок = ТЗ.Колонки.Количество();
ТекущаяСтрока = 2;
Для Каждого Стр Из ТЗ Цикл
Для Сч = 1 По КоличествоКолонок Цикл
ТабДок.Область(ТекущаяСтрока, Сч).Текст = Стр[Сч - 1];
КонецЦикла;
ТекущаяСтрока = ТекущаяСтрока + 1;
КонецЦикла;
Возврат ТабДок
КонецФункции
ИстДанных = Новый ОписаниеИсточникаДанных(ТЗ);
ИстДанных.Колонки.Кол.Итог = "Максимум(Кол)" ;
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = ИстДанных;
Результат = ПостроительЗапроса.Результат; // тип РезультатЗапроса
ТЗРез = Результат.Выгрузить();
МаксКол = ТЗРез[0].Кол;
//Создаем таблицу значений
ТабЗнч = Новый ТаблицаЗначений;
ТабЗнч.Колонки.Добавить("Наименование");
ТабЗнч.Колонки.Добавить("Значение");
//Заполняем ТЗ
Для н=1 По 100 Цикл
СтрокаТЗ = ТабЗнч.Добавить();
СтрокаТЗ.Наименование = "Н"+н;
СтрокаТЗ.Значение = "К"+н;
//Здесь каждый 10-й элемент делаем дубляжом
Если (н%10)=0 Тогда
СтрокаТЗ2 = ТабЗнч.Добавить();
СтрокаТЗ2.Наименование = "Н"+н;
СтрокаТЗ2.Значение = "К"+н;
КонецЕсли;
КонецЦикла;
//Перебираем заполненное ТЗ
Для й=0 По ТабЗнч.Количество()-1 Цикл
//Не даем провалиться индексу за грани
Если й>ТабЗнч.Количество()-1 Тогда
Прервать;
КонецЕсли;
//Пропускаем первый элемент
Если й=0 Тогда
Продолжить;
КонецЕсли;
//Ну и собственно сравниваем значения текущего с предыдущем
Если ТабЗнч[й].Наименование = ТабЗнч[й-1].Наименование Тогда
ТабЗнч[й-1].Значение = ТабЗнч[й-1].Значение + ", " + ТабЗнч[й].Значение;
ТабЗнч.Удалить(й);
КонецЕсли;
КонецЦикла;
СтруктураОтбора = Новый Структура("Номенклатура,ХарактеристикаНоменклатуры", ЗначениеОтбора.Номенклатура, ЗначениеОтбора.ХарактеристикаНоменклатуры);
РезультатОтбора = ТаблицаЗначений.НайтиСтроки(СтруктураОтбора);
//Если РезультатОтбора.Количество() > 0 Тогда
// СтрокаОтбора = РезультатОтбора[0];
//КонецЕсли;
Для каждого СтрокаОтбора Из РезультатОтбора Цикл
КонецЦикла;
// Выполняет компоновку СКД по переданным настройкам
//
// Параметры:
// Результат - ТабличныйДокумент,ТаблицаЗначений,ДеревоЗначений - результат выполнения
// СхемаКомпоновкиДанных - СхемаКомпоновкиДанных - выполняемая СКД
// НастройкиКомпоновки - НастройкиКомпоновкиДанных,КомпоновщикНастроекКомпоновкиДанных,Строка - выполняемые настройки или адрес временного хранилища или компоновщик с настройками
// ДанныеРасшифровки - ДанныеРасшифровкиКомпоновкиДанных, Неопределено - данные расшифровки
// ВнешниеНаборыДанных - Структура, Неопределено - коллекция внешних наборов данных
// ДополнительныеПараметры - Структура, Неопределено - коллекция внешних наборов данных
// * МакетОформления - МакетОформленияКомпоновкиДанных - Макет оформления, в соответствии с которым необходимо оформлять макет компоновки данных.
// * ПроверятьДоступностьПолей - Булево - Определяет, выполнять ли проверку прав на просмотр полей и проверку доступности поля во включенных функциональных возможностях.
// * ПараметрыФункциональныхОпций - Булево - Содержит параметры функциональных опций, используемые при исполнении отчета.
// * ВозможностьИспользованияВнешнихФункций - Булево - Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
//
// SeiOkami:
// https://infostart.ru/profile/309462/
// https://t.me/JuniorOneS
//Подробнее об использовании метода: https://infostart.ru/public/1082944/?ref=1159
//
Процедура СкомпоноватьРезультатОтчета(Результат, СхемаКомпоновкиДанных, НастройкиКомпоновки,
ДанныеРасшифровки = Неопределено, ВнешниеНаборыДанных = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
//Инициализируем настройки
Если ТипЗнч(НастройкиКомпоновки) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда
ВыполняемыеНастройки = НастройкиКомпоновки.ПолучитьНастройки();
ИначеЕсли ТипЗнч(НастройкиКомпоновки) = Тип("Строка") И ЭтоАдресВременногоХранилища(НастройкиКомпоновки) Тогда
ВыполняемыеНастройки = ПолучитьИзВременногоХранилища(НастройкиКомпоновки);
Иначе
ВыполняемыеНастройки = НастройкиКомпоновки;
КонецЕсли;
Если НЕ ТипЗнч(ВыполняемыеНастройки) = Тип("НастройкиКомпоновкиДанных") Тогда
Возврат;
КонецЕсли;
//Инициализируем дополнительные параметры вывода
ПараметрыВывода = Новый Структура;
ПараметрыВывода.Вставить("МакетОформления" , Неопределено);
ПараметрыВывода.Вставить("ПроверятьДоступностьПолей" , Истина);
ПараметрыВывода.Вставить("ПараметрыФункциональныхОпций" , Новый Структура);
ПараметрыВывода.Вставить("ВозможностьИспользованияВнешнихФункций" , Ложь);
Если НЕ ДополнительныеПараметры = Неопределено Тогда
ЗаполнитьЗначенияСвойств(ПараметрыВывода, ДополнительныеПараметры);
КонецЕсли;
//Определяем тип генератора
Если ТипЗнч(Результат) = Тип("ТаблицаЗначений") ИЛИ ТипЗнч(Результат) = Тип("ДеревоЗначений") Тогда
ВыводВКоллекциюЗначений = Истина;
ТипГенератораВывода = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
Иначе
ВыводВКоллекциюЗначений = Ложь;
ТипГенератораВывода = Тип("ГенераторМакетаКомпоновкиДанных");
КонецЕсли;
//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, ВыполняемыеНастройки,
ДанныеРасшифровки, ПараметрыВывода.МакетОформления, ТипГенератораВывода,
ПараметрыВывода.ПроверятьДоступностьПолей, ПараметрыВывода.ПараметрыФункциональныхОпций);
//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных,
ДанныеРасшифровки, ПараметрыВывода.ВозможностьИспользованияВнешнихФункций);
//Выводим результат
Если ВыводВКоллекциюЗначений Тогда
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(Результат);
Иначе
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
КонецЕсли;
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
Процедура ПоказатьТаблицуЗначений(РезультатТЗ )
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(РезультатТЗ);
Построитель.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Асфальт);
Построитель.Выполнить();
Построитель.ВыводитьЗаголовокОтчета = Истина;
Построитель.ТекстЗаголовка = "Данные таблицы значений";
Для каждого Колонка Из Построитель.ВыбранныеПоля Цикл
Колонка.Представление = РезультатТЗ.Колонки[Колонка.Имя].Заголовок;
КонецЦикла;
МакетТД = Новый ТабличныйДокумент;
Построитель.Вывести(МакетТД);
ОбластьТД = МакетТД.Область();
ОбластьТД.ШиринаКолонки = 20;
МакетТД.ТолькоПросмотр = Истина;
МакетТД.ФиксацияСверху = 4;
МакетТД.ОтображатьЗаголовки = Истина;
МакетТД.Показать();
КонецПроцедуры
Функция УдалитьСтрокиТаблицыЗначений(Знач Таблица, СтруктураОтбора) Экспорт
МассивСтрок = Новый Массив;
РезультатОтбора = Таблица.НайтиСтроки(СтруктураОтбора);
Для каждого СтрокаОтбора Из РезультатОтбора Цикл
МассивСтрок.Добавить(СтрокаОтбора);
КонецЦикла;
Для Каждого СтрокаТЗ Из МассивСтрок Цикл
Таблица.Удалить(СтрокаТЗ);
КонецЦикла;
Возврат Таблица;
КонецФункции // УдалитьСтрокиТаблицыЗначений()
Автор: ildarovich
ВЫБРАТЬ
Товары.Номенклатура,
Товары.Количество
ПОМЕСТИТЬ Эталон
ИЗ
&Товары КАК Товары
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
Товары.Ссылка,
Товары.Номенклатура КАК Номенклатура,
Товары.Количество КАК Количество
ПОМЕСТИТЬ ВсеСтроки
ИЗ
Документ.ЗаказПокупателя.Товары КАК Товары
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ РАЗЛИЧНЫЕ
ЗаказПокупателя.Ссылка,
Эталон.Номенклатура,
Эталон.Количество
ИЗ
Эталон КАК Эталон,
Документ.ЗаказПокупателя КАК ЗаказПокупателя
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Пары.Ссылка
ИЗ
(ВЫБРАТЬ
Пары.Ссылка КАК Ссылка,
Пары.Номенклатура КАК Номенклатура,
Пары.Количество КАК Количество,
КОЛИЧЕСТВО(*) КАК Признак
ИЗ
ВсеСтроки КАК Пары
СГРУППИРОВАТЬ ПО
Пары.Ссылка,
Пары.Номенклатура,
Пары.Количество) КАК Пары
СГРУППИРОВАТЬ ПО
Пары.Ссылка
ИМЕЮЩИЕ
МИНИМУМ(Пары.Признак) = 2
Функция Массив(
Значениеначение1=Неопределено, Значение2=Неопределено, Значение3=Неопределено, Значение4=Неопределено, Значение5=Неопределено,
Значение6=Неопределено, Значение7=Неопределено, Значение8=Неопределено, Значение9=Неопределено, Значение10=Неопределено,
Значение11=Неопределено, Значение12=Неопределено, Значение13=Неопределено, Значение14=Неопределено, Значение15=Неопределено,
Значение16=Неопределено, Значение17=Неопределено, Значение18=Неопределено, Значение19=Неопределено, Значение20=Неопределено) Экспорт
Если ТипЗначения(Значение1) = Тип("Массив") Тогда
М = Значение1
Иначе
М = Новый Массив();
Если Значение1=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение1); КонецЕсли;
КонецЕсли;
Если Значение2=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение2); КонецЕсли;
Если Значение3=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение3); КонецЕсли;
Если Значение4=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение4); КонецЕсли;
Если Значение5=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение5); КонецЕсли;
Если Значение6=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение6); КонецЕсли;
Если Значение7=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение7); КонецЕсли;
Если Значение8=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение8); КонецЕсли;
Если Значение9=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение9); КонецЕсли;
Если Значение10=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение10); КонецЕсли;
Если Значение11=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение11); КонецЕсли;
Если Значение12=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение12); КонецЕсли;
Если Значение13=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение13); КонецЕсли;
Если Значение14=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение14); КонецЕсли;
Если Значение15=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение15); КонецЕсли;
Если Значение16=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение16); КонецЕсли;
Если Значение17=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение17); КонецЕсли;
Если Значение18=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение18); КонецЕсли;
Если Значение19=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение19); КонецЕсли;
Если Значение20=Неопределено Тогда Возврат М; Иначе М.Добавить(Значение20); КонецЕсли;
Возврат М;
КонецФункции
Для Индекс = -ТЗ.Количество()+1 По -1 Цикл
Стр =ТЗ.Получить(-Индекс);
Если Найти(Стр.Имя, "ПодстрокаПоиска") > 0 Тогда
ТЗ.Удалить(Стр);
КонецЕсли;
КонецЦикла;
НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаДата", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата));
НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаЧисло", ОбщегоНазначения.ОписаниеТипаЧисло(12));
НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаСтрока", ОбщегоНазначения.ОписаниеТипаСтрока(100));
НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаСсылка", ОбщегоНазначения.ОписаниеТипаВсеСсылки());
// Выполняет преобразование данных информационной базы в структуру с данными в соответствии с правилами.
//
// Параметры:
// КомпонентыОбмена - Структура - содержит все правила и параметры обмена.
// Источник - ЛюбаяСсылка - Ссылка на выгружаемый объект информационной базы.
// ПравилоКонвертации - СтрокаТаблицыЗначений - Строка таблицы правил конвертации объектов,
// в соответствии с которой выполняется преобразование.
// СтекВыгрузки - массив - ссылки на выгружаемые объекты с учетом вложенности.
//
// Возвращаемое значение:
// Структура - результат преобразования.
//
Функция ДанныеXDTOИзДанныхИБ(КомпонентыОбмена, Источник, Знач ПравилоКонвертации, СтекВыгрузки = Неопределено) Экспорт
Приемник = Новый Структура;
Если СтекВыгрузки = Неопределено Тогда
СтекВыгрузки = Новый Массив;
КонецЕсли;
Если ПравилоКонвертации.ЭтоСсылочныйТип Тогда
ПозицияВСтеке = СтекВыгрузки.Найти(Источник.Ссылка);
// Проверяем, выгружался ли объект по ссылке, чтобы не допустить зацикливания.
Если ПозицияВСтеке <> Неопределено Тогда
Если ПозицияВСтеке > 0 Тогда
Возврат Неопределено;
ИначеЕсли СтекВыгрузки.Количество() > 1 Тогда
// Необходимо искать перебором.
ПерваяИтерация = Истина;
Для Каждого ЭлементСтека Из СтекВыгрузки Цикл
Если ПерваяИтерация Тогда
ПерваяИтерация = Ложь;
Продолжить;
КонецЕсли;
Если ЭлементСтека = Источник.Ссылка Тогда
Возврат Неопределено;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
СтекВыгрузки.Добавить(Источник.Ссылка);
Если Не ОбщегоНазначения.СсылкаСуществует(Источник.Ссылка) Тогда
Возврат Неопределено;
КонецЕсли;
Иначе
СтекВыгрузки.Добавить(Источник);
КонецЕсли;
Если ПравилоКонвертации.ЭтоКонстанта Тогда
Если ПравилоКонвертации.ТипXDTO.Свойства.Количество() = 1 Тогда
Приемник.Вставить(ПравилоКонвертации.ТипXDTO.Свойства[0].Имя, Источник.Значение);
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка XML-схемы. Для приемника должно быть задано одно свойство.
|Тип источника: %1
|Тип приемника: %2'"),
Строка(ТипЗнч(Источник)),
ПравилоКонвертации.ТипXDTO);
КонецЕсли;
Иначе
// Выполнение ПКС, 1-й этап
Для Каждого ПКС Из ПравилоКонвертации.Свойства Цикл
Если ПравилоКонвертации.ОбъектДанных <> Неопределено
И ПКС.СвойствоКонфигурации = ""
И ПКС.ИспользуетсяАлгоритмКонвертации Тогда
Продолжить;
КонецЕсли;
Если СтекВыгрузки.Количество() > 1 И Не ПКС.ОбработкаКлючевогоСвойства Тогда
Продолжить;
КонецЕсли;
ВыгрузитьСвойство(
КомпонентыОбмена,
Источник,
Приемник,
ПКС,
СтекВыгрузки,
1);
КонецЦикла;
// Выполнение ПКС для ТЧ (прямая конвертация).
Если СтекВыгрузки.Количество() = 1 Тогда
Для Каждого ТЧИСвойства Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл
Если НЕ (ЗначениеЗаполнено(ТЧИСвойства.ТЧКонфигурации) И ЗначениеЗаполнено(ТЧИСвойства.ТЧФормата)) Тогда
Продолжить;
КонецЕсли;
// ТЧ пустая.
Если Источник[ТЧИСвойства.ТЧКонфигурации].Количество() = 0 Тогда
Продолжить;
КонецЕсли;
НоваяТЧПриемника = СоздатьТЧПриемникаПоПКС(ТЧИСвойства.Свойства);
Для Каждого СтрокаТЧКонфигурации Из Источник[ТЧИСвойства.ТЧКонфигурации] Цикл
СтрокаТЧПриемник = НоваяТЧПриемника.Добавить();
Для Каждого ПКС Из ТЧИСвойства.Свойства Цикл
Если ПКС.ИспользуетсяАлгоритмКонвертации Тогда
Продолжить;
КонецЕсли;
ВыгрузитьСвойство(
КомпонентыОбмена,
СтрокаТЧКонфигурации,
СтрокаТЧПриемник,
ПКС,
СтекВыгрузки,
1);
КонецЦикла;
КонецЦикла;
Приемник.Вставить(ТЧИСвойства.ТЧФормата, НоваяТЧПриемника);
КонецЦикла;
КонецЕсли;
// {Обработчик: ПриОтправкеДанных} Начало
Если ПравилоКонвертации.ЕстьОбработчикПриОтправкеДанных Тогда
Если Не Приемник.Свойство("КлючевыеСвойства") Тогда
Приемник.Вставить("КлючевыеСвойства", Новый Структура);
КонецЕсли;
ПриОтправкеДанных(Источник, Приемник, ПравилоКонвертации.ПриОтправкеДанных, КомпонентыОбмена, СтекВыгрузки);
Если Приемник = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если СтекВыгрузки.Количество() > 1 Тогда
Для Каждого КлючевоеСвойство Из Приемник.КлючевыеСвойства Цикл
Приемник.Вставить(КлючевоеСвойство.Ключ, КлючевоеСвойство.Значение);
КонецЦикла;
Приемник.Удалить("КлючевыеСвойства");
КонецЕсли;
// Выполнение ПКС, 2-й этап
Для Каждого ПКС Из ПравилоКонвертации.Свойства Цикл
Если ПКС.СвойствоФормата = ""
Или (СтекВыгрузки.Количество() > 1 И Не ПКС.ОбработкаКлючевогоСвойства) Тогда
Продолжить;
КонецЕсли;
// Выполняем конвертацию, если в свойство помещена инструкция.
ЗначениеСвойства = Неопределено;
Если СтекВыгрузки.Количество() = 1 И ПКС.ОбработкаКлючевогоСвойства Тогда
Приемник.КлючевыеСвойства.Свойство(ПКС.СвойствоФормата, ЗначениеСвойства);
Иначе
СвойствоФормата_Имя = СокрЛП(ПКС.СвойствоФормата);
ВложенныеСвойства = СтрРазделить(СвойствоФормата_Имя,".",Ложь);
// Указано полное имя свойства, входящего в группу общих свойств.
Если ВложенныеСвойства.Количество() > 1 Тогда
ПолучитьЗначениеВложенныхСвойств(Приемник, ВложенныеСвойства, ЗначениеСвойства);
Иначе
Приемник.Свойство(СвойствоФормата_Имя, ЗначениеСвойства);
КонецЕсли;
КонецЕсли;
Если ЗначениеСвойства = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ПКС.ИспользуетсяАлгоритмКонвертации Тогда
Если ТипЗнч(ЗначениеСвойства) = Тип("Структура")
И ЗначениеСвойства.Свойство("Значение")
И ЗначениеСвойства.Свойство("ИмяПКО")
Или ПКС.ПравилоКонвертацииСвойства <> ""
И ТипЗнч(ЗначениеСвойства) <> Тип("Структура") Тогда
ВыгрузитьСвойство(
КомпонентыОбмена,
Источник,
Приемник,
ПКС,
СтекВыгрузки,
2);
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Выполнение ПКС для ТЧ
Если СтекВыгрузки.Количество() = 1 Тогда
// Формируем структуру новых табличных частей по ПКС.
СвойстваТЧПриемника = Новый Структура;
Для Каждого ТЧИСвойства Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл
ИмяТЧПриемника = ТЧИСвойства.ТЧФормата;
Если ПустаяСтрока(ИмяТЧПриемника) Тогда
Продолжить;
КонецЕсли;
Если Не СвойстваТЧПриемника.Свойство(ИмяТЧПриемника) Тогда
ТаблицаПКС = Новый ТаблицаЗначений;
ТаблицаПКС.Колонки.Добавить("СвойствоФормата", Новый ОписаниеТипов("Строка"));
СвойстваТЧПриемника.Вставить(ИмяТЧПриемника, ТаблицаПКС);
КонецЕсли;
Для Каждого ПКС Из ТЧИСвойства.Свойства Цикл
СтрокаСвойство = СвойстваТЧПриемника[ИмяТЧПриемника].Добавить();
СтрокаСвойство.СвойствоФормата = ПКС.СвойствоФормата;
КонецЦикла;
КонецЦикла;
Для Каждого ТЧИСвойства Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл
Если Не ТЧИСвойства.ИспользуетсяАлгоритмКонвертации Тогда
Продолжить;
КонецЕсли;
ПКСДляТЧ = ТЧИСвойства.Свойства;
ИмяТЧПриемника = ТЧИСвойства.ТЧФормата;
ТЧПриемника = Неопределено;
Если Не ЗначениеЗаполнено(ИмяТЧПриемника)
Или Не Приемник.Свойство(ИмяТЧПриемника, ТЧПриемника) Тогда
Продолжить;
КонецЕсли;
// Создаем новую ТЗ, в которой нет ограничений типа для колонок.
НоваяТЧПриемника = СоздатьТЧПриемникаПоПКС(СвойстваТЧПриемника[ИмяТЧПриемника]);
// Убираем лишние колонки, которые могли добавить в приемнике.
УдаляемыеКолонки = Новый Массив;
Для Каждого Колонка Из ТЧПриемника.Колонки Цикл
Если НоваяТЧПриемника.Колонки.Найти(Колонка.Имя) = Неопределено Тогда
УдаляемыеКолонки.Добавить(Колонка);
КонецЕсли;
КонецЦикла;
Для Каждого Колонка Из УдаляемыеКолонки Цикл
ТЧПриемника.Колонки.Удалить(Колонка);
КонецЦикла;
// Копируем данные в новую таблицу приемника.
Для Каждого СтрокаТЧПриемника Из ТЧПриемника Цикл
СтрокаНовойТЧПриемника = НоваяТЧПриемника.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаНовойТЧПриемника, СтрокаТЧПриемника);
КонецЦикла;
Приемник[ИмяТЧПриемника] = НоваяТЧПриемника;
Для Каждого Строка Из НоваяТЧПриемника Цикл
Для Каждого ПКС Из ПКСДляТЧ Цикл
Если НЕ ПКС.ИспользуетсяАлгоритмКонвертации Тогда
Продолжить;
КонецЕсли;
ВыгрузитьСвойство(
КомпонентыОбмена,
Источник,
Строка,
ПКС,
СтекВыгрузки,
2);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;
// {Обработчик: ПриОтправкеДанных} Окончание
Если СтекВыгрузки.Количество() > 1 Тогда
Приемник.Вставить("ТипСоставногоСвойства", ПравилоКонвертации.ТипКлючевыхСвойствОбъектаXDTO);
КонецЕсли;
КонецЕсли;
Возврат Приемник;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
РезультатТЗ = новый ТаблицаЗначений;
Для Каждого Колонка из ТЗ.Колонки Цикл
Имя = Колонка.Имя;
МассивТипов = новый Массив(1);
МассивТипов[0] = ТипЗнч(ТЗ[0][Имя]);
Описатель = новый ОписаниеТипов(МассивТипов);
РезультатТЗ.Колонки.Добавить(Имя, Описатель);
КонецЦикла;
Для каждого Строка из ТЗ Цикл
СтрокаРез = РезультатТЗ.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРез, Строка);
КонецЦикла;
ТЗ = РезультатТЗ.Скопировать();
Функция УдалитьДублиСтрокТаблицыЗначений(Таблица, Колонки = "") Экспорт
Если ПустаяСтрока(Колонки) Тогда
// Просто свернем таблицу по всем колонкам
Для каждого Колонка Из Таблица.Колонки Цикл
Колонки = Колонки + ?(ПустаяСтрока(Колонки), "", ",") + Колонка.Имя;
КонецЦикла;
ТаблицаРезультат = Таблица.Скопировать();
ТаблицаРезультат.Свернуть(Колонки);
Иначе
КолонкиЗапроса = "ТЗ." + СтрЗаменить(Колонки, ",", ",ТЗ.");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| " + КолонкиЗапроса + "
|ПОМЕСТИТЬ ВТ_ТЗ
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| " + СтрЗаменить(КолонкиЗапроса, "ТЗ.", "ВТ_ТЗ.") + "
|ИЗ
| ВТ_ТЗ КАК ВТ_ТЗ
|";
Запрос.УстановитьПараметр("ТЗ", Таблица);
РезультатЗапроса = Запрос.Выполнить();
ТаблицаЗапроса = РезультатЗапроса.Выгрузить();
ТаблицаРезультат = Таблица.СкопироватьКолонки();
Для каждого СтрокаТЗ Из ТаблицаЗапроса Цикл
СтруктураОтбора = Новый Структура(Колонки);
ЗаполнитьЗначенияСвойств(СтруктураОтбора, СтрокаТЗ);
РезультатОтбора = Таблица.НайтиСтроки(СтруктураОтбора);
Для каждого СтрокаОтбора Из РезультатОтбора Цикл
НоваяСтрока = ТаблицаРезультат.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаОтбора);
Прервать;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Возврат ТаблицаРезультат;
КонецФункции // УдалитьДублиСтрокТаблицыЗначений()
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = "Текст(*.XML)|*.XML";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл для загрузки";
Если ДиалогОткрытияФайла.Выбрать() Тогда
ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
ТЗ = Сериализатор.ПрочитатьXML(ЧтениеXML,Тип("ТаблицаЗначений"));
ЧтениеXML.Закрыть();
КонецЕсли;
ЭтотОбъект.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ТЗ[0].КонтрагентИНН);
ЭтотОбъект.КРВ_IDМенеджер = ТЗ[0].IDМенеджер;
ЭтотОбъект.КРВ_НомерЗаказаУНФ = ТЗ[0].Номер;
ЭтотОбъект.Склад = Справочники.Склады.НайтиПоНаименованию(ТЗ[0].Склад);
Для каждого СтрокаТЗ Из ТЗ Цикл
КонецЦикла;
&НаСервере
Процедура ЗаполнитьНаСервере()
// Вставить содержимое обработчика.
Запрос= новый запрос;
Запрос.Текст="ВЫБРАТЬ
| ОстаткиНоменклатурыОстатки.Номеклатура КАК Номеклатура,
| ОстаткиНоменклатурыОстатки.КоличестовОстаток КАК КоличестовОстаток,
| ОстаткиНоменклатурыОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
| РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки";
//выборка=запрос.Выполнить().Выбрать();
//создаем ТаблицуЗначений ТЗ
ТЗ=новый ТаблицаЗначений;
//Выгружаем Результат Запроса в Таблицу Значений ТЗ
ТЗ=запрос.Выполнить().Выгрузить();
//создаем ТаблицуЗначений ТЗрез
ТЗрез=новый ТаблицаЗначений;
//в ТаблицуЗначений ТЗрез выгружаем данные с формы
ТЗрез=данныеформывзначение(Объект.Результат,Тип("ТаблицаЗначений"));
//В ТаблицуЗначений ТЗрез сохраняем ТЗ
ТЗрез=ТЗ;
//Записываем значения Таблицы ТЗрез в объект на форме.
ЗначениеВданныеФормы(ТЗрез,объект.Результат);
//данныевреквизитформы(Тзрез,"Результат0");
КонецПроцедуры
////1
Процедура Загрузить();
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.displayalerts = 0;
Excel.WorkBooks.Open(КаталогДБФ);
Состояние("Обработка файла Microsoft Excel...");
ExcelЛист = Excel.Sheets(1);
Исключение
Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
Excel.WorkBooks.Close(); Excel = 0;
Возврат;
КонецПопытки;
ТЗ = ПрочитатьЛистExcel(, ExcelЛист,,,,6);
Excel.WorkBooks.Close();
Excel = 0;
КонецПроцедуры;
Функция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
Если ЛистЭксель = Неопределено Тогда
ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");
КонецЕсли;
Если ВсегоСтрок = 0 Тогда
ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
КонецЕсли;
Если ВсегоКолонок = 0 Тогда
ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
КонецЕсли;
Если ТЗ = Неопределено Тогда
ТЗ = Новый ТаблицаЗначений;
Для Счетчик = 1 По ВсегоКолонок Цикл
ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
КонецЦикла;
КонецЕсли;
Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
НоваяСтрока = ТЗ.Добавить();
КонецЦикла;
Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
Данные = Область.Value.Выгрузить();
Для Счетчик = 0 По ВсегоКолонок-1 Цикл
ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
КонецЦикла;
ЛистЭксель = Неопределено;
Возврат ТЗ;
КонецФункции
////2
ТЗ_рез = РеквизитФормыВЗначение("ТЗДокументы");
МассивРеквизитов = Новый Массив;
//Удалим ранее созданные колонки в ТЗДокументы
Для Каждого Колонка Из ТЗ_рез.Колонки Цикл
МассивРеквизитов.Добавить("ТЗДокументы." + Колонка.Имя);
КонецЦикла;
ИзменитьРеквизиты(,МассивРеквизитов);
//Удалим отображение таблицы на форме и создадим новую
ЭлементТаблица = Элементы.Найти("ТЗДокументы");
Если ЭлементТаблица <> Неопределено Тогда
Элементы.Удалить(ЭлементТаблица);
КонецЕсли;
ЭлементТаблица=Элементы.Добавить("ТЗДокументы",Тип("ТаблицаФормы"));
ЭлементТаблица.ПутьКДанным = "ТЗДокументы";
ЭлементТаблица.Отображение = ОтображениеТаблицы.Список;
ТЗ_рез = Данные;
//Создадим реквизиты ТЗ
МассивРеквизитов.Очистить();
Для Каждого Колонка ИЗ ТЗ_рез.Колонки Цикл
МассивТипов = Новый Массив;
МассивТипов.Добавить(Колонка.ТипЗначения);
НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(МассивТипов), "ТЗДокументы");
МассивРеквизитов.Добавить(НоваяКолонка);
КонецЦикла;
ИзменитьРеквизиты(МассивРеквизитов);
ЗначениеВРеквизитФормы(ТЗ_рез, "ТЗДокументы");
//Создаем элементы на форме для отображения колонок
ЭлементТЗ = Элементы.ТЗДокументы;
Для Каждого Колонка ИЗ ТЗ_рез.Колонки Цикл
НовыйЭлементФормы = Элементы.Добавить("ТЗДокументы"+Колонка.Имя, Тип("ПолеФормы"), ЭлементТЗ);
НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлементФормы.ПутьКДанным = "ТЗДокументы." + Колонка.Имя;
КонецЦикла;
//выбираем сотрудника
ЗапросВ = КомСоединение.NewObject("Запрос");
ЗапросВ.Текст = "
|ВЫБРАТЬ первые 1
|Сотрудники.Ссылка КАК Сотрудник
|ИЗ
|Справочник.Сотрудники КАК Сотрудники
|ГДЕ
|НЕ Сотрудники.СтруктураКомпании = ЗНАЧЕНИЕ(Справочник.СтруктураКомпании.ПустаяСсылка)
|И Сотрудники.ФизическоеЛицо.Наименование = &ФизическоеЛицо
|И Сотрудники.ПометкаУдаления = ЛОЖЬ
|";
ЗапросВ.УстановитьПараметр("ФизическоеЛицо", СтруктураДанных.Сотрудник.Наименование);
com_Результат = ЗапросВ.Выполнить().Выбрать();// COM объект
Если com_Результат.следующий() Тогда
//нашли сотрудника
com_ТЗ_Сотрудники = com_Результат.Сотрудник;// COM объект
// Получаем таблицу значений из COM-объекта
// COMОбъект в -> строку
// Запишем COMОбъект в строку на стороне базы-источника
стр_ТЗ_Сотрудники = КомСоединение.ЗначениеВСтрокуВнутр(com_ТЗ_Сотрудники);
// получим таблицу значений из строки
ТЗ_Сотрудники = ЗначениеИзСтрокиВнутр(стр_ТЗ_Сотрудники);
МенеджерДокумента = КомСоединение.Документы.ЗаписьВРНФактическиеОтпуска;
КомСоединение.УстановитьБезопасныйРежим(Ложь);
КомСоединение.УстановитьПривилегированныйРежим(Истина);
НовДок = МенеджерДокумента.СоздатьДокумент();
НовДок.Дата = СтруктураДанных.Период;
НовДок.Сотрудник...
Иначе
//соответственно не нашли
com_ТЗ_Сотрудники = Неопределено;
КонецЕсли;
// Функция - Элемент справочника ищет/создаёт элемент справочника
//
// Параметры:
// НазваниеСправочника - Строка - Название справочника элемент которого необходимо вернуть
// СтруктураПараметров - Структура - Ключ = Название реквизиты, Значение = Значение
// Режим - Число - Варианты:
// 1 - ищет и возвращает ссылку;
// 2 - ищет и возвращает ссылку, если не находит создаёт новый элемент и возвращает ссылку на него
// 3 - создаёт новый элемент и возвращает ссылку на него
//
// Возвращаемое значение:
// СправочникСсылка
//
Функция ЭлементСправочника(НазваниеСправочника, СтруктураПараметров, Режим = 2) Экспорт
Результат = Неопределено;
Искать = (Режим = 1 или Режим = 2);
Если Искать тогда
Запрос = Новый Запрос;
ТекстУсловий = "";
Для Каждого ЭлементСтруктуры из СтруктураПараметров Цикл
Запрос.Параметры.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение);
ОбъектМетаданных = Метаданные.Справочники[НазваниеСправочника].Реквизиты.Найти(ЭлементСтруктуры.Ключ);
Если ОбъектМетаданных = Неопределено Тогда
ОбъектМетаданных = Метаданные.Справочники[НазваниеСправочника].СтандартныеРеквизиты[ЭлементСтруктуры.Ключ];
КонецЕсли;
Тип = ОбъектМетаданных.Тип;
//Новый ОписаниеТипов(
Если Тип = Новый ОписаниеТипов("Строка") Тогда
//и Тип.КвалификаторыСтроки.Длина = 0 Тогда
ТекстУсловий = ТекстУсловий + "ВЫРАЗИТЬ(" + НазваниеСправочника + "." + ЭлементСтруктуры.Ключ
+ " КАК СТРОКА(1000)) = ВЫРАЗИТЬ(&" + ЭлементСтруктуры.Ключ + " КАК СТРОКА(1000)) И ";
Иначе
ТекстУсловий = ТекстУсловий + НазваниеСправочника + "." + ЭлементСтруктуры.Ключ + " = &" + ЭлементСтруктуры.Ключ + " И ";
КонецЕсли;
КонецЦикла;
ТекстУсловий = ТекстУсловий + "ИСТИНА = ИСТИНА";
Запрос.Текст = "ВЫБРАТЬ " + НазваниеСправочника + ".Ссылка ИЗ Справочник." + НазваниеСправочника + " КАК " + НазваниеСправочника + " ГДЕ " + ТекстУсловий;
ТЗ_РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если ТЗ_РезультатЗапроса.Количество() = 1 Тогда
Результат = ТЗ_РезультатЗапроса[0].Ссылка;
ИначеЕсли ТЗ_РезультатЗапроса.Количество() > 1 Тогда
Сообщить("Найдено более одного элемента:");
Сообщить(ТЗ_РезультатЗапроса[0].Ссылка);
Результат = ТЗ_РезультатЗапроса[0].Ссылка;
КонецЕсли;
КонецЕсли;
Создавать = (Режим = 3 или (Режим = 2 и не ЗначениеЗаполнено(Результат)));
Если Создавать Тогда
Если СтруктураПараметров.Свойство("ЭтоГруппа") и СтруктураПараметров.ЭтоГруппа Тогда
НовыйЭлемент = Справочники[НазваниеСправочника].СоздатьГруппу();
Иначе
НовыйЭлемент = Справочники[НазваниеСправочника].СоздатьЭлемент();
КонецЕсли;
ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтруктураПараметров);
НовыйЭлемент.Записать();
Результат = НовыйЭлемент.Ссылка;
КонецЕсли;
Возврат Результат;
КонецФункции