arefaste/1C_Forums huggingface dataset:
Чтение файла XML в объект XDTO по схеме *.xsd
Теги: Схема XSD,1С,ФабрикаXDTO,ОбъектXDTO

Чтение файла XML в объект XDTO по схеме *.xsd с преобразованием типов согласно схеме

# Код реализации

```1c
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл(ИмяФайла);

Фабрика = СоздатьФабрикуXDTO(ИмяФайлаСхемы); //*.xsd
ОбъектXDTO = Фабрика.ПрочитатьXML(ЧтениеXML);

ЧтениеXML.Закрыть();
```
Диалог выбора файла
Теги: 1С,РежимДиалогаВыбораФайла,ДиалогВыбораФайла

Стандартный диалог выбора файла

# Код реализации

```1c
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = "";
    Фильтр = "Текст(*.txt)|*.txt";
    ДиалогОткрытияФайла.Фильтр = Фильтр;
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    ДиалогОткрытияФайла.Заголовок = "Выберите файл";

    Если ДиалогОткрытияФайла.Выбрать() Тогда
        ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
    КонецЕсли;
```
Перенести отбор СКД
Теги: 1С,СКД

Перенести отбор СКД из одного компоновщика в другой

# Код реализации

```1c
Процедура ПеренестиОтбор(ОтборПриемник, ОтборИсточник)

	Для каждого ЭлементИсточник Из ОтборИсточник.Элементы Цикл

		Если ТипЗнч(ЭлементИсточник) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда

			Если ТипЗнч(ЭлементИсточник.ЛевоеЗначение) = Тип("ПолеКомпоновкиДанных") Тогда

				Если ОтборПриемник.ДоступныеПоляОтбора.НайтиПоле(ЭлементИсточник.ЛевоеЗначение) = Неопределено Тогда
					Продолжить;
				КонецЕсли;

			КонецЕсли;

		КонецЕсли;

		ЭлементПриемник = ОтборПриемник.Элементы.Добавить(ТипЗнч(ЭлементИсточник));
		ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник);

		Если ТипЗнч(ЭлементИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
			ПеренестиОтбор(ЭлементПриемник, ЭлементИсточник);
		КонецЕсли;

	КонецЦикла;

КонецПроцедуры
```

# Примечания

- будет ошибка в строке

ОтборПриемник.ДоступныеПоляОтбора.НайтиПоле(ЭлементИсточник.ЛевоеЗначение) = Неопределено Тогда

в случае когда ОтборПриемник это ГруппаЭлементовОтбораКомпоновкиДанных
Поправил:
Процедура ПеренестиОтбор(ОтборПриемник, ОтборИсточник, ДоступныеПоляОтбораПриемника)
    
    Для каждого ЭлементИсточник Из ОтборИсточник.Элементы Цикл
        
        Если ТипЗнч(ЭлементИсточник) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
            
            Если ТипЗнч(ЭлементИсточник.ЛевоеЗначение) = Тип("ПолеКомпоновкиДанных") Тогда
            
                Если ДоступныеПоляОтбораПриемника.НайтиПоле(ЭлементИсточник.ЛевоеЗначение) = Неопределено Тогда
                    Продолжить;
                КонецЕсли;    
            
            КонецЕсли;
        
        КонецЕсли;    
        
        ЭлементПриемник = ОтборПриемник.Элементы.Добавить(ТипЗнч(ЭлементИсточник));
        ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник);
        
        Если ТипЗнч(ЭлементИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
            ПеренестиОтбор(ЭлементПриемник, ЭлементИсточник, ДоступныеПоляОтбораПриемника);
        КонецЕсли;    
        
    КонецЦикла;    
    
КонецПроцедуры
Дата создания ссылки
Теги: 1С

Получение даты и времени по ГУИДу ссылки

# Код реализации

```1c
Функция ДатаСозданияСсылки(Ссылка) Экспорт

	Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
		Возврат Неопределено;
	КонецЕсли;

	Момент = Дата(1, 1, 1);
	Попытка

        УИ = Строка(Ссылка.УникальныйИдентификатор());
        УИ = ВРег(СтрЗаменить(УИ,"-",""));

		Если Сред(УИ, 13, 1) = "1" Тогда

            Значение16 = ВРег(Сред(УИ, 14, 3) + Сред(УИ, 9, 4) + Сред(УИ, 1, 8));
            Цифры16    = "123456789ABCDEF";
            Значение10 = 0;
            Длина16    = СтрДлина(Значение16);

			Для Ном = 1 По Длина16 Цикл
                Значение10 = Значение10 + Pow(16, Длина16-Ном)*Найти(Цифры16, Сред(Значение16, Ном, 1));
			КонецЦикла;

            Значение10 = Значение10/10000000;
            Момент     = Дата(1582, 10, 15, 3, 0, 0) + Значение10;

		КонецЕсли;

    Исключение
    КонецПопытки;

	Возврат Момент;

КонецФункции
```
Кнопки управления группировками
Теги: 1С

Кнопки управления группировками, отчет

# Код реализации

```1c
Процедура СгенерироватьКнопкиУправленияГруппировкой(ЭлементТабПоле, Панель)

//	ЭлементТабПоле = ЭлементыФормы.ТабДопИнформация;

    НачалоВерх = ЭлементТабПоле.Верх + 3; // Привязка к верхнему левому углу ПоляТабличногоДокумента
    НачалоЛево = ЭлементТабПоле.Лево + 3; // Привязка к верхнему левому углу ПоляТабличногоДокумента

	Имя = ЭлементТабПоле.Имя;

    ШагКнопок      		= 13;
    ПрефиксИмениКн 		= "КнГрГор_" + Имя + "_";
	ПрефиксИмениКнВерт 	= "КнГрВерт_" + Имя + "_";

    // Удалить старые кнопки
    Сч = 0;
    Пока Сч < ЭлементыФормы.Количество() Цикл
        ТекЭлемент = ЭлементыФормы.Получить(Сч);
		Если (Найти(ТекЭлемент.Имя, ПрефиксИмениКн) > 0) ИЛИ
			 (Найти(ТекЭлемент.Имя, ПрефиксИмениКнВерт) > 0) Тогда
            ЭлементыФормы.Удалить(ТекЭлемент);
        Иначе
            Сч = Сч + 1;
        КонецЕсли;
    КонецЦикла;

    // Добавть новые кнопки по количеству группировок
    КоличествоГруппировок = ЭлементТабПоле.КоличествоУровнейГруппировокСтрок();
    Для Сч = 1 По КоличествоГруппировок Цикл
        НоваяКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), ПрефиксИмениКн + Сч, , Панель);
        НоваяКнопка.Верх      = НачалоВерх;
        НоваяКнопка.Лево      = НачалоЛево + (ШагКнопок * (Сч - 1));
        НоваяКнопка.Высота    = 11;
        НоваяКнопка.Ширина    = 11;
        НоваяКнопка.Шрифт     = Новый Шрифт("Шрифт диалогов и меню", 6);
        НоваяКнопка.Заголовок = "" + Сч;
        НоваяКнопка.УстановитьДействие("Нажатие", Новый Действие("СвернутьДоУровня"));
	КонецЦикла;

	НачалоЛево = НачалоЛево + Сч * ШагКнопок + 3;
	// Добавть новые кнопки по количеству группировок
    КоличествоГруппировок = ЭлементТабПоле.КоличествоУровнейГруппировокКолонок();
    Для Сч = 1 По КоличествоГруппировок Цикл
        НоваяКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), ПрефиксИмениКнВерт + Сч, , Панель);
        НоваяКнопка.Верх      = НачалоВерх + (ШагКнопок * (Сч - 1));
        НоваяКнопка.Лево      = НачалоЛево;
        НоваяКнопка.Высота    = 11;
        НоваяКнопка.Ширина    = 11;
        НоваяКнопка.Шрифт     = Новый Шрифт("Шрифт диалогов и меню", 6);
        НоваяКнопка.Заголовок = "" + Сч;
        НоваяКнопка.УстановитьДействие("Нажатие", Новый Действие("СвернутьДоУровняКолонки"));
    КонецЦикла;

КонецПроцедуры //СгенерироватьКнопкиУправленияГруппировкой()

Процедура СвернутьДоУровня(Элемент)

    Уровень = Число(Элемент.Заголовок); // здесь записан нужный уровень

	Имя = СтрЗаменить(Элемент.Имя, "_", Символы.ПС);
	Имя = СтрПолучитьСтроку(Имя, 2);

    ЭлементыФормы[Имя].ПоказатьУровеньГруппировокСтрок(Уровень - 1);

КонецПроцедуры //СвернутьДоУровня()

Процедура СвернутьДоУровняКолонки(Элемент)

    Уровень = Число(Элемент.Заголовок); // здесь записан нужный уровень

	Имя = СтрЗаменить(Элемент.Имя, "_", Символы.ПС);
	Имя = СтрПолучитьСтроку(Имя, 2);

    ЭлементыФормы[Имя].ПоказатьУровеньГруппировокКолонок(Уровень - 1);

КонецПроцедуры //СвернутьДоУровня()
```
Очистка регистра сведений
Теги: 1С

Очистка независимого регистра сведений. Минимум кода. Будьте внимательны при использовании.
(удаление всех записей, форматирование)

# Код реализации

```1c
НаборЗаписей = РегистрыСведений.НазваниеМоегоРегистра.СоздатьНаборЗаписей();
//если нужно, например, очистить по одному конкретному измерению, то раскоментируем строчку,
//меняем измерение:
//НаборЗаписей.Отбор.Организация.Установить(УдаляемаяОрганизация);
НаборЗаписей.Записать();
```
Отправка Интернет Почты
Теги: 1С

Отправить почту из 1С

# Код реализации

```1c
//Прежде всего нам понадобится smtp-сервер для отправки писем. Параметры сервера записываем в переменную с типом  ИнтернетПочтовыйПрофиль.

ПараметрыПочты = новый ИнтернетПочтовыйПрофиль;
ПараметрыПочты.АдресСервераSMTP = "smtp.server.com";
ПараметрыПочты.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
ПараметрыПочты.ПользовательSMTP = "user";
ПараметрыПочты.ПарольSMTP="pass";

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

Письмо=новый ИнтернетПочтовоеСообщение;
Письмо.Тема="Уведомление о задолженности";
Письмо.ИмяОтправителя="ООО Рога и копыта";
Письмо.Отправитель="bill@roga.ru";
Письмо.Получатели.Добавить("director@firma.ru");
Письмо.Тексты.Добавить("Текст письма");
Письмо.Вложения.Добавить("адрес файла вложения на жестком диске");

//И в конце концов отправляем сформированное письмо.

Подключение=новый ИнтернетПочта;
Попытка
Подключение.Подключиться(ПараметрыПочты);
Подключение.Послать(Письмо);
Сообщить ("Письмо отправлено успешно.");
Исключение
Сообщить ("Письмо не отправлено." + ОписаниеОшибки());
КонецПопытки;
```
Разложить строку в массив
Теги: 1С

# Код реализации

```1c
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
	МассивСтрок = Новый Массив();
	Если Разделитель = " " Тогда
		Стр = СокрЛП(Стр);
		Пока 1 = 1 Цикл
			Поз = Найти(Стр, Разделитель);
			Если Поз = 0 Тогда
				МассивСтрок.Добавить(Стр);
				Возврат МассивСтрок;
			КонецЕсли;
			МассивСтрок.Добавить(Лев(Стр, Поз - 1));
			Стр = СокрЛ(Сред(Стр, Поз));
		КонецЦикла;
	Иначе
		ДлинаРазделителя = СтрДлина(Разделитель);
		Пока 1 = 1 Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз = 0 Тогда
				МассивСтрок.Добавить(Стр);
				Возврат МассивСтрок;
			КонецЕсли;
			МассивСтрок.Добавить(Лев(Стр, Поз - 1));
			Стр = Сред(Стр, Поз + ДлинаРазделителя);
		КонецЦикла;
	КонецЕсли;
КонецФункции
```

# Примечания

- СтрРазделить(Строка, Разделитель);
СтрСоединить(Строки, Разделитель);

- (1) Combat, представляешь, не во всех версиях платформы есть эти функции
Поиск в таблице значений неуникальных значений
Теги: 1С

# Код реализации

```1c
Отбор = Новый Структура;
Отбор.Вставить("Цвет", "Зелёный");
Строки = Таб.НайтиСтроки(Отбор);
Для Каждого Стр Из Строки Цикл
    Сообщить(Стр.Фрукт); // Яблоко Киви
КонецЦикла;
```

# Примечания

- не ну это бред...
Загрузка из excel, xls
Теги: 1С

Простая загрузка из excel, xls

# Код реализации

```1c
////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
```
Программное проведение документа
Теги: 1С

Программное проведение документа с закрытием формы

# Код реализации

```1c
&НаСервере
Процедура ОпубликоватьНаСервере()
	ЭО = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект.Заявка"));

	ЭО.Записать(РежимЗаписиДокумента.Проведение);

	ЗначениеВДанныеФормы(ЭО, Объект);

КонецПроцедуры

&НаКлиенте
Процедура Опубликовать(Команда)

	ОпубликоватьНаСервере();

	ЭтаФорма.Закрыть();

	ОбновитьИнтерфейс();

КонецПроцедуры
```
Чтение файла XML в объект XDTO
Теги: 1С,ФабрикаXDTO,ОбъектXDTO

Чтение файла XML в объект XDTO

# Код реализации

```1c
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла);

ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

ЧтениеXML.Закрыть();
```
Вывод данных СКД в таблицу значений (дерево)
Теги: 1С,СКД

Вывод данных СКД в таблицу значений (дерево)

# Код реализации

```1c
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Таблица = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
```
Вывод данных СКД в табличный документ
Теги: 1С,СКД

Вывод данных СКД в табличный документ

# Код реализации

```1c
	ВнешниеНаборыДанных = Новый Структура;

	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);

	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);

	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

	ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
```

# Примечания

- Мне эта процедура нравится, т.к. более универсальна https://infostart.ru/public/80164/
Инициализация компоновщика настроек, упр формы
Теги: 1С,СКД,УФ

Инициализация компоновщика настроек, упр формы, обработка, СКД

# Код реализации

```1c
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
СхемаСКД = ОбработкаОбъект.ПолучитьМакет("СхемаСКД");

АдресСхемы = ПоместитьВоВременноеХранилище(СхемаСКД, УникальныйИдентификатор);
ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы);

КомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек);
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаСКД.НастройкиПоУмолчанию);
```
Инициализация компоновщика настроек
Теги: 1С,СКД

Инициализация компоновщика настроек, обработка. СКД

# Код реализации

```1c
СхемаСКД = ПолучитьМакет("СхемаСКД");
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаСКД));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаСКД.НастройкиПоУмолчанию);
```
Обработка проводок по дереву
Теги: 1С

Обработка проводок по дереву

# Код реализации

```1c
Дерево  = мРезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
Колво   = Дерево.Строки.Количество();
Счетчик = 0;
Для каждого Строка1 Из Дерево.Строки Цикл

	Счетчик = Счетчик + 1;
	ОбработкаПрерыванияПользователя();
	Состояние(Строка(Счетчик) + " из " + Строка(Колво) + " " + Строка(Строка1.Регистратор));

	НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Регистратор.Установить(Строка1.Регистратор);
	НаборЗаписей.Прочитать();

	Для каждого Строка2 Из Строка1.Строки Цикл

		Запись = НаборЗаписей[Строка2.НомерСтроки - 1];

		Если Строка2.ДтКт = "Дт" Тогда
		Иначе
		КонецЕсли;

	КонецЦикла;

	НаборЗаписей.ОбменДанными.Загрузка = Истина;
	НаборЗаписей.Записать();

КонецЦикла;
```
Пересчет строки товаров
Теги: 1С,УТ11

УТ11, пересчитать сумму, ндс на сервере

# Код реализации

```1c
СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Источник);

СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");

КэшированныеЗначения = Неопределено;

ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаТЧ, СтруктураДействий, КэшированныеЗначения);
```
Раскраска строки табличной части документа (обычные формы) по условию
Теги: 1С

# Код реализации

```1c
Процедура выбДокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	Если (ДанныеСтроки.п="-")или(данныеСтроки.у = "+") тогда
		ОформлениеСтроки.ЦветФона = Новый Цвет(204,255,204);
	конецЕсли;
КонецПроцедуры
```

# Примечания

- Эффективнее будет использовать метод ПриПолученииДанных.
Поскольку ПриВыводеСтроки будет считываться вся табличная часть и "разукрашиться".
ПриПолученииДанных будет отрабатывать только что отборажено на экране.
https://its.1c.ru/db/metod8dev#content:2805:hdoc

- Оформление строки при получении данных
https://fastcode.im/Templates/Details/6661
пересчет реквизита табличной части обычной формы
Теги: 1С

пересчет реквизита табличной части обычной формы

# Код реализации

```1c
Процедура Пересчет()
	СтрокаТабличнойЧасти = ЭлементыФормы.Товар.ТекущиеДанные;
	Рекв = ЭлементыФормы.Товар.ТекущаяКолонка.Данные;
	Если Рекв = "Номенклатура" Тогда
		ЦенаТ = ПолучитьЦену(СтрокаТабличнойЧасти.Номенклатура);
		СтрокаТабличнойЧасти.Цена = ЦенаТ;
		СтрокаТабличнойЧасти.Количество = 1;
		СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество;
	ИначеЕсли Рекв = "Количество" Тогда
		СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество;
	ИначеЕсли Рекв = "Цена" Тогда
		СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество;
	ИначеЕсли Рекв = "Сумма" Тогда
		СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Сумма/?(СтрокаТабличнойЧасти.Количество=0,1,СтрокаТабличнойЧасти.Количество);
	КонецЕсли;
КонецПроцедуры
```
Заполнение табличного документа
Теги: 1С

# Код реализации

```1c
Макет 	= ПолучитьМакет("макет");
А1 		= Макет.ПолучитьОбласть("А1");
А2 		= Макет.ПолучитьОбласть("А2");
табДок.Вывести(А1,1);
для ее = 0 по рез.Количество()-1 цикл
	А2.Параметры.Заполнить(рез[ее]);
	ТабДок.Вывести(А2,2,"импортер",истина);
конецЦикла;
табДок.ЗакончитьАвтогруппировкуСтрок();
табДок.Показать();
```
Чтение XML через DOM
Теги: 1С

Чтение XML через DOM

# Код реализации

```1c
функция читаемХМЛ2014(путь,атр) экспорт
	х 		= новый массив;
	y 		= новый массив;
	мДОМ 	= новый ПостроительDOM;

	заявка = новый таблицаЗначений;
	заявка.Колонки.Добавить("номерДок");
	заявка.Колонки.Добавить("клиент");
	заявка.Колонки.Добавить("адрес");
	заявка.Колонки.Добавить("товар");
	заявка.Колонки.Добавить("кодТовара");
	заявка.Колонки.Добавить("количество");
	заявка.Колонки.Добавить("цена");
	заявка.Колонки.Добавить("сумма");

	чтение 	= Новый ЧтениеXML ;
	чтение.ОткрытьФайл(сокрЛП(путь));
	мДокументДОМ = мДОМ.Прочитать(чтение);
	чтение.Закрыть();
	номерДок = "";
	клиент   = "";
	адрес    = "";
	_documents =  мДокументДОМ.ПолучитьЭлементыПоИмени("documents");
	для каждого а1 из _documents цикл
		_preorder = а1.ПолучитьЭлементыПоИмени("preorder");
		для каждого а2 из _preorder цикл
			_ттн = а2.дочерниеУзлы;
			для каждого а21 из _ттн цикл
				если (а21.имяУзла = "innercode") тогда
					номерДок =а21.ТекстовоеСодержимое;
				конецЕсли;
				если (а21.имяУзла = "buypointjuridicalname") тогда
					клиент   = а21.ТекстовоеСодержимое;
				конецЕсли;
				если (а21.имяУзла = "buypointaddress") тогда
					адрес    = а21.ТекстовоеСодержимое;
				конецЕсли;
			конецЦикла;
			_item = а2.ПолучитьЭлементыПоИмени("item");
			для каждого а3 из _item цикл
				_товар  = а3.ДочерниеУзлы;
				хх = заявка.Добавить();
				хх.номерДок = номерДок;
				хх.клиент   = клиент;
				хх.адрес    = адрес;
				для каждого а4 из _товар цикл
					если  (а4.имяУзла = "SKUname") тогда
						хх.товар = а4.ТекстовоеСодержимое;
					конецЕсли;
					если (а4.имяУзла = "SKUcode")тогда
						хх.кодТовара = а4.ТекстовоеСодержимое;
					конецЕсли;
					если (а4.имяУзла = "quantity")тогда
						хх.количество = а4.ТекстовоеСодержимое;
					конецЕсли;
					если (а4.имяУзла = "priceDiscount")  тогда
						хх.цена = а4.ТекстовоеСодержимое;
					конецЕсли;
					если (а4.имяУзла = "amount")  тогда
						хх.сумма = а4.ТекстовоеСодержимое;
					конецЕсли;
				конецЦикла;
			конецЦикла;
		конецЦикла;
	конецЦикла;


	//мРазыменовательПИ = мДокументДОМ.СоздатьРазыменовательПИ(мДокументДОМ);
	//мЗапрос		= "/documents/preorders/preorder/body/item/*";
	//мХПуть		= мДокументДОМ.СоздатьВыражениеXPath(мЗапрос,мРазыменовательПИ);
	//мРезультат	= мХПуть.Вычислить(мДокументДОМ);
	//мРодитель	= мРезультат.ПолучитьСледующий();
	//пока мРодитель <> неопределено цикл
	//	//если  мРодитель.ИмяЭлемента = "body" тогда
	//	//
	//	//
	//	//	сообщить("");
	//	//	мРодитель=мРезультат.ПолучитьСледующий();
	//	//	продолжить;
	//	//конецЕсли;
	//	х.Добавить( мРодитель.ИмяЭлемента+" "+мРодитель.ТекстовоеСодержимое);
	//	сообщить(мРодитель.ИмяЭлемента+" "+мРодитель.ТекстовоеСодержимое);
	//	мРодитель=мРезультат.ПолучитьСледующий();
	//конецЦикла;

	возврат заявка;
конецФункции  //функция читаемХМЛ2014(путь)
```
Обработка подбора в управляемой форме
Теги: 1С

Обработка подбора в управляемой форме

# Код реализации

```1c
&НаКлиенте //часто стоит указать &наСервере
Процедура выбратьТовар(Команда)
	 ст = новый структура;
	 ст.Вставить("товар", элементы.списокПодбора.текущиеДанные.товар);
	 ст.Вставить("цена"	, элементы.списокПодбора.текущиеДанные.цена);
	 //этаФорма.результат = ПоместитьВоВременноеХранилище(ст);
	 этаФорма.ВладелецФормы.адресПодбора = ст;
	 этаФорма.ВладелецФормы.выполнитьПодбор();
	 этаФорма.Закрыть();
КонецПроцедуры //Процедура выбратьТовар(Команда)

&НаКлиенте
процедура выполнитьПодбор() Экспорт
	ст 					= этаФорма.адресПодбора;
	адресПодбора 		= неопределено;
	хх 					= объект.товар.Добавить();
	хх.номенклатура 	= ст.товар;
	хх.ценаВход 		= ст.цена;
	хх.цена 			= ст.цена;
	хх.количество 		= 1;
	хх.сумма 			= хх.количество*хх.цена;
конецПроцедуры
```
Вызов формы подбора в управляемой форме
Теги: 1С

# Код реализации

```1c
	П = Новый Структура;
	ФормаВыбора = ПолучитьФорму("Документ.расходТовара.Форма.подбор",П,этаФорма);
	ФормаВыбора.Открыть();
```
Вызов шаблона в управляемой форме
Теги: 1С

Вызов шаблона в управляемой форме

# Код реализации

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

Вернуть СКД в УФ

# Код реализации

```1c
функция вернутьКомпоновку(СхемаКомпоновкиДанных,ВнешниеНаборыДанных)
	Настройки 					= СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
	КомпоновщикМакета 			= Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки 			= КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки);
	ПроцессорКомпоновкиДанных 	= Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных);
	ТабДок 						= Новый ТабличныйДокумент; //этаФорма.птд1
	ПроцессорВывода 			= Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ТабДок);
	ПроцессорВывода.НачатьВывод();
	Пока Истина Цикл
		ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий();
		Если ЭлементРезультата = Неопределено Тогда
			Прервать;
		Иначе
			ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
		КонецЕсли;
	КонецЦикла;
	ПроцессорВывода.ЗакончитьВывод();
	//Результат.ПоказатьУровеньГруппировокСтрок(0)

	ТабДок.ОтображатьСетку 		= Ложь;
	ТабДок.ОтображатьЗаголовки 	= Ложь;
	ТабДок.ТолькоПросмотр 		= Истина;
	табДок.ПоказатьУровеньГруппировокСтрок(0);
	возврат ТабДок;
конецФункции  //функция вернутьКомпоновку(СхемаКомпоновкиДанных,ВнешниеНаборыДанных,квартал1 = "ХХ",год1 = "ХХХХ",квартал2 = "ХХ",год2 = "ХХХХ")

//************исполенение***************
Рез 			= Запрос.Выполнить().Выгрузить();
	  СхемаКомпоновкиДанных 		= обработкаОбъект.ЭтотОбъект.ПолучитьМакет("форма6и7кратко");
	ВнешниеНаборыДанных 		= Новый Структура;
	ВнешниеНаборыДанных.Вставить("рез",Рез);
	вернутьКомпоновку(СхемаКомпоновкиДанных,ВнешниеНаборыДанных).показать();
```