arefaste/1C_Forums huggingface dataset:
Вопрос. Стоит ли мне учить 1С для дальнейшего потом заработка
Теги: 1С

# Примечания

- Всё зависит от ваших целей и мотиваций. Я бы всё-таки советовал изучать лучше другие "взрослые" языки. А при случае если что, всегда сможете с минимальным переобучением вернутся на 1С (Если не брать в расчет знание типовых конфигураций и пр., чисто кодинг)

- Если бы я вернулся через портал в то время, когда начал изучать 1С, то нашёл бы себя там, связал и, треснув по башке томом <другой ЯП>, не отпустил, пока не выбил бы обещание никогда не ступать на Желтую Сторону.
Выводы делайте сами.

- (1) markers, ну цель естественно начать зарабатывать вминималтные сроки в сфере программирования

- (3) ArByZzZ, дело в том что человек инертен и сев на что-то одно без явной необходимости переходить на другое не будет.
Труд разработчика 1С за $ трудно продается, а курс рубля падает.
Лучше устроиться Junior dev на международно применимый язык с международно применимыми фреймворками и через 3 года быть snr Software dev, который:

не привязан к стране и рублю
и может решать как и где работать и в какой валюте будет его ЗП.
У 1С ника такое невозможно.

Сама компания-производитель активно запускает на рынок "облачные конфигурации" это значит что она отбирает работы по обслуживаю мелких и средних компаний у рядовых программистов и переносит эти деньги на франчайзи, которые платят недостаточно чтобы у них постоянно работали профессионалы. Значит к франчайзи пойдешь если будет острая необходимость - это не самый привлекательный вариант. А частным программистом со своим кругом клиентов не будешь т.к. клиенты перескакивают на лайт версию подписки на обновления (ИТС), а остальное докупают через инфостарт.
Остается работать на крупные корпорации. Они постепенно внедряют ERP с помощью франчайзи. Как только будет технология как обновлять такое решение без разработчиков 1С (программистов) этим корпорациям не понадобятся вообще разработчики. Постепенно мы к этому и идем. Технология расширений конфигурации пытается решить именно эти "проблемы". Тренд простой - тратить на дорогих программистов меньше или вообще ничего.
Останутся только производители тиражных решений. Это ОЧЕНЬ ограничивает круг работодателей.
1С ник это больше знание конфигураций и БСП + служебные конфигурации чем программист.  Никто не хочет от 1Сника нулевых разработок библиотек, конфигураций и прочее.
В 1С главное уметь за минимальный строк выполнить задачу (желательно без программирования  и без ошибок).
Да у нас есть програмирование но надо понимать что
1С это больше платформа (фреймворк), в который ты встраиваешь свои дополнения.
Это как VBS программист для EXCEL только на 1С.
Это очень востребовано и нужно, но ограничено в применении.
Это мое мнение с позиции ведущего разработчика 1С.

- Если совсем нет знаний в программировании, то 1с хорошо подойдет для быстрого старта в этой сфере. А дальше после изучения основных базовых понятий в программировании можете переходить на другие языки и фреймворки
Запрос 1С
Теги: 1С,СКД,Запросы

# Примечания

- Отчет на СКД? Во-первых, нужно использовать параметры виртуальной таблицы, в них собственно и указывать склад, если это необходимо, либо вынести измерение в поля, чтобы потом по нему сгруппировать. Во-вторых в качестве основной таблицы брать ТоварыНаСкладахОстатки тоже так себе идея, потому что остатков на дату получения отчета может не быть, а за период движения по ним были, тут лучше брать ОстаткиИОбороты. И так ли важно вам брать регистры Закупки и Продажи, может хватит одного регистра ТоварыНаСкладах ОстаткиИОбороты, там есть начальный, конечный остаток, приход (закупки) и расход (продажи).

- (1) Zloyka, В том и дело, что мне надо обвязку таблиц сделать, преподаватель такое задание дал, я думаю сейчас еще почитать про соединения, и попробовать что то реализовать. Попробую через остатки и обороты как говорите.

- (1) Zloyka, кстати да, регистр с остатками и оборотами кажется вполне пойдет, может преподаватель не заметит) Спасибо.
Получить данные временной таблицы
Теги: 1С,Временная таблица,Отладка,Запрос

При добавлении данной функции в общий модуль, позволяет быстро и без внесения изменений в код получать данные из временных таблиц в запросе. Используется в случае, если МенеджерВременныхТаблиц = Неопределенно. Доступна с версии 8.3.8

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

```1c
//Функция возвращает содержимое временной таблицы в запросе по индексу
//
// Параметры:
//  Запрос - Запрос - исполняемый запрос
//  ИндексПакета - Число – индекс временной таблицы
//
// Возвращаемое значение:
//  - Таблица значений - таблица значений с содержимым временной таблицы.
//
Функция ПолучитьДанныеВременнойТаблицы(Запрос, ИндексПакета) Экспорт
	Возврат Запрос.ВыполнитьПакетСПромежуточнымиДанными()[ИндексПакета].Выгрузить();
КонецФункции
```
Шпаргалка по горячим клавишам для разработчика 1С
Теги: 1С,Горячие клавиши,Шпаргалка,Картинка,Желтый Чайник 1С,Заметка

# Примечания

- Проверка синтаксиса Ctrl + F7, закрыть окно сообщений Ctrl+Shift+Z

- (1) PowerBoy, очистить окно сообщений забыл. Ctrl + Alt + Z

- (1) (2), спасибо вам, коллеги.
Я уже подзадолбался мышью тыкать в это окошко.
Как узнать какая программа блокирует файл
Теги: 1С,Администрирование

# Примечания

- Ничего качать не надо, всё делается штатными инструментами:

Нажимаем Win+S
Набираем в поиске "монитор"
Находим в списке "Монитор ресурсов", открываем
Переключаемся на вкладку ЦП
В разделе "связанные дескрипторы" вводим имя заблокированного файла
Правой кнопкой мыши закрываем процесс, отображённый в списке
...
Profit!

- (1) prog1c, до чего техника дошла 😃

- (1) prog1c, Если задача, освободить файл, то есть вариант по проще - бесплатная программа Unlocker.

- Всегда удивляло, что нет встроенного в винду удобного функционала.
Раз ругается на захват файла, то пусть уж и даёт возможность тут же увидеть процессы и срубить

- (4) SeiOkami, интересно как в Mac OS с этим дела обстоят 😃

- (3) markers, вам правда проще вместо использования штатных инструментов Windows скачивать и устанавливать дополнительные программы?

- (6) prog1c, Ну скачать и установить требуется всего один раз, а потом им пользоваться сильно проще и обладает дополнительным функционалом, решающий задачу
Добавить или обновить колонку
Теги: 1С,ТаблицаЗначений,Добавить,Желтый Чайник 1С,Найти,Колонки,Таблица

Добавляет новую колонку или обновляет существующую
Если колонка уже есть, то обновляет свойства Заголовок и Ширина

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

```1c
// Добавляет новую колонку или обновляет существующую
// Если колонка уже есть, то обновляет свойства Заголовок и Ширина
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/23
//
// Параметры:
//  ТаблицаЗначений  - ТаблицаЗначений - Таблица значений, в которую нужно добавить колонку
//  Имя              - Строка - Имя колонки
//  Тип              - ОписаниеТипов, Неопределено - Объект, описывающий допустимые типы значений для колонки.
//                 Если параметр не указан, в колонке можно будет хранить значение любого типа.
//  Заголовок        - Строка, Неопределено - Заголовок колонки таблицы значений.
//                 Используется при визуальном отображении таблицы значений.
//  Ширина           - Число, Неопределено - Ширина колонки в символах.
//                 Используется при визуальном отображении таблицы значений.
//
// Возвращаемое значение:
//   КолонкаТаблицыЗначений - добавленная (или найденная) колонка
//
// Пример:
// 	ТЗ = Новая ТаблицаЗначений;
// 	К1 = ОбновленнаяКолонкаТаблицы(ТЗ, "К1"); //ТЗ.Колонки.Количество() = 1
// 	К2 = ОбновленнаяКолонкаТаблицы(ТЗ, "К2"); //ТЗ.Колонки.Количество() = 2
// 	К1 = ОбновленнаяКолонкаТаблицы(ТЗ, "К1"); //ТЗ.Колонки.Количество() = 2
//
Функция ОбновленнаяКолонкаТаблицы(Знач ТаблицаЗначений, Знач Имя,
	Знач Тип = Неопределено, Знач Заголовок = Неопределено, Знач Ширина = Неопределено) Экспорт

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

	Если Заголовок <> Неопределено Тогда
		Колонка.Заголовок	= Заголовок;
	КонецЕсли;

	Если Ширина <> Неопределено Тогда
		Колонка.Ширина	= Ширина;
	КонецЕсли;

	Возврат Колонка;

КонецФункции
```
Добавить отбор построителя
Теги: 1С,Отчет,Запрос,Построитель,Желтый Чайник 1С,Отбор,ЭлементОтбора

Возвращает новый элемент отбора построителя

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

```1c
// Возвращает новый элемент отбора построителя
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/17
//
// Параметры:
//  Построитель    - ПостроительЗапроса, ПостроительОтчета - Построитель, в которой необходимо добавить элемент отбора
//  ПолеОтбора     - Строка - Имя поля отбора
//  ЗначениеОтбора - Произвольный
//                 - Массив из Произвольный
//                 - ФиксированныйМассив из Произвольный
//  ВидОтбора      - Строка, ВидСравнения - Вид сравнения отбор в виде строки
//                 Если Неопределено, то для списков будет ВСписке, а для остальных Равно
//
// Возвращаемое значение:
//   ЭлементОтбора
//
// Пример:
// 	ЭлементОтбора = Построитель_ДобавитьОтбор(Построитель, "Код", "123");
// 	ЭлементОтбора = Построитель_ДобавитьОтбор(Построитель, "Номер", 1, "Больше");
// 	ЭлементОтбора = Построитель_ДобавитьОтбор(Построитель, "Ссылка", МассивСсылок);
//
Функция Построитель_ДобавитьОтбор(Знач Построитель, Знач ПолеОтбора, Знач ЗначениеОтбора, Знач ВидОтбора = Неопределено) Экспорт

    ЭлементОтбора = Построитель.Отбор.Добавить(ПолеОтбора);
    ЭлементОтбора.Использование = Истина;

	Если ТипЗнч(ЗначениеОтбора) = Тип("Массив")
		ИЛИ ТипЗнч(ЗначениеОтбора) = Тип("ФиксированныйМассив") Тогда
		УстанавливаемоеЗначение = Новый СписокЗначений; //СписокЗначений из Неопределено
		Для Каждого Значение Из ЗначениеОтбора Цикл
			УстанавливаемоеЗначение.Добавить(Значение);
		КонецЦикла;
		ЭтоСписок = Истина;
	Иначе
		 УстанавливаемоеЗначение = ЗначениеОтбора; //@skip-check statement-type-change
		 ЭтоСписок = (ТипЗнч(ЗначениеОтбора) = Тип("СписокЗначений"));
	КонецЕсли;

	Если ВидОтбора = Неопределено Тогда
		ЭлементОтбора.ВидСравнения = ?(ЭтоСписок, ВидСравнения.ВСписке, ВидСравнения.Равно);
	ИначеЕсли ТипЗнч(ВидОтбора) = Тип("ВидСравнения") Тогда
		ЭлементОтбора.ВидСравнения = ВидОтбора;
	Иначе
		ЭлементОтбора.ВидСравнения = ВидСравнения[Строка(ВидОтбора)]; //@skip-check statement-type-change
	КонецЕсли;

	ЭлементОтбора.Значение = УстанавливаемоеЗначение;

	Возврат ЭлементОтбора;

КонецФункции
```
Свернуть табличную часть
Теги: 1С,Свернуть,Табличная часть,Желтый Чайник 1С,Колонки

Сворачивает табличную часть по всем колонкам (Числовые колонки при этом суммируются).

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

```1c
// Сворачивает табличную часть по всем колонкам (Числовые колонки при этом суммируются).
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/22
//
// Параметры:
//  ТабличнаяЧасть - ТабличнаяЧасть - ТЧ объекта, которую нужно свернуть
//
// Пример:
// 	СвернутьТабличнуюЧасть(ЭтотОбъект.ТабличнаяЧасть);
// 	//Строки свернуться по значениям колонок, числовые при этом просуммируются
//
Процедура СвернутьТабличнуюЧасть(Знач ТабличнаяЧасть) Экспорт

	Ресурсы = Новый Массив; // Массив из Строка
	Измерения = Новый Массив; // Массив из Строка

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

	ИменаИзмерений = СтрСоединить(Измерения, ",");
	ИменаРесурсов = СтрСоединить(Ресурсы, ",");

	ТабличнаяЧасть.Свернуть(ИменаИзмерений, ИменаРесурсов);

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

Возвращает описание таблицы значений по полному имени таблицы базы данных
Например "Справочник.Валюты" или "РегистрСведений.КурсыВалют"

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

```1c
// Возвращает описание таблицы значений по полному имени таблицы базы данных
// Например "Справочник.Валюты" или "РегистрСведений.КурсыВалют"
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/21
//
// Параметры:
//  ПолноеИмя  - Строка - Полное имя таблицы базы данных
//
// Возвращаемое значение:
//   ТаблицаЗначений
//
Функция СтруктураТаблицыБазы(Знач ПолноеИмя) Экспорт

	ТекстЗапроса = СтрШаблон("ВЫБРАТЬ ПЕРВЫЕ 0 * ИЗ %1", ПолноеИмя);
	СхемаЗапроса = Новый СхемаЗапроса();
	СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);

	Результат = Новый ТаблицаЗначений();
	Для Каждого Колонка Из СхемаЗапроса.ПакетЗапросов.Получить(0).Колонки Цикл

		ВременнаяСтруктура = Новый Структура("Колонки", Неопределено);
		ЗаполнитьЗначенияСвойств(ВременнаяСтруктура, Колонка);
		Если ЗначениеЗаполнено(ВременнаяСтруктура.Колонки) Тогда
			ТипЗначения = Новый ОписаниеТипов("ТаблицаЗначений");
		Иначе
			ТипЗначения = Колонка.ТипЗначения;
		КонецЕсли;

		Результат.Колонки.Добавить(Колонка.Псевдоним, ТипЗначения);

	КонецЦикла;

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

КонецФункции
```
Этот тип является менеджером записи регистра сведений
Теги: 1С,Менеджер записи,Тип,Желтый Чайник 1С,Запись,Регистр сведений

Является ли переданный тип менеджером записи регистра сведений. К сожалению, либо этот вариант, либо тупо проверка представления типа

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

```1c
// Является ли переданный тип менеджером записи регистра сведений
// К сожалению, либо этот вариант, либо тупо проверка представления типа
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/25
//
// Параметры:
//  ТипЗначения - Тип
//
// Возвращаемое значение:
//   Булево
Функция ЭтоМенеджерЗаписиРегистраСведений(Знач ТипЗначения) Экспорт

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

    Возврат ЭтоМенеджерЗаписи;

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

# Примечания

- Возврат ?( НЕ Метаданные.РегистрыСведений.Содержит(Метаданные.НайтиПоТипу(ТипЗначения)), Ложь
, ЭтоМенеджерЗаписи = (Тип("РегистрСведенийМенеджерЗаписи." + Метаданные.НайтиПоТипу(ТипЗначения).Имя) = ТипЗначения) );

- (1) Cthulhu, эммм.....
Зачем так нечитабельно писать код?
Да ещё и дважды искать метаданные...

- (1) Cthulhu, хотя чисто как соревнование по "код в одну строку" - норм 🤣👍

- SeiOkami, там вроде вполне читабельно.
вот - да, единственное что смутило - двойное обращение к одному объекту метаданных.
но - в случае использования без выноса в отдельную функцию - потерь не будет, т.к. экономия на накладных расходах компенсирует.
Таблица Значений Без Null
Теги: 1С,ТаблицаЗначений,Колонка,Null,Желтый Чайник 1С,Скопировать,Тип,Выгрузка,Таблица

Функция возвращает копию переданной таблицы значений, но исключая из всех колонок тип Null
Бывает полезна для обработки выгрузки запроса, в котором у каждой колонки есть тип Null

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

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

	НоваяТаблица = Новый ТаблицаЗначений;
	Для Каждого ТекущаяКолонка Из ТаблицаЗначений.Колонки Цикл
		ОписаниеТипа = Новый ОписаниеТипов(ТекущаяКолонка.ТипЗначения, , "NULL");
        НоваяТаблица.Колонки.Добавить(ТекущаяКолонка.Имя, ОписаниеТипа,
			ТекущаяКолонка.Заголовок, ТекущаяКолонка.Ширина);
    КонецЦикла;

	Для Каждого ТекущаяСтрока Из ТаблицаЗначений Цикл
        ЗаполнитьЗначенияСвойств(НоваяТаблица.Добавить(), ТекущаяСтрока);
    КонецЦикла;

    Возврат НоваяТаблица;

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

# Примечания

- Для тех, кому лень писать ЕСТЬNULL в запросе

- (1) Eremkin Igor, ЕстьNull() никак не изменит тип колонки. И если ты будешь кодом работать с таблицей, то в ней может быть тип Null
Пустое значение типа (Новый Объект)
Теги: 1С,Шаблон,Желтый Чайник 1С,Описание типов,Тип,Значение,Пустое

Возвращает новый объект переданного типа. Универсальный конструктор типов

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

```1c
// Возвращает новый объект переданного типа.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/20
//
// Параметры:
//  Тип - Строка, Тип - Тип или имя типа
//
// Возвращаемое значение:
//  Произвольный
//
// Примеры:
// 	Результат = НовыйОбъект("Структура");
// 	Результат = НовыйОбъект("УсловноеОформлениеКомпоновкиДанных");
// 	Результат = НовыйОбъект("HTTPОтвет");
//
Функция НовыйОбъект(Знач Тип) Экспорт

	Типы = Неопределено;
	Если ТипЗнч(Тип) = Тип("Тип") Тогда
		Типы = Новый Массив; // Массив из Тип
		Типы.Добавить(Тип);
	Иначе
		Типы = Тип;
	КонецЕсли;

	ОписаниеТипа = Новый ОписаниеТипов(Типы);

	Возврат ОписаниеТипа.ПривестиЗначение();

КонецФункции
```
В Конфигураторе, между редактором формы и текстом модуля, можно быстро переключаться без помощи мыши
Теги: 1С,Совет,Конфигуратор

# Примечания

- Только вот при включенном TurboConf Alt+2 не работает 😃

- (1) Smaylukk, есть такое. Я у себя отключил и думал у всех так. Уберу в следующих версиях, конечно Alt+2 важнее 😃
Пока можно отключить в настройках:
Обслуживание ИБ на PostgreSQL с использованием 1С-Обновлятора
Теги: 1С,PostgreSQL,1С-Обновлятор

# Примечания

- я очень уважаю обновлятор. Но продавать то, что можно сделать один раз меньше чем за час (без особых красивостей), и  за 4 с особыми красивостями, с помощью рег.задания и потом просто копировать в любой проект, это как минимум странно.

- Не для Linux - не актуально.
Чтение параметров http-запроса в формате x-www-form-urlencoded в соответствие
Теги: 1С,HttpЗапрос,HttpСервис,Соответствие,x-www-form-urlencoded

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

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

	Результат = Новый Соответствие;
	Тело = РаскодироватьСтроку(Тело, СпособКодированияСтроки.КодировкаURL, "UTF-8");
	Тело = СтрЗаменить(Тело, "+", " ");
	ПарметрыЗначения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Тело, "&");
	Для Каждого Пар Из ПарметрыЗначения Цикл
		мПар = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Пар, "=");
		Если мПар.Количество() > 1 Тогда
			СущЗначениеПараметра = Результат.Получить(мПар[0]);

			//Если в структуре нет такого параметра, просто его добавляем.
			Если СущЗначениеПараметра = Неопределено Тогда
				Результат.Вставить(мПар[0], мПар[1]);
			Иначе
				//Если такой параметр есть и значени его находится в массиве, то добавляем
				//текущий параметр в массив.
				Если ТипЗнч(СущЗначениеПараметра) = Тип("Массив") Тогда
					СущЗначениеПараметра.Добавить(мПар[1]);
					Результат.Вставить(мПар[0], СущЗначениеПараметра);

					//Если это второе значение параметра, то добавляем уже существующее и текущее
					//значение в массив.
				Иначе
					МассивЗначЭтогоПараметра = Новый Массив();
					МассивЗначЭтогоПараметра.Добавить(СущЗначениеПараметра);
					МассивЗначЭтогоПараметра.Добавить(мПар[1]);
					Результат.Вставить(мПар[0], МассивЗначЭтогоПараметра);
				КонецЕсли;
			КонецЕсли;

		КонецЕсли;
	КонецЦикла;

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

КонецФункции
```
Чтение параметров http-запроса в формате x-www-form-urlencoded в структуру
Теги: 1С,HttpЗапрос,x-www-form-urlencoded,HttpСервис

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

```1c
Функция ПолучитьПараметры(Тело)Экспорт

	Результат = Новый Структура;
	Тело = РаскодироватьСтроку(Тело, СпособКодированияСтроки.КодировкаURL, "UTF-8");
	Тело = СтрЗаменить(Тело, "+", " ");
	ПарметрыЗначения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Тело, "&");
	Для Каждого Пар Из ПарметрыЗначения Цикл

		мПар = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Пар, "=");
		Если мПар.Количество() > 1 Тогда
			СущЗначениеПараметра = "";

			Попытка
				Результат.Свойство(мПар[0], СущЗначениеПараметра);
			Исключение
				Продолжить;
			КонецПопытки;

			//Если в структуре нет такого параметра, просто его добавляем.
			Если ПустаяСтрока(СущЗначениеПараметра) Тогда
				Результат.Вставить(мПар[0], мПар[1]);
			Иначе

				//Если такой параметр есть и значени его находится в массиве, то добавляем
				//текущий параметр в массив.
				Если ТипЗнч(СущЗначениеПараметра) = Тип("Массив") Тогда
					СущЗначениеПараметра.Добавить(мПар[1]);
					Результат.Вставить(мПар[0], СущЗначениеПараметра);

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

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

КонецФункции
```
Для веб-сервера IIS можно использовать бесплатные SSL сертификаты Let's Encrypt с автоматическим обновлением
Теги: 1С,IIS,Совет,Администрирование

# Примечания

- Если вы используете другой веб-сервер с Let's Encrypt напишите в комментариях, какие утилиты для получения и обновления сертификата вы используете.

- certbot для unix подобных серверов с Apache или nginx. Я мимокрокодил и работаю с магазинами на Битриксе, если что.

Добавил Павел Коношенко в группу ВК

- acme.sh универсальный скрипт, работает даже на OpenWRT

Добавил John Smith в группу ВК
Разбить число на Кусочки
Теги: 1С

Для параллельного выполнения нужно наиболее "ровно" разделить, например массив, на кусочки.

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

```1c
Функция РазбитьНаКусочки(ОбщееКоличество, ОднаЧасть) Экспорт
	Частей = Цел(ОбщееКоличество / ОднаЧасть) + ?(ОбщееКоличество % ОднаЧасть > 0, 1, 0);

	Частное = ОбщееКоличество / Частей;
	МаксКусок = Цел(Частное) + ?(ОбщееКоличество % Частей > 0, 1, 0);
	Остаток = ОбщееКоличество % МаксКусок;

	Массив = Новый Массив;

	Если Остаток > 0 Тогда
		ОдинКусок = МаксКусок - 1;
		МеньшегоКолва = МаксКусок - Остаток;
		Для ъ = 1 по МеньшегоКолва Цикл
			Массив.Добавить(ОдинКусок);
		КонецЦикла;
	Иначе
		ъ = 1;
	КонецЕсли;

	ОдинКусок = МаксКусок;
	ъъ = ъ;
	Для ъ = ъъ по Частей Цикл
		Массив.Вставить(0, ОдинКусок);
	КонецЦикла;

//	ВсегоВМассиве = 0;
//	Для Каждого Элем из Массив Цикл
//		ВсегоВМассиве = ВсегоВМассиве + Элем;
//	КонецЦикла;

	Возврат Массив;
КонецФункции  // РазбитьНаКусочки

Функция РазбитьСписокТоваров(Знач списТоваров, МаксТоваров = 150)
	#Если Сервер И Не Сервер Тогда  // для типизации в конфигураторе
		списТоваров = Новый СписокЗначений;
	#КонецЕсли

	мТовары = списТоваров.ВыгрузитьЗначения();

	КоличествоТоваров = мТовары.Количество();
	мКусочки = РазбитьНаКусочки(КоличествоТоваров, МаксТоваров);

	ммТовары = Новый Массив;
	Для Каждого ЧислоТоваров Из мКусочки Цикл
		мПодСписок = Новый Массив;
		Для ъ = 1 По ЧислоТоваров Цикл
			мПодСписок.Добавить(мТовары[0]);
			мТовары.Удалить(0);
		КонецЦикла;

		ммТовары.Добавить(мПодСписок);
	КонецЦикла;

	Возврат ммТовары;
КонецФункции  // РазбитьСписокТоваров
```
Заполнение формы объекта без записи в БД
Теги: 1С

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

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

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

	Форма = ПолучитьФорму("Документ.ПродажаТоваровУслуг.Форма.ФормаДокумента");
	ДанныеФормы = Форма.Объект;
	ЗаполнитьНаСервере(ДанныеФормы);
	КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
	Форма.Открыть();

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

&НаСервере
Процедура ЗаполнитьНаСервере(НовыйОбъект)
	НовыйОбъект.Контрагент = Справочники.Контрагенты.НайтиПоКоду("000000005");
КонецПроцедуры
```