arefaste/1C_Forums huggingface dataset:
Определение, вместится ли текст в ячейку табличного документа
Теги: 1С,Размер,Текст,Вместимость,ТабличныйДокумент,Область,Ячейка,Высота

Функция для определения вместимости текста в ячейку табличного документа

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

```1c
//Функция для определения вместится ли текст в ячейку:
//
// Параметры:
//  пОбласть -Область табличного документа- Область табличного документа, которую надо проверить на вместимости.
//	"пОбласть = пТабДок.Области.ТекстЗаготовки;". "ТекстЗаготовки" имя ячейки.
//
//  Для возможности использования этого метода необходимо соблюдать следующие условия:
//
//	пТабДок - Табличный документ - Табличный документ, в котором происходит проверка.
//  "пТабДок = Макет.ПолучитьОбласть("ТекстЗаготовки");"
//
//  пТекст - Строка - Проверяемый текст.
//
//	1. Необходимо как-нибудь назвать область.
//	2. Заполнение области = Текст, а не Параметр или Шаблон.
//	Во всяком случае, я ничего простого не придумал. И так как жизнь это усложняет не сильно не стал заморачиваться из-за этого.
//	3. Размещение текста (Параметр ячейки) = Перенос. Вот это нужно обязательно! Размещение текста програмно поставить можно, но эффект от изменения,
//	насколько я понял, появляется только после отображения табличного документа с этой ячейкой.
//
// Возвращаемое значение:
//  Булево.
//
Функция ТекстУмещаетсяВЯчейке(пОбласть, пТабДок, пТекст) Экспорт

	ВысотаДо = ВысотаОбластиВмм(пОбласть, пТабДок);

	// Скопируем область в новый табличный документ.
	// И там уже будем играть с её свойствами.
	ВремТабДок = Новый ТабличныйДокумент;
	ВремТабДок.Вывести(пТабДок);
	ВремОбласть = ВремТабДок.Область(пОбласть.Имя);

	ВремОбласть.АвтоВысотаСтроки = Истина;
	ВремОбласть.ВысотаСтроки     = 0;

	ВремОбласть.Текст = пТекст + "Щ"; // Для исключения ситуаций вида "на грани переноса"
	ВысотаПосле       = ВысотаОбластиВмм(ВремОбласть, ВремТабДок);

	Возврат ВысотаДо >= ВысотаПосле;

КонецФункции


//Функция возвращает высоту области таб. документа в мм
//
// Параметры:
// пОбласть - Область табличного документа -  Область табличного документа которую надо проверить.
//
// пТабДок - Табличный документ - Табличный документ, в котором происходит проверка.
//
// Возвращаемое значение:
// число.
//
Функция ВысотаОбластиВмм(пОбласть, пТабДок)

    Надпись = пТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
    Надпись.Расположить(пОбласть);
    Высота = Надпись.Высота;
    пТабДок.Рисунки.Удалить(Надпись);

    Возврат(Высота);

КонецФункции
```

# Примечания

- Надо округлить в функции "ВысотаОбластиВмм", а то иногда некорректно срабатывает:
Функция ВысотаОбластиВмм(пОбласть, пТабДок)
//------
Возврат Окр(Высота, 1);
КонецФункции
Вывести все доступные поля СКД
Теги: 1С,СКД,Желтый Чайник 1С

Выводит в коллекцию выбранных полей СКД все доступные поля.
Метод иерархический, для вызова достаточно передать коллекцию выбранных полей, которые нужно заполнить.

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

```1c
// Выводит в коллекцию выбранных полей СКД все доступные поля.
// Метод иерархический, для вызова достаточно передать коллекцию выбранных полей, которые нужно заполнить.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/18
//
// Параметры:
//
//  ВыбранныеПоляКомпоновки  - ВыбранныеПоляКомпоновкиДанных, КоллекцияВыбранныхПолейКомпоновкиДанных  -
//						Выбранные поля компоновки, которые необходимо заполнить
//
//  КоллекцияДоступныхПолей  - Неопределено, ДоступныеПоляКомпоновкиДанных -
//						Параметр для иерархических вызовов процедуры из себя самой же.
//						При использовании передавать не нужно.
//
// Пример:
//  ВывестиВсеДоступныеПоляВыбора(Настройки.Выбор); //Выводит все доступные поля
//
Процедура ВывестиВсеДоступныеПоляВыбора(Знач ВыбранныеПоляКомпоновки, Знач КоллекцияДоступныхПолей = Неопределено) Экспорт

	Если КоллекцияДоступныхПолей = Неопределено Тогда
		КоллекцияДоступныхПолей = ВыбранныеПоляКомпоновки.ДоступныеПоляВыбора;
	КонецЕсли;

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

	ТекущийРодитель = Новый Структура("Родитель", Неопределено);
	ЗаполнитьЗначенияСвойств(ТекущийРодитель, КоллекцияДоступныхПолей);
	ТекущийРодитель = ТекущийРодитель.Родитель;

	Для Каждого ДоступноеПолеВыбора Из КоллекцияДоступныхПолей.Элементы Цикл

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

		ЗаполнитьЗначенияСвойств(ВыбранноеПоле, ДоступноеПолеВыбора, "Поле,Заголовок");

	КонецЦикла;

КонецПроцедуры
```
"Использовать в качестве значения поле" программно
Теги: 1С,УФ,ПолеКомпоновкиДанных,Желтый Чайник 1С,Использовать в качестве значения поле,СКД,Таблица

В тех случаях, когда на таблице формы с отборами СКД необходимо по умолчанию в новых элементах включать галочку "Использовать в качестве значения поле"
Актуальные символы препроцессора
Теги: 1С,Директивы компиляции,препроцессор

Возвращает массив символов препроцессора актуальных при вызове.
Функция может быть полезна в процессе изучения/освоения особенностей клиент-серверного взаимодействия.
 <Символ препроцессора> = {НаКлиенте | НаСервере | ТолстыйКлиентОбычноеПриложение | ТолстыйКлиентУправляемоеПриложение | Клиент | Сервер | ВнешнееСоединение }

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

```1c
&НаКлиентеНаСервере
Функция АктуальныеСимволыПрепроцессора() Экспорт

    Результат = новый Массив;

    #Если НаКлиенте Тогда
        Результат.Добавить("НаКлиенте");
    #КонецЕсли

    #Если НаСервере Тогда
        Результат.Добавить("НаСервере");
    #КонецЕсли

    #Если Клиент Тогда
        Результат.Добавить("Клиент");
    #КонецЕсли

    #Если Сервер Тогда
        Результат.Добавить("Сервер");
    #КонецЕсли

    #Если МобильноеПриложениеКлиент Тогда
        Результат.Добавить("МобильноеПриложениеКлиент");
    #КонецЕсли

    #Если МобильноеПриложениеСервер Тогда
        Результат.Добавить("МобильноеПриложениеСервер");
    #КонецЕсли

    #Если МобильныйКлиент Тогда
        Результат.Добавить("МобильныйКлиент");
    #КонецЕсли

    #Если ТолстыйКлиентОбычноеПриложение Тогда
        Результат.Добавить("ТолстыйКлиентОбычноеПриложение");
    #КонецЕсли

    #Если ТолстыйКлиентУправляемоеПриложение Тогда
        Результат.Добавить("ТолстыйКлиентУправляемоеПриложение");
    #КонецЕсли

    #Если ВнешнееСоединение Тогда
        Результат.Добавить("ВнешнееСоединение");
    #КонецЕсли

    #Если ТонкийКлиент  Тогда
        Результат.Добавить("ТонкийКлиент");
    #КонецЕсли

    #Если ВебКлиент  Тогда
        Результат.Добавить("ВебКлиент");
    #КонецЕсли

    Возврат Результат;

КонецФункции
```
Создание регламентного задания из внешней обработки
Теги: 1С,ВнешняяОбработка,РегламентноеЗадание

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

```1c
// Функция возвращает сведения о внешней обработке.
Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");

    ПараметрыРегистрации.Вставить("Наименование", "Демо обработка");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Информация", "Демо обработка");
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд,
    "Демо обработка",
    "Идентификатор",
    "ВызовСерверногоМетода",
    Истина,"");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;

КонецФункции


Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции


Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры


Процедура ВыполнитьКоманду(Идентификатор, ОбъектыНазначения) Экспорт

	// Тело процедуры

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

# Примечания

- Для тех кто не понял, где именно здесь регламентное задание. Это сделано для типовых и конфигураций на поддержке, чтобы не вносить изменения в конфигурацию.
Размещаете код в процедуре ВыполнитьКоманду
Добавляете обработку через механизм подключения внешних обработок. После этого станет доступна настройка расписания.
Отслеживание трека почта России
Теги: 1С

# Примечания

- Не нужно ничего парсить. Нужно использовать Web-API почты россии. И тянуть данные из их SOAP-сервисов.
https://tracking.pochta.ru/specification
Подключаясь через WSОпределение и WSПрокси
как тут например https://fastcode.im/Templates/2585

- (1) Эльдар Мингалиев, Не понял как мне передать трек в этот сервис или я что то не понял , пошел читать форумы

- Получил объектXDTO, как теперь его распарсить что бы увидеть историю по письму ?

- В цикле в масив ? Или как то можно разложить по другому ?
Массив не вариант , так как получения письма может быть по другим индексом . вообщем не понимаю как получить теперь даные из полученного объекта ?

- Тупо через точку можно получать данные )

- Так есть же описание
https://tracking.pochta.ru/specification
и даже готовые примеры работы для 1С https://tracking.pochta.ru/support/about/examples
Расчет ручной скидки &НаСервере
Теги: 1С,Документы,Ручная  скидка

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

```1c
//добавим скидку на товары
Если НЕ СуммаСкидки = 0 Тогда

Ограничения = Новый ТаблицаЗначений;
Ограничения.Колонки.Добавить("ЦеноваяГруппа");
Ограничения.Колонки.Добавить("СуммаБезСкидки");
Ограничения.Колонки.Добавить("СуммаРучнойСкидки");
Ограничения.Колонки.Добавить("СуммаАвтоматическойСкидки");
Ограничения.Колонки.Добавить("МаксимальныйПроцентРучнойСкидки");
Ограничения.Колонки.Добавить("МаксимальныйПроцентРучнойНаценки");
Ограничения.Колонки.Добавить("МаксимальнаяСуммаРучнойСкидки");
Ограничения.Колонки.Добавить("МаксимальнаяСуммаРучнойНаценки");

СтрОграничения 									= Ограничения.Добавить();
СтрОграничения.ЦеноваяГруппа 					= Справочники.ЦеновыеГруппы.ПустаяСсылка();
СтрОграничения.СуммаБезСкидки                   = ЗаказКлиентаОбъект.Товары.Итог("Сумма");
СтрОграничения.СуммаРучнойСкидки                = 0;
СтрОграничения.СуммаАвтоматическойСкидки        = 0;
СтрОграничения.МаксимальныйПроцентРучнойСкидки  = 999.99;
СтрОграничения.МаксимальныйПроцентРучнойНаценки	= 999.99;
СтрОграничения.МаксимальнаяСуммаРучнойСкидки	= (ЗаказКлиентаОбъект.Товары.Итог("Сумма")*999.99)/100;
СтрОграничения.МаксимальнаяСуммаРучнойНаценки   = (ЗаказКлиентаОбъект.Товары.Итог("Сумма")*999.99)/100;

ТЗ_Товары = ЗаказКлиентаОбъект.Товары.Выгрузить();
ТЗ_Товары.Колонки.Добавить("ЦеноваяГруппа");

АдресВремХранилища = ПоместитьВоВременноеХранилище(Новый Структура("Ограничения, Товары, ИспользоватьОграниченияРучныхСкидок", Ограничения, ТЗ_Товары, Ложь), Новый УникальныйИдентификатор());

СкидкиНаценкиСервер.НазначитьРучнуюСкидку(ЗаказКлиентаОбъект,"Товары", СуммаСкидки,Ложь,Ложь,Ложь,Ложь,Неопределено,АдресВремХранилища,Ложь);

КонецЕсли;
```
Программное добавление элементов управления на форму (ОФ)
Теги: 1С,Обычные формы

Добавляет страницу, надпись и поле ввода на форму элемента справочника "Номенклатура". Обычные формы. Конфигурация БГУ 1.0

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

```1c
Процедура МодифицироватьНоменклатураФормаЭлемента(ЭтаФорма) Экспорт

     ЭлементыФормы = ЭтаФорма.ЭлементыФормы;
     ШиринаНадписи = 160;
     ВерхНадписи = 5;
     ЛевоНадписи = 5;
     СтраницаАнализПитания = ЭлементыФормы.ПанельСвойствНоменклатуры.Страницы.Добавить("АнализПитания", "Анализ питания");
     ЭлементыФормы.ПанельСвойствНоменклатуры.ТекущаяСтраница = СтраницаАнализПитания;
     НадписьГруппаПродуктовПитания = ЭтаФорма.ЭлементыФормы.Добавить(Тип("Надпись"), "НадписьГруппаПродуктовПитания", Истина,                 ЭлементыФормы.ПанельСвойствНоменклатуры);
     НадписьГруппаПродуктовПитания.Заголовок = "Группа продуктов питания: ";
     НадписьГруппаПродуктовПитания.Ширина = ШиринаНадписи;
     НадписьГруппаПродуктовПитания.Верх = ВерхНадписи;
     НадписьГруппаПродуктовПитания.Лево =  ЛевоНадписи;
     ПолеГруппаПродуктовПитания = ЭтаФорма.ЭлементыФормы.Добавить(Тип("ПолеВвода"), "ПолеГруппаПродуктовПитания", Истина, ЭлементыФормы.ПанельСвойствНоменклатуры);
     ПолеГруппаПродуктовПитания.Данные = "ГруппаПродуктовПитания";
     ПолеГруппаПродуктовПитания.Ширина = 150;
     ПолеГруппаПродуктовПитания.Верх = ВерхНадписи;
     ПолеГруппаПродуктовПитания.Лево =  ЛевоНадписи + ШиринаНадписи + 5;
     ЭлементыФормы.ПанельСвойствНоменклатуры.ТекущаяСтраница = ЭлементыФормы.ПанельСвойствНоменклатуры.Страницы.Общее;

КонецПроцедуры
```
Подключение к базе через COM соединение и создание нового документа
Теги: 1С

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

```1c
//выбираем сотрудника

ЗапросВ = КомСоединение.NewObject("Запрос");
ЗапросВ.Текст = "
|ВЫБРАТЬ первые 1
|Сотрудники.Ссылка КАК Сотрудник
|ИЗ
|Справочник.Сотрудники КАК Сотрудники
|ГДЕ
|НЕ Сотрудники.СтруктураКомпании = ЗНАЧЕНИЕ(Справочник.СтруктураКомпании.ПустаяСсылка)
|И Сотрудники.ФизическоеЛицо.Наименование = &ФизическоеЛицо
|И Сотрудники.ПометкаУдаления = ЛОЖЬ
|";

ЗапросВ.УстановитьПараметр("ФизическоеЛицо", СтруктураДанных.Сотрудник.Наименование);

com_Результат     = ЗапросВ.Выполнить().Выбрать();// COM объект

Если com_Результат.следующий() Тогда
	//нашли сотрудника

	com_ТЗ_Сотрудники = com_Результат.Сотрудник;// COM объект

	// Получаем таблицу значений из COM-объекта
	// COMОбъект в -> строку
	// Запишем COMОбъект в строку на стороне базы-источника

	стр_ТЗ_Сотрудники = КомСоединение.ЗначениеВСтрокуВнутр(com_ТЗ_Сотрудники);

	// получим таблицу значений из строки
	ТЗ_Сотрудники = ЗначениеИзСтрокиВнутр(стр_ТЗ_Сотрудники);

	МенеджерДокумента = КомСоединение.Документы.ЗаписьВРНФактическиеОтпуска;
	КомСоединение.УстановитьБезопасныйРежим(Ложь);
	КомСоединение.УстановитьПривилегированныйРежим(Истина);

	НовДок      = МенеджерДокумента.СоздатьДокумент();
	НовДок.Дата = СтруктураДанных.Период;
	НовДок.Сотрудник...

Иначе
	//соответственно не нашли

	com_ТЗ_Сотрудники = Неопределено;
КонецЕсли;
```

# Примечания

- А где создание нового документа ?

- (1) reborn85, копипаст сломался )

- увидел, тут самое полезное это как раз ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр, но в СП к сожалению есть такое описание:
Используется для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать для других целей не рекомендуется.

- (3) reborn85, когда-то это решение мне помогло, причем это работало в КА 2.4. Если не рекомендуется , тогда надо искать другое решение.

- (3) reborn85, можно использовать КомСоединение.String(КомОбъект);

- (5) Razlagutt, Время идет вперед и давно уже надо перейти полностью, например, на http вместо com
Получить имя формы выбора по ссылке
Теги: 1С,ФормаВыбора

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

```1c
&НаСервереБезКонтекста
Функция ПолучитьИмяФормыВыбора(Ссылка)

	Возврат Ссылка.Метаданные().ПолноеИмя() + ".ФормаВыбора";

КонецФункции
```
УТ 11.4. Выбрать все документы, по определенному виду номенклатуры
Теги: 1С,УТ11

Список типов документов можно наполнить нужными. ВидНоменклатуры - реквизит на форме обработке или указывать программно

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

```1c
&НаСервере
Процедура ВыбратьДокументыНаСервере()

	ТЗДокументы.Очистить();

	СписокИменДокументов = СформироватьСписокСТипамиДокументов();

	ТекстЗапроса = "";

	Для каждого Вид Из СписокИменДокументов Цикл

		Если ТекстЗапроса<>"" Тогда
			ТекстЗапроса=ТекстЗапроса+"
			|ОБЪЕДИНИТЬ ВСЕ ";
		КонецЕсли;

		Шаблон =
		"ВЫБРАТЬ
		|  ТЧ.Ссылка КАК Ссылка,
		|  ТЧ.Номенклатура КАК Номенклатура
		|ИЗ
		|  Документ.ПриобретениеТоваровУслуг.Товары КАК ТЧ
		|ГДЕ ТЧ.Ссылка.Проведен И ТЧ.Номенклатура.ВидНоменклатуры = &ВидНоменклатуры";

		ТекстЗапроса = ТекстЗапроса+СтрЗаменить(Шаблон, "ПриобретениеТоваровУслуг", Вид);

	КонецЦикла;

	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		НоваСтрокаТЗ = ТЗДокументы.Добавить();
		НоваСтрокаТЗ.Документ = Выборка.Ссылка;
	КонецЦикла;

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

Функция СформироватьСписокСТипамиДокументов()

	СписокТиповДокументов = Новый Массив;

	СписокТиповДокументов.Добавить(Метаданные.Документы.ПриобретениеТоваровУслуг.Имя);
	СписокТиповДокументов.Добавить(Метаданные.Документы.ВозвратТоваровОтКлиента.Имя);
	СписокТиповДокументов.Добавить(Метаданные.Документы.ВозвратТоваровПоставщику.Имя);
	СписокТиповДокументов.Добавить(Метаданные.Документы.ПеремещениеТоваров.Имя);
	СписокТиповДокументов.Добавить(Метаданные.Документы.СборкаТоваров.Имя);
	СписокТиповДокументов.Добавить(Метаданные.Документы.ПрочееОприходованиеТоваров.Имя);

	Возврат СписокТиповДокументов;

КонецФункции
```
Выгрузить схему компоновки данных (скд) в файл/строку
Теги: 1С,СКД

Позволяет получить выходной xml схемы компоновки данных (скд) из переданной схемы, программно. Аналогично нажатию на кнопку  "сохранить схему в файл". Полезно когда необходимо отладить схему формирующуюся программно.

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

```1c
&НаСервере
Функция СхемаКомпоновкиСтрокой(Схема) Экспорт

	СтрокаСхемы = "";

	ЗаписьXML = Новый ЗаписьXML;

	Путь = ПолучитьИмяВременногоФайла("xml");

	ЗаписьXML.ОткрытьФайл(Путь);

	СериализаторXDTO.ЗаписатьXML(
                               ЗаписьXML,
                               Схема,
                               "dataComposition",
                               "http://v8.1c.ru/8.1/data-composition-system/composition-template");

	ЗаписьXML.Закрыть();

	ЧтениеТекста = Новый ЧтениеТекста(Путь);

	СтрокаСхемы = ЧтениеТекста.Прочитать();

	ЧтениеТекста.Закрыть();

	Возврат СтрокаСхемы;

КонецФункции
```
Выгрузка данных в формате CSV
Теги: 1С,CSV,выгрузка в txt

выгрузка данных в формате CSV, для ут 10.3, УПП

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

```1c
Процедура ВыполнитьНажатие(Команда)
	ИмяФайла = "Обмен";
	//ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	//
	//ДиалогОткрытияФайла.ПолноеИмяФайла = ИмяФайла+".csv";
	//ДиалогОткрытияФайла.Каталог = "C:\Users\Сотрудник_1С\Desktop\Внешние обработки";
	Режим        = РежимДиалогаВыбораФайла.Открытие;
	ДиалогВыбора = новый ДиалогВыбораФайла(Режим);
	//ДиалогВыбора.ПолноеИмяФайла = "";
	//Фильтр       = "Файл данных (*.csv)|*.csv";
	//ДиалогВыбора.Фильтр = Фильтр;
	ДиалогВыбора.Заголовок = "Выберите Каталог";
	Если ДиалогВыбора.Выбрать() Тогда
		ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
	КонецЕсли;
	//ИмяФайла = "C:\Users\Сотрудник_1С\Desktop\Внешние обработки"+"Обмен.csv";
	ВыгрузитьВCSV(ИмяФайла);

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

Функция ВыгрузитьВCSV(имяФайлаCSV);
	разделитель = ";";
	ТаблицаЗначений = ПолучитьНоменклатуру();
	//Тут может быть любое получение данных, в моем случае номенклатура, цены, бренд и остатки
	текст = СоздатьДанныеCSV(ТаблицаЗначений,разделитель);
	ЗаписатьCSV(текст,имяФайлаCSV);

КонецФункции

Функция СоздатьДанныеCSV(ТаблицаЗначений,разделитель)

	текст="";
	для каждого запись из ТаблицаЗначений Цикл
		если текст="" тогда
			текст=СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель)
			+ Символы.ПС;
		КонецЕсли;

		сообщить(запись.Наименование);
		текст = текст + запись.Код
		+ разделитель + запись.КодПроизводителя
		+ разделитель + запись.Наименование
		+ разделитель + запись.Цена
		+ разделитель + запись.Бренд
		+ разделитель + запись.Наличие
		+ Символы.ПС;
	КонецЦикла;

	//сообщить(текст);
	Возврат текст;

КонецФункции //

Функция ЗаписатьCSV(текст,имяФайла)
	кодировка = КодировкаТекста.ANSI;
	ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла,Кодировка);
	//ТекстовыйФайлЗапись.ЗаписатьСтроку(текст);
	ТекстовыйФайлЗапись.Записать(текст);
	ТекстовыйФайлЗапись.Закрыть();
	Возврат 0;

КонецФункции
```

# Примечания

- А ненужный (закомментированный) код перед публикацией религия не позволила удалить?

- (1) Little Friend, а чем он мешает?
Вывести список пользователей с пустым паролем
Теги: 1С,Пользователи

Вывести список пользователей ИБ, у которых не заполнен пароль

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

```1c
&НаСервере

мПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();

Для Каждого мПользователь Из мПользователи Цикл

	Если ПустаяСтрока(
		мПользователь.СохраняемоеЗначениеПароля)
		И мПользователь.АутентификацияСтандартная Тогда

		Сообщить(мПользователь);

	КонецЕсли;

КонецЦикла;
```
Итоги в подвале таблицы с учетом отбора
Теги: 1С

Штатные итоги в таблицах выводятся без учета установленных отборов

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

```1c
&НаКлиенте
Процедура ОбновитьИтоги(Команда)

    ДанныеТаб = Отчет.ТаблицаФормы1;
	Сумма1 = 0;
	Если Элементы.ТаблицаФормы1.ВыделенныеСтроки.Количество() > 1 тогда
		Для каждого с из Элементы.ТаблицаФормы1.ВыделенныеСтроки цикл
			стр = ДанныеТаб.НайтиПоИдентификатору(с);
			Сумма1 = Сумма1 + стр.СуммаЗатрат;
		КонецЦикла;
	Иначе
		Для каждого стр из ДанныеТаб цикл
			Если Элементы.ТаблицаФормы1.ПроверитьСтроку(стр.ПолучитьИдентификатор()) тогда
				 Сумма1 = Сумма1 + стр.СуммаЗатрат;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	Элементы.ТаблицаФормы1.ПодчиненныеЭлементы.ТаблицаФормы1СуммаЗатрат.ТекстПодвала = Формат(Сумма1,"ЧДЦ=2");
КонецПроцедуры
```

# Примечания

- Для динамических список пробуем событие ПриПолученииДанныхНаСервере
Для табличных частей ПриАктивизацииСтроки
Номер без префикса и лидирующих нулей
Теги: 1С

Функция возвращает номер без префикса и лидирующих нулей. Необычное решение от Сергея.

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

```1c
Функция ЧислоСправа1(Номер)
   Возврат Формат(Число("0" + Сред(Номер, СтрДлина(СокрП(
   СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Номер
   , "0", " "), "1", " "), "2", " "), "3", " "), "4", " "), "5", " "), "6", " "), "7", " "), "8", " "), "9", " "))) + 1)), "ЧГ=");
КонецФункции
```
CSV в массив из структур
Теги: 1С,ТаблицаЗначений,Текст,CSV,Структура,Строка,Массив

Перевести строку с заголовками (CSV) в массив из структур

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

```1c
Функция ПреобразоватьCSVвМассив(CSV)

	Разделитель        = Символы.Таб;
	ЗаголовкиCSV       = СокрЛП(СтрПолучитьСтроку(CSV,1));

	DATA = Новый Массив;
	Для НомерСтроки=2 По СтрЧислоСтрок(CSV) Цикл
		Строка         = СтрПолучитьСтроку(CSV, НомерСтроки);
		МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка, Разделитель, Ложь, );
		Структура      = Новый Структура(СтрЗаменить(ЗаголовкиCSV,  Разделитель, ","));
		Инд            = 0;
		Для Каждого КлючЗначение Из Структура Цикл
			Структура[КлючЗначение.Ключ] = МассивПодстрок[Инд];
			Инд = Инд+1;
		КонецЦикла;
		DATA.Добавить(Структура);
	КонецЦикла;

	Возврат DATA;

КонецФункции
```
Открытие значения элемента ОФ ячейки таблицы при клике на нем
Теги: 1С,ОбычныеФормы,ОФ,СписокВыбор,ОткрытьЗначение,Колонка

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

```1c
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    Если ВыбраннаяСтрока = Неопределено Тогда
        Возврат;
    КонецЕсли;

    ОткрытьЗначение(ВыбраннаяСтрока[Колонка.Имя]);
    СтандартнаяОбработка = Ложь;
КонецПроцедуры
```
Немодально ввести значение определенного типа от пользователя
Теги: 1С

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

```1c
/// Как немодально ввести значение определенного
/// типа от пользователя в 1с 8.3, 8.2

&НаКлиенте
Процедура КакИнтерактивноВвестиЗначениеОпределенногоТипа(Команда)

    Оповещение = Новый ОписаниеОповещения("ПослеВводаЗначения",
      ЭтотОбъект);

    ПоказатьВводЗначения(
        Оповещение,
        , // пропускаем начальное значение
        "Введите значение",
        "Число"
    );

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

&НаКлиенте
Процедура ПослеВводаЗначения(Результат, Параметры) Экспорт

    Если Не Результат = Неопределено Тогда
        Сообщить(Результат);
    КонецЕсли;

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