Как передать Таблицу Значений в Динамический Список?

Публикация № 1742427 17.10.22

Разработка - Механизмы платформы 1С

ТаблицаЗначений ДинамическийСписок УправляемаяФорма

До версии 8.3.9 ответ однозначен - никак. Потом были добавлены временные таблицы для динамических списков, но официальный ответ остался неизменным - никак. Ну а если очень надо?

Зачем?

Динамический Список - это очень мощный и удобный инструмент пользователя для работы с данными базы. Но у него есть ограничение - работа только с данными базы. Хотя иногда хочется их дополнительно "обогатить".

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

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

Мой опыт и анализ форумов по ключевым словам показывают, что есть две основные альтернативы для решения данного класса задач:

  1. Отказаться от Динамического Списка в пользу тандема из табличного поля на форме и таблицы значений как реквизит формы (реже дерева значения).
  2. Применяя Динамический Список, получать требуемые произвольные данные из служебного регистра сведений (разработчики даже делятся лайфхаками по использованию своих номеров сеанса в качестве измерений, чтобы не мешать работе пользователей избыточными блокировками).

Но первый вариант сильно ограничивает возможности для пользователя и для "очевидных вещей" потребуется написать много не очевидного для пользователей кода (что потом обычно вызывает удивление на этапе оплаты трудозатрат). Второй вариант хоть и решает задачу, но замедляет общую скорость работы из-за постоянного взаимодействия с СУБД и затрат на поддержку транзакций при записи служебной информации (особенно, если разработчик плохо продумал структуру хранения).

 

Почему нет?

Обычно в запросах для передачи Таблицы Значений для заполнения Временной Таблицы мы используем установку этой таблицы в качестве параметра, а далее используем этот параметр в секции ИЗ нашей Временной Таблицы. Если мы попробуем сделать такое с Динамическим Списком, то получим ошибку еще при попытке внести данные в конструкторе этого реквизита формы:

Проблема заключена в типе ТаблицаЗначений ('{http://v8.1c.ru/8.1/data/core}ValueTable'), который необъяснимо невзлюбили и запретили перемещать между клиентом и сервером (состояние на версию 8.3.22).

По этой причине уже десятилетие разработчики для передачи данных между серверным и клиентским контекстами выкручиваются с помощью массива структур, где ключи повторяют колонки исходной таблицы. Но в случае с Динамическим Списком - это не подходит. Ведь сама попытка использования Таблицы Значений в качестве параметра, предполагает её сохранение в компоновщике настроек, но компоновщик настроек Динамического Списка обязан свободно перемещаться между серверным и клиентским контекстом и потому не имеет права содержать в себе элементы типа ТаблицаЗначений.

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


 

Что нам доступно?

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

Так же, несмотря на то, что Динамический Список использует технологию СКД, но он использует её ограниченно - в качестве источника данных можно передавать исключительно текст запроса. Никаких Таблиц Значений, Табличных Частей, Выборок из Результатов Запроса и тому подобного!

Итого мы имеем - нам доступно использование Временных Таблиц и нам доступно использование параметров, которые могут быть примитивных или ссылочных типов.

В принципе этого достаточно для решения нашей задачи. Напомню, что в описании запроса обязательной секцией является только ВЫБРАТЬ, но вовсе не ИЗ. Так же напомню, что ТаблицаЗначений - это всего лишь двухмерный массив, где на пересечении строк и колонок хранятся значения, которым разрешено быть параметрами Динамического Списка.

 

Описание концепции

Если нельзя напрямую использовать Таблицу Значений, то будем ее эмулировать с помощью программной верстки текста Временной Таблицы, где для каждой строки будет подзапрос, в котором в секции ВЫБРАТЬ будут перечислены параметры запроса с псевдонимами соответствующих колонок. В результате выполнения такого запроса мы получим требуемую Временную Таблицу, которой "обогатим" данные основного запроса.

Следовательно, мы можем написать функцию для общего модуля, которой на вход передадим Таблицу Значений, а на выходе получим текст запроса для Временной Таблицы и коллекцию параметров этого запроса с их значениями. Чтобы получить универсальный механизм, дополнительно передадим в эту функцию название для Временной Таблицы и текст запроса заглушки, который следует использовать для пустых таблиц.

В модуле формы с Динамическим Списком мы можем написать процедуру, которая будет передавать в общий модуль требуемые параметры и получать на выход данные для модификации Динамического Списка. Данную процедуру можно вызывать только раз при создании формы, если это была подчиненная форма с фиксированной Таблицей Значений, или при каждом редактировании данных в элементах формы, от значения которых должен зависеть Динамический Список.

Чтобы облегчить нашу работу с Динамическим Списком, в режиме редактора формы сразу зададим запрос-заглушку, который будет делать пустую Временную Таблицу. Тут же сделаем объединение основного источника с заглушкой и выполним то, ради чего все и затевали - добавим новые колонки или изменим данные в существующих. Потом в процедуре доработки Динамического Списка по маркеру ";" (разделитель запросов в пакете) мы с легкостью разделим исходный текст на заменяемую секцию Временной Таблицы и основную секцию, которую соединим с результатами функции общего модуля. Останется только установить новые параметры и получить требуемый результат.

 

Реализация

Для демонстрации выберем задачу "видеть актуальные складские остатки во время заполнения документа". В качестве данных нам потребуется справочник "Товары" и два документа - "Приход товаров" и "Расход товаров". Складские остатки будем фиксировать в регистре накопления "Наличие товаров" (оба документа будут регистраторами).

Пусть при создании или редактировании документа "Расход товара" мы хотим видеть актуальные складские остатки (остатки на текущую дату), которые будут уменьшаться на позиции, которые уже введены в документ. При этом механизм должен работать и для новых документов и для ранее записанных. При этом учтем, что документ может быть проведен и уже сделал движения расхода.

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

 

Далее, согласно концепции, нужно сделать запрос для Динамического Списка с заглушкой. Для текущей задачи с учетом требований к актуальности остатков независимо от состояния документа запрос будет иметь следующий вид:

 

Поскольку нам нужно компенсировать возможные движения документа, то передадим в Динамический Список ссылку на данный документ (даже если она пустая). Так же для реализации "подбора в документ" сделаем в динамическом списке обработку события выбора, по которому будем заполнять состав документа. Дополнительно отследим изменение содержимого документа, чтобы сообщить динамическому списку новые настройки.

 

 

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

 

Скачать файлы

Наименование Файл Версия Размер
Тестовая база с демонстрацией концепции

.dt 78,41Kb
7
.dt 78,41Kb 7 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. SlavaKron 17.10.22 10:57 Сейчас в теме
В функции ПолучитьВременнуюТаблицуИзТаблицыЗначений зачем формировать временную таблицу из вложенного запроса? Можно же сразу строки помещать во временную таблицу:
ВЫБРАТЬ
	&ЗначениеТЗ_1 КАК Поле1, &ЗначениеТЗ_2 КАК Поле2, &ЗначениеТЗ_3 КАК Поле3
ПОМЕСТИТЬ ВТ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	&ЗначениеТЗ_4, &ЗначениеТЗ_5, &ЗначениеТЗ_6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	&ЗначениеТЗ_7, &ЗначениеТЗ_8, &ЗначениеТЗ_9

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	&ЗначениеТЗ_10, &ЗначениеТЗ_11, &ЗначениеТЗ_12
Показать


В целом, способ, наверно, имеет право на существование, если количество строк ТЗ не больше 2-3 десятков.
2. Dementor 944 17.10.22 11:02 Сейчас в теме
(1) это был мой первый дизайн ))
Но если закинуть во внутреннюю таблицу, то облегчается программная верстка - первая строка, где помещаем во временную таблицу, и последующие становятся идентичны и не требуют флагов.
6. Serg2000mr 45 26.10.22 14:21 Сейчас в теме
(1) Вот мой вариант реализации такого алгоритма:

https://infostart.ru/public/1748114/

Проверено на 2000 строк - скорость неплохая
Прикрепленные файлы:
user672696_ntl1973; Dementor; +2 Ответить
3. user1209971 71 18.10.22 22:10 Сейчас в теме
Для этих целей лучше использовать обработчик Динамического списка ПриПолученииДанныхНаСервере
https://xn----1-bedvffifm4g.xn--p1ai/news/2017-12-26-many-values-in-one-cell/
4. Dementor 944 19.10.22 10:00 Сейчас в теме
(3) обычно я именно так и делал, но!

У меня была реальная задача с фильтрацией строк, по которым был остаток в регистре накопления, и при таком подходе я не мог дополнительно скрыть строки - только выводить их с нулями. Или может быть обратная задача при складских перемещениях или взаимозачетах - нужно вернуть на динамический список строки, которые ранее отфильтровались в секции ГДЕ запроса - с методом ПриПолученииДанныхНаСервере такие задачи не имеют решения.
5. PersianovMS 23.10.22 13:02 Сейчас в теме
Коллеги, здравствуйте.
Недавно занимался как раз таким же вопросом - и пришёл к такому же решению, только приходилось делать ДС из чисто таблицы значений, не похожей ни на один объект конфигурации. Поэтому, чтобы сохранить возможность отборов, пришлось типизировать колонки по колонкам таблицы значений, а не объекта. Получилась такая функция.
Минус - в ДС не работает отбор по "Подобно".
На паре тысяч строк тормозит, но работает.

&НаСервере
// Преобразует таблицу значений в динамический список. ВНИМАНИЕ! Колонки ДС не обновляются, их надо обновлять функцией СоэдатьКолонкиТаблицы.
// Параметры:
// ДинСписок - Динамический список - Реквизит формы, приёмник
// ТабИсточник - Таблица значений - Источник данных. Не проверялось для больших таблиц.
// ТипизироватьКолонки - Строка - Список через запятую имён колонок или "ВСЕ". Если пустая строка (по умолчанию) - ни одна колонка не типизируется.
// Типизация влияет на применение, например, вида сравнения "в иерархии".
// ИмяПоляКлюча - Строка - Имя специального поля поле с уникальным номером строки. По умолчанию "КлючСтроки". Если пустое - поле ключа не создаётся
Процедура ДинамическийСписокИзТаблицыЗначений(ДинСписок, ТабИсточник, ТипизироватьКолонки = "", ИмяПоляКлюча = "КлючСтроки") Экспорт
ПерваяСтрока = Истина;
#Область ТИПИЗАЦИЯ
Если ТипизироватьКолонки <> "" Тогда
#Область ТАБЛИЦА_ПРИМЕРНЫХ_ЗНАЧЕНИЙ
ОбозначениеПараметра = Новый Цвет;
ТабЗнТипы = ТабИсточник.СкопироватьКолонки();
ТабЗнТипы = Новый ТаблицаЗначений;
Для каждого Колонка Из ТабИсточник.Колонки Цикл
ТабЗнТипы.Колонки.Добавить(Колонка.Имя);
КонецЦикла;
ТабЗнТипы.Добавить();
СтруктураТипизируемыхКолонок = Новый Структура(ТипизироватьКолонки);
Для каждого Колонка Из ТабИсточник.Колонки Цикл
ИмяКолонки = Колонка.Имя;
ТекТипы = Колонка.ТипЗначения.Типы();
Если ТекТипы.Количество() И ?(ТипизироватьКолонки = "ВСЕ", Истина, СтруктураТипизируемыхКолонок.Свойство(ИмяКолонки)) Тогда
ЁХ = 0;
Для каждого Тек_Тип Из ТекТипы Цикл
Если ЁХ = ТабЗнТипы.Количество() Тогда
ТабЗнТипы.Добавить();
КонецЕсли;
ТабЗнТипы[ЁХ][ИмяКолонки] = ПримерноеЗначение(
Тек_Тип,
Колонка.ТипЗначения.КвалификаторыЧисла,
Колонка.ТипЗначения.КвалификаторыСтроки,
Колонка.ТипЗначения.КвалификаторыДаты);
ЁХ = ЁХ + 1;
КонецЦикла;
Иначе
ТабЗнТипы[0][ИмяКолонки] = ОбозначениеПараметра;
КонецЕсли;
КонецЦикла;
#КонецОбласти
#Область ТЕКСТ_ТИПИЗАЦИИ
ТекстТипизации = "";
Для каждого Строчка Из ТабЗнТипы Цикл
ТекстПоСтроке = "";
Для каждого Колонка Из ТабЗнТипы.Колонки Цикл
ТекЗнч = Строчка[Колонка.Имя];
ТекстПоСтроке = ТекстПоСтроке + "," + Символы.ПС
+ ?(ЗначениеЗаполнено(ТекЗнч) И ТекЗнч <> ОбозначениеПараметра, ТекЗнч, "&ПараметрПусто")
+ ?(ПерваяСтрока, " КАК " + Колонка.Имя, "");
КонецЦикла;
Если ЗначениеЗаполнено(ИмяПоляКлюча) Тогда
ТекстПоСтроке = ТекстПоСтроке + "," + Символы.ПС + "0"
+ ?(ПерваяСтрока, " КАК " + ИмяПоляКлюча, "");
КонецЕсли;
ПерваяСтрока = Ложь;
ТекстТипизации = ТекстТипизации + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + "ВЫБРАТЬ" + Сред(ТекстПоСтроке, 2) + Символы.ПС + "ГДЕ ЛОЖЬ" + Символы.ПС;
КонецЦикла;
#КонецОбласти
КонецЕсли;
#КонецОбласти
#Область ФОРМИРОВАНИЕ_ТЕКСТА_И_ПАРАМЕТРОВ_ЗАПРОСА
#Область ТЕКСТ_ПАРАМЕТРОВ_И_ПАРАМЕТРЫ
ЁХ = 0;
ТекстЗапроса = ТекстТипизации;
НовыеПараметры = Новый Структура;
Для каждого Строчка Из ТабИсточник Цикл
ТекстПоСтроке = "";
Для каждого Колонка Из ТабЗнТипы.Колонки Цикл
ИмяКолонки = Колонка.Имя;
ИмяПараметра = "Строчка" + ?(ЁХ = 0, "0", Формат(ЁХ, "ЧГ=0")) + ИмяКолонки;
ТекЗнч = Строчка[Колонка.Имя];
НовыеПараметры.Вставить(ИмяПараметра, ТекЗнч);
ТекстПоСтроке = ТекстПоСтроке + "," + Символы.ПС + "&" + ИмяПараметра
+ ?(ПерваяСтрока, " КАК " + Колонка.Имя, "");
КонецЦикла;
Если ЗначениеЗаполнено(ИмяПоляКлюча) Тогда
ТекстПоСтроке = ТекстПоСтроке + "," + Символы.ПС + ?(ЁХ = 0, "0", Формат(ЁХ, "ЧГ=0"))
+ ?(ПерваяСтрока, " КАК " + ИмяПоляКлюча, "");
КонецЕсли;
ПерваяСтрока = Ложь;
ТекстЗапроса = ТекстЗапроса + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + "ВЫБРАТЬ" + Сред(ТекстПоСтроке, 2) + Символы.ПС;
ЁХ = ЁХ + 1;
КонецЦикла;
#КонецОбласти
#Область БАЗОВЫЙ_И_ФИНАЛЬНЫЙ_ТЕКСТ
ДинСписок.ТекстЗапроса = Сред(ТекстЗапроса, 16);
Если Найти(ДинСписок.ТекстЗапроса, "&ПараметрПусто") > 0 Тогда
ДинСписок.Параметры.УстановитьЗначениеПараметра("ПараметрПусто", Неопределено);
КонецЕсли;
Для каждого КиЗ Из НовыеПараметры Цикл
ДинСписок.Параметры.УстановитьЗначениеПараметра(КиЗ.Ключ, КиЗ.Значение);
КонецЦикла;
#КонецОбласти
#КонецОбласти
КонецПроцедуры // ДинамическийСписокИзТаблицыЗначений

&НаСервере
// Возвращает примерное значение указанного типа. Для строки, даты и числа это будет значение указанной квалификации, состоящее из единиц,
// для ссылки - пустая ссылка, для остальных = приведение единицы к описанию типа.
// Параметры:
// Источник - Тип - Значение которого надо получить
// КвалификаторЧисла - КвалификаторыЧисла - Квалификатор типа
// КвалификаторСтроки - КвалификаторыСтроки - Квалификатор типа
// КвалификаторДаты - КвалификаторыДаты - Квалификатор типа
// Строкой - Булево - Представить значение в виде строки для текста запроса
// Возвращаемое значение:
// Произвольный - Примерное значение указанного типа
Функция ПримерноеЗначение(Источник, КвалификаторЧисла = "", КвалификаторСтроки = "", КвалификаторДаты = "", Строкой = Истина) Экспорт
Результат = Новый Соответствие;
Если Источник = Тип("Число") Тогда
Если КвалификаторЧисла = "" ИЛИ КвалификаторЧисла.Разрядность = 0 Тогда
Результат = 1;
Иначе
Результат = 0;
Исходная = 1;
Для ЁХ = 1 По КвалификаторЧисла.РазрядностьДробнойЧасти Цикл
Исходная = Исходная / 10;
Результат = Результат + Исходная;
КонецЦикла;
Исходная = 1;
Для ЁХ = 1 По КвалификаторЧисла.Разрядность - КвалификаторЧисла.РазрядностьДробнойЧасти Цикл
Результат = Результат + Исходная;
Исходная = Исходная * 10;
КонецЦикла;
Если КвалификаторЧисла.ДопустимыйЗнак = ДопустимыйЗнак.Любой Тогда
Результат = - Результат;
КонецЕсли;
КонецЕсли;
Если Строкой Тогда
Результат = СтрЗаменить(ФОРМАТ(Результат, "ЧГ=0"), ",", ".");
КонецЕсли;
ИначеЕсли Источник = Тип("Булево") Тогда
Если Строкой Тогда
Результат = "ИСТИНА";
Иначе
Результат = Истина;
КонецЕсли;
ИначеЕсли Источник = Тип("Строка") Тогда
Результат = "";
Если КвалификаторСтроки <> "" Тогда
Для ЁХ = 1 По КвалификаторСтроки.Длина Цикл
Результат = Результат + "1";
КонецЦикла;
КонецЕсли;
Если Строкой Тогда
Результат = """" + Результат + """";
КонецЕсли;
ИначеЕсли Источник = Тип("Дата") ИЛИ Источник = Тип("СтандартнаяДатаНачала") ИЛИ Источник = Тип("СтандартныйПериод") Тогда
Результат = '11111111111111';
мТипов = Новый Массив;
мТипов.Добавить(Тип("Дата"));
ТекОТ = ?(КвалификаторДаты = "", Новый ОписаниеТипов(мТипов), Новый ОписаниеТипов(мТипов,,, КвалификаторДаты));
ИсхДата = ТекОТ.ПривестиЗначение(Результат);
Если Источник = Тип("СтандартнаяДатаНачала") Тогда
Результат = Новый СтандартнаяДатаНачала;
Результат.Дата = ИсхДата;
Если Строкой Тогда
Результат = Неопределено;
КонецЕсли;
ИначеЕсли Источник = Тип("СтандартныйПериод") Тогда
Результат = Новый СтандартныйПериод;
Результат.ДатаНачала = ИсхДата;
Результат.ДатаОкончания = ИсхДата;
Если Строкой Тогда
Результат = Неопределено;
КонецЕсли;
Иначе
Результат = ИсхДата;
Если Строкой Тогда
ТекГод = Год(Результат);
ТекМес = Месяц(Результат);
ТекДень = День(Результат);
ТекЧас = Час(Результат);
ТекМин = Минута(Результат);
ТекСек = Секунда(Результат);
Результат = "ДАТАВРЕМЯ("
+ ?(ТекГод = 0, 1, Формат(ТекГод, "ЧГ=0")) + "," +
+ ?(ТекМес = 0, 1, ТекМес) + "," +
+ ?(ТекДень = 0, 1, ТекДень) + "," +
+ ?(ТекЧас = 0, 1, ТекЧас) + "," +
+ ?(ТекМин = 0, 1, ТекМин) + "," +
+ ?(ТекСек = 0, 1, ТекСек) + ")";
КонецЕсли;
КонецЕсли;
Иначе
Если Строкой Тогда
Результат = ИмяТаблицыОбъектаПоТипу(Источник);
Если Результат = Неопределено Тогда
Результат = "НЕОПРЕДЕЛЕНО";
Иначе
Результат = "ЗНАЧЕНИЕ(" + Результат + ".ПустаяСсылка)"
КонецЕсли;
Иначе
мТипов = Новый Массив;
мТипов.Добавить(Источник);
ТекОТ = Новый ОписаниеТипов(мТипов);
Результат = ТекОТ.ПривестиЗначение(1);
КонецЕсли;
КонецЕсли;
Возврат Результат
КонецФункции // ПримерноеЗначение

Функция ИмяТаблицыОбъектаПоТипу(Тип_, Полностью = Ложь) Экспорт
МетаХ = Метаданные.НайтиПоТипу(Тип_);
Если МетаХ = Неопределено Тогда
Результат = Неопределено
ИначеЕсли Полностью = "Метаданные" Тогда
Результат = МетаХ;
Иначе
ТекИмя = МетаХ.Имя;
Полная = Новый Структура;
НуженМенеджер = (Найти("," + Полностью + ",", ",Менеджер,") > 0) ИЛИ (Полностью = Истина);
Если Метаданные.Документы.Содержит(МетаХ) Тогда
СтрокаТипа = "Документ";
Если НуженМенеджер Тогда
Полная.Вставить("Менеджер", Документы[ТекИмя]);
КонецЕсли;
ИначеЕсли Метаданные.Справочники.Содержит(МетаХ) Тогда
СтрокаТипа = "Справочник";
Если НуженМенеджер Тогда
Полная.Вставить("Менеджер", Справочники[ТекИмя]);
КонецЕсли;
ИначеЕсли Метаданные.Перечисления.Содержит(МетаХ) Тогда
СтрокаТипа = "Перечисление";
Если НуженМенеджер Тогда
Полная.Вставить("Менеджер", Перечисления[ТекИмя]);
КонецЕсли;
ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(МетаХ) Тогда
СтрокаТипа = "ПланВидовХарактеристик";
Если НуженМенеджер Тогда
Полная.Вставить("Менеджер", ПланыВидовХарактеристик[ТекИмя]);
КонецЕсли;
ИначеЕсли Метаданные.ПланыСчетов.Содержит(МетаХ) Тогда
СтрокаТипа = "ПланСчетов";
Если НуженМенеджер Тогда
Полная.Вставить("Менеджер", ПланыСчетов[ТекИмя]);
КонецЕсли;
ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(МетаХ) Тогда
СтрокаТипа = "ПланВидовРасчета";
Если НуженМенеджер Тогда
Полная.Вставить("Менеджер", ПланыВидовРасчета[ТекИмя]);
КонецЕсли;
ИначеЕсли Метаданные.БизнесПроцессы.Содержит(МетаХ) Тогда
СтрокаТипа = "БизнесПроцесс";
Если НуженМенеджер Тогда
Полная.Вставить("Менеджер", БизнесПроцессы[ТекИмя]);
КонецЕсли;
ИначеЕсли Метаданные.Задачи.Содержит(МетаХ) Тогда
СтрокаТипа = "Задача";
Если НуженМенеджер Тогда
Полная.Вставить("Менеджер", Задачи[ТекИмя]);
КонецЕсли;
Иначе
Результат = "";
КонецЕсли;
Если ?(Полностью = Истина, Истина, ?(Полностью = Ложь, Истина, Найти("," + Полностью + ",", ",ИмяТаблицы,") > 0)) Тогда
Полная.Вставить("ИмяТаблицы", СтрокаТипа + "." + ТекИмя);
КонецЕсли;
Если ?(Полностью = Истина, Истина, Найти("," + Полностью + ",", ",Текст,") > 0) Тогда
Полная.Вставить("Текст", СтрокаТипа + ТекИмя);
КонецЕсли;
Если ?(Полностью = Истина, Истина, Найти("," + Полностью + ",", ",Метаданные,") > 0) Тогда
Полная.Вставить("Метаданные", МетаХ);
КонецЕсли;
Результат = Полная;
Если Результат.Количество() = 1 Тогда
Для каждого КиЗ Из Полная Цикл
Результат = КиЗ.Значение;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат Результат
КонецФункции // ИмяТаблицыОбъектаПоТипу()
7. lexushka 05.11.22 19:23 Сейчас в теме
Как сказал наш коллега на Мисте, я как все 1с-ники ленив
Поэтому мой код для ВЫРАЗИТЬ несколько короче


Функция ПолучитьВременнуюТаблицуИзТаблицыЗначений(Таблица, НазваниеВременнойТаблицы, ТекстПустойТаблицы) Экспорт

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

	ВыбранныеПоля = Новый Массив;
	Для каждого Колонка Из Таблица.Колонки Цикл
		ВыбранныеПоля.Добавить(Колонка.Имя);
	КонецЦикла;
	
	НомерПараметра = 1;
	СтрокиВложенногоЗапроса = Новый Массив;
	Для каждого СтрокаТаблицы Из Таблица Цикл
		КолонкиВложенногоЗапроса = Новый Массив;
		Для каждого ВыбранноеПоле Из ВыбранныеПоля Цикл
			ИмяПеременной = "ЗначениеТЗ_" + Формат(НомерПараметра, "ЧН=; ЧГ=");
			Результат.Параметры.Вставить(ИмяПеременной, СтрокаТаблицы[ВыбранноеПоле]);
			
			//Добавление ВЫРАЗИТЬ КАК
			Если ЗначениеЗаполнено(СтрокаТаблицы[ВыбранноеПоле]) Тогда
				Если Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТаблицы[ВыбранноеПоле])) = Неопределено
					Тогда 
					СтрокаКАК = Строка(ТипЗнч(СтрокаТаблицы[ВыбранноеПоле]));
				Иначе          
					СтрокаКАК = Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТаблицы[ВыбранноеПоле])).ПолноеИмя();
				КонецЕсли;
				ТекстПараметра = "ВЫРАЗИТЬ(&" + ИмяПеременной + " КАК " + СтрокаКАК + ")";
				
			Иначе
				ТекстПараметра = "&" + ИмяПеременной;
			КонецЕсли;
			КолонкиВложенногоЗапроса.Добавить(ТекстПараметра + " КАК " + ВыбранноеПоле);
			//
			
			//КолонкиВложенногоЗапроса.Добавить("&" + ИмяПеременной + " КАК " + ВыбранноеПоле);
			НомерПараметра = НомерПараметра + 1;
		КонецЦикла;
		СтрокиВложенногоЗапроса.Добавить(
		"ВЫБРАТЬ
		|	" + СтрСоединить(КолонкиВложенногоЗапроса, ",
		|	"));
	КонецЦикла;
	
	Результат.Текст = 
		"ВЫБРАТЬ
	|	" + СтрСоединить(ВыбранныеПоля, ", ") + "
	|ПОМЕСТИТЬ " + НазваниеВременнойТаблицы + "
	|ИЗ
	|(" + 
    СтрСоединить(СтрокиВложенногоЗапроса, "
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|") + ") КАК " + НазваниеВременнойТаблицы;
	
	Возврат Результат;
Показать


КонецФункции // ПолучитьВременнуюТаблицуИзТаблицыЗначений()


Вроде как работает
Dementor; +1 Ответить
8. Dementor 944 06.11.22 15:11 Сейчас в теме
9. perepetulichka 876 11.01.23 15:29 Сейчас в теме
Получилось, отлично, спасибо ❤️
Dementor; +1 Ответить
Оставьте свое сообщение

См. также

Сколько стоит слово Знач в клиент-серверных вызовах?

Механизмы платформы 1С HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

18.12.2022    1627    user1373370    2    

16

Гонка конфигураторов с помощью экзекутора

Инструментарий разработчика DevOps и автоматизация разработки Механизмы платформы 1С Платформа 1С v8.3 Абонемент ($m)

Выгружать конфигурацию в файлы в последнее время стало супер модно. Контроль версий, Git, CI/CD и вот это вот все. Исходники как тексты сегодня нужны всем. Но возникают вопросы: а каким методом лучше и быстрее выгружать конфигурацию в файлы, а какая версия платформы справляется с этой задачей оперативнее? Моя статья постарается ответить на эти вопросы. Как говорится, заставим попотеть ваши конфигураторы. С помощью 1С Исполнителя 2.0 мы выгрузим конфигурацию ЗУП, используя платформу пяти версий, от 8.3.18 до 8.3.22.

1 стартмани

16.11.2022    3506    infosoft-v    40    

44

Перечень множественных значений в ячейке динамического списка. Как стало и как было

Механизмы платформы 1С Платформа 1С v8.3 План видов характеристик Абонемент ($m)

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

1 стартмани

20.09.2022    3250    Alxby    9    

47

Что не так с таблицами формы?

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Почему при редактирования строки таблицы нельзя отказаться от изменений? Почему на верхнем уровне дерева можно ввести только один узел? Ответ на эти и другие вопросы один - потому что 1С :) Однако не все так плохо! Возможностей кастомизации в платформе 1С вполне достаточно, чтобы улучшить работу с этим элементом и снять некоторые ограничения.

1 стартмани

19.09.2022    1807    kalyaka    3    

22

Программная работа с типовыми формами истории данных

Механизмы платформы 1С Платформа 1С v8.3 Абонемент ($m)

Попалась по работе интересная задачка - включить для регистра сведений историю изменений и сделать собственные кнопки открытия стандартных форм истории. Информации на эту тему особо не нашлось, поэтому решил зафиксировать этот кусочек в виде небольшой статьи.

1 стартмани

07.07.2022    1428    zeltyr    5    

19

Если хочется функционального программирования с функциями высшего порядка и map, filter, reduce

Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Абонемент ($m)

Как известно, 1С не поддерживает парадигму функционального программирования (если не учитывать обработчики оповещений). Но часть элементов этого самого функционального программирования можно эмулировать. В статье рассмотрен способ такой эмуляции и приложена конфигурация с реализацией.

1 стартмани

07.07.2022    2556    Alxby    42    

19

Точка останова с условием. Приемы и хитрости использования

Механизмы платформы 1С Платформа 1С v8.3 Абонемент ($m)

“Точка останова с условием“ - применима в самых разнообразных ситуациях, и грамотное её применение экономит много времени разработчика 1С.

1 стартмани

10.06.2022    5139    Onwardv    8    

58

Использование HTML Редактора whizzywig в 1С 8.2 и 1С 8.3 платформах

Механизмы платформы 1С Платформа 1С v8.3 Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

В статье будут разобраны способы использования визуального HTML Редактора whizzywig в 1С 8.2 и 1С 8.3, который существенно меньше по размерам, чем TinyMCE, но при этом обладает большими возможностями. Показано достоинство этого редактора. Приведены обработки, которые работают как на компьютерной платформе, так и пример реализации обработки, которая предназначена для мобильной платформы. Решение испытывалось на платформах 1С 8.2.12 и 8.3.20, и мобильном клиенте 8.3.19.59.

2 стартмани

12.04.2022    1035    user1206119    2    

3

Использование HTML Редактора NicEdit в 1С 8.2 и 1С 8.3 платформах

Механизмы платформы 1С Платформа 1С v8.3 Мобильная платформа Платформа 1C v8.2 Абонемент ($m)

В статье будут разобраны способы использования визуального HTML Редактора NicEdit в 1С 8.2 и 1С 8.3, который существенно меньше по размерам, чем TinyMCE. Показано достоинство этого редактора. Приведены обработки, которые работают как на компьютерной платформе, так и пример реализации обработки, которая предназначена для мобильной платформы. Решение испытывалось на платформах 1С 8.2.12 и 8.3.20, и мобильном клиенте 8.3.19.59.

2 стартмани

11.04.2022    1562    user1206119    7    

5

Работа с абстрактным массивом

Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Россия Абонемент ($m)

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

1 стартмани

07.07.2021    6657    kalyaka    57    

31

Семеро одного не ждут? Асинхронное исследование асинхронности

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Все уже, наверное, знают о появлении в новых версиях платформы асинхронных функций и конструкций Асинх/Ждать. Многие, возможно, уже их используют. Но что будет, если создать свои асинхронные функции, запустить и не дожидаться окончания их выполнения? Неужели можно запустить несколько процессов параллельно?

1 стартмани

08.06.2021    9912    Alxby    55    

59

Модель запроса

Универсальные функции Платформа 1С v8.3 Запросы Конфигурации 1cv8 Россия Абонемент ($m)

Работа с текстом запроса напрямую не позволяет просто обратиться к определенному полю, таблице или условию. Однако, работая со схемой, можно добавить к существующему условию новое или вообще включить его в состав другой группы. Как ни странно, в типовых решениях часто можно встретить код работы с текстом запроса наряду с использование схемы. Возможно появление удобной библиотеки или нового объектного подхода позволит отказаться от работы с текстом совсем, а код построения запроса будет аутентичен исходному запросу, но без избыточности и доступный для простой модификации.

1 стартмани

01.03.2021    5158    kalyaka    26    

47

Строковые отборы в 1С

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

14.12.2020    9965    lastcontra    4    

0

Загрузка, скачивание, удаление файлов с помощью НачатьПомещениеФайлаНаСервер() и НачатьПолучениеФайлаССервера()

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

В платформе 8.3.15 появились новые методы НачатьПомещениеФайлаНаСервер() и НачатьПолучениеФайлаССервера(). В данной статье рассмотрено готовое решение проверенное и прекрасно работающее на тонком и веб-клиенте.

1 стартмани

25.07.2020    26168    Flashill    18    

55

Сохранение настроек колонок

Работа с интерфейсом Универсальные функции Платформа 1С v8.3 Абонемент ($m)

Сохранение настроек колонок табличных полей. Получение имени формы из модуля формы. Для обычных форм.

1 стартмани

10.07.2020    2771    Arc    1    

5

Склонение словочетаний

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Рассмотрены возможные инструменты для склонения словосочетаний разных форм: ФИО, произвольные слова, слова с числительными и разными форматами чисел.

1 стартмани

22.06.2020    3656    PeskovOleg    1    

3

Отправка уведомлений с помощью командной строки, Оповещения с сервера на клиент с помощью командной строки

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Отправка уведомлений с помощью команды командной строки msg. Оповестить пользователей из серверного модуля или регламентного задания, с помощью командной строки msg.

1 стартмани

05.03.2020    10630    user5300    3    

42

Удаление записи из табличной части в режиме без использования модальности

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Всем привет! Появилась необходимость в написании кода удаления записи из табличной части с обратной связью в режиме без использования модальности. Но как правильно сделать нигде не нашел. Предлагаю свой вариант на растерзание.

1 стартмани

01.03.2020    3453    vaganovsergey    2    

0

Универсальные функции: разложение произвольной строки адреса в структуру

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Процедуры и функции раскладывают произвольную строку адрес в структуру по ключевым словам.

1 стартмани

30.12.2019    7980    vik070777    12    

18

Пауза на платформе 1С, очень нативная и очень бережная к ресурсам

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Иногда необходимо установить паузу при выполнении программных алгоритмов. К сожалению, платформа 1С не имеет решения на уровне глобального контекста, поэтому приходится разработчику придумывать "костыли и велосипеды". Решения, которые "общеприняты": либо используют внешние библиотеки (VBS, WS, ping и пр.), либо нещадно используют ресурсы (бесконечный цикл и т.п.). Хочу предложить еще одно решение, основанное на механизме управляемых блокировок платформы 1С. Итак, приступим:

1 стартмани

25.11.2019    7359    Sibars    65    

11

Полное копирование одной формы в другую

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Однажды я столкнулся с необходимостью открыть форму ЛЮБОГО документа с определенными изменениями, не зависящими от структуры объекта (например, заблокировать все кнопки). В интернете решения я не нашел. Обычно на форумах на запросы подобного рода отвечают чем-то вроде "покажи первоначальную задачу, а не спрашивай как реализовать то, что ты придумал". Тем не менее, мне стало интересно, как это можно сделать.

1 стартмани

03.10.2019    11794    nekit_rdx    26    

36

Описание формата внутреннего представления данных 1С в контексте обмена данными

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Фирма 1С не рекомендует использовать внутреннее представление данных для любых целей, которые отличны от обмена с 1С:Предприятием 7.7. Но сама возможность заглянуть на "внутреннюю кухню" платформы с помощью функций ЗначениеВСтрокуВнутр(), ЗначениеВФайл(), ЗначениеИзСтрокиВнутр() и ЗначениеИзФайла(), дала возможность сообществу программистов 1С разработать новые приемы разработки и анализа. Так, именно на использовании внутреннего представления был построен алгоритм "быстрого массива", который позволяет практически мгновенно создать массив в памяти на основании строки с разделителями. С помощью разбора внутреннего представления можно "на лету" программным кодом выполнить анализ обычной формы и даже сделать редактор графической схемы. Во внутреннем формате сохраняют свои данные между сеансами различные популярные внешние обработки. А еще это возможность сделать быстрый обмен с внешними системами.

1 стартмани

06.09.2019    25803    Dementor    32    

221

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

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Как запустить фоновое задание из модуля внешней обработки используя БСП. Как отключить безопасный режим и сообщения защиты от опасных действий независимо от профиля безопасности пользователя в фоновом задании во внешней обработке.

2 стартмани

24.08.2019    24569    BenGunn    29    

132

10 способов получить модуль числа (а может, и больше)

Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пишем функцию вычисления модуля числа. Сколько способов существует? Давайте посчитаем!

1 стартмани

11.07.2019    26562    sam441    37    

56

"Убер на складе": динамический расчет маршрутов с учетом реальных расстояний

Учет ТМЦ Механизмы платформы 1С Платформа 1С v8.3 Управленческий учет Абонемент ($m)

Представляю методику и инструмент для динамического расчета маршрутов отбора на высоконагруженных складах для максимального повышения эффективности склада, ускорения проходимости и, как следствие, экономии денег. Это методика и обработка для интеграции в WMS решения. Тестировалось на 1С 8.3.14.1565.

3 стартмани

24.06.2019    24840    informa1555    25    

76

Работа с графической схемой в объектной модели DOM

Универсальные функции Платформа 1С v8.3 Управляемые формы Абонемент ($m)

Пример кода для работы с графической схемой в объектной модели DOM, платформа 8.3.12.

1 стартмани

04.06.2019    8866    botokash    19    

51

Картинки во внешней печатной форме (Шапка и табличная часть)

Универсальные функции Оперативный учет Управляемые формы 1С:Управление торговлей 11 Россия Абонемент ($m)

Способы вывести на печать картинку в шапке и в табличной части внешней печатной формы. Управление торговлей, редакция 11 (11.4.7.150).

1 стартмани

27.05.2019    28994    Povinger    12    

27

Корректировка движений документа

Универсальные функции Корректировка данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Корректировка движений документа после его проведения по типовому алгоритму.

1 стартмани

26.05.2019    11730    rutadmeen    1    

5

Создание внешней печатной формы в формате документа Word

Адаптация типовых решений Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

В статье написано, как создать внешнюю печатную форму (для конфигураций с БСП) в формате Word.

1 стартмани

17.05.2019    40232    ВикторП    28    

68

Программное формирование картинки в 1С:Предприятие 8.3.9 (ПотокВПамяти / ЗаписьДанных)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

В статье представлен код программного формирования картинки (двоичные данные) без всяких внешних компонент, без формирования строки Base64, используя лишь встроенные механизмы 1С предприятие 8.3.9 (объекты ПотокВПамяти и ЗаписьДанных). Сам по себе код формирования картинки не несёт ничего нового. Всё описано в википедии. Захотелось попробовать новые методы, но никак не доходитили руки. В приложении обработка практически с этим же кодом.

1 стартмани

16.05.2019    13872    yku    11    

67

Функциональное программирование в 1С

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Статья о функциональном программировании в 1С. Добавляем новые возможности. Пример передачи функций в качестве аргумента.

1 стартмани

28.03.2019    11386    alexey.kutya    26    

7

Безопасная работа с транзакциями во встроенном языке

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Разбираемся с опасностями использования транзакций во встроенном языке 1С. Познаем ошибку "В данной транзакции уже происходили ошибки". Учимся защищаться от них.

1 стартмани

25.03.2019    61503    tormozit    67    

283

Асинхронная работа с текстовыми файлами в 1С 8.3

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

В этой статье я рассмотрю основные моменты работы с текстовым файлом в 1С 8.3. (загрузка - выгрузка) в режиме отключенной модальности (асинхронно).

1 стартмани

28.02.2019    13687    signum2009    7    

12

Баг или фича? Неожиданное поведение платформы

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Рассмотрим несколько случаев неожиданного поведения платформы 1С, а также что с этим можно cделать.

18.02.2019    27182    Infostart    90    

185

Динамическое изменение формы: кнопочная форма выбора справочника

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Динамическое изменение формы на примере кнопочного выбора из справочника.

1 стартмани

18.10.2018    10315    RocKeR_13    14    

38

Доработка функции ОбщегоНазначения.ЗаменитьСсылки для автоматической чистки или свёртки табличных частей

Универсальные функции Платформа 1С v8.3 Абонемент ($m)

Стандартная обработка по замене дублей ругается на документ с неуникальными строками. Предполагается, что их нужно либо а) удалить, либо б) свернуть. Я немного модифицировал код функции ОбщегоНазначения.ЗаменитьСсылки, встроив в него вызов процедуры, переопределяемой в модуле менеджера соответствующего документа. И в этом модуле менеджера мы уже сами определяем - удалить или свернуть. Ну и вообще там чего хошь можно с этой коллекцией сделать - сам же ж процедуру пишешь...

1 стартмани

12.09.2018    4736    albert.goncharov    0    

5

Жизненный цикл управляемой формы. Шпаргалка разработчика

Механизмы платформы 1С Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Прочитав когда-то давно книжку "Разработка управляемых форм", составил для себя такую схемку-напоминалку для обращения в процессе разработки. С тех пор не раз выручала и избавляла от необходимости лезть в гуглы.

1 стартмани

29.06.2018    49406    stas_ganiev    26    

325

Пропорциональное распределение в запросе

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Периодически в работе сталкиваюсь с задачей пропорционального распределения сумм в запросе. Ситуация усложняется, когда распределяемые суммы изначально не известны и определяются в процессе выполнения запроса. Эта статья один из примеров решения такой задачи.

1 стартмани

28.06.2018    13543    invertex    8    

38

Асинхронная запись и чтение файла без использования модальных методов и временных файлов

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

В статье рассмотрено решение задачи формирования и записи файла на основе данных информационной базы. Формирование происходит на стороне сервера с помощью механизма потоков. Используются асинхронные методы передачи файлов между клиентом и сервером. Также рассмотрено решение обратной задачи - чтение файла и запись его данных в информационную базу. Статья ориентирована прежде всего на новичков, также приведенный код может использоваться в качестве шаблона.

1 стартмани

10.04.2018    38039    Alxby    23    

153

Заполнение справочника с изображениями элементами по умолчанию

Универсальные функции Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Абонемент ($m)

Пример одного из решений, как можно заполнить справочник с изображениями значениями по умолчанию включая сами изображения. Сами изображения взяты из программы MapSource 6.16.3. Данные для загрузки хранятся в макете в формате XML.

1 стартмани

26.03.2018    9284    Kim1C    0    

2