1с преобразовать массив в структуру
Приходится извращаться немного с УФ. Надо записи из БД записать в массив. Решил Запись запихать в структуру, а структуру в массив. Получилась интересная фигня, что в массиве хранится ссылка на структуру а не сама структура. И в массиве все значения заполнены последней записью из БД, т.е. ссылкой на структуру.
Вопрос: Как заполнить массив значениями записей из БД? Может как-то можно извратиться со структурой?
ЗначениеВСтрокуВнутр() - а эта функция только на сервере работает. Можно конечно попробовать но это изврат :(
Работает через ЗначениеВСтрокуВнутр(). Но скорость обработки падает раз в 5. При больших объемах этот очень критично.
(5) Врешь ведь.
(0) Давай задачу целиком, а то тут опять налицо изобретение велоката с квадратными колесами
(8) Ну почему врешь? :)
Попробуй заполнить массив структурами - точно говорю, результат интересный будет. По всякому попробуй.
А задача целиком - загрузка данных из Оракла, с возможностью во время загрузки выбирать соответствия для некоторых объектов.
Вообще вернулся к старому варианту решения задачи. Сделал Таблицу на форме и гружу сначала данные из Оракла туда, а потом уже обрабатываю в цикле.
(10) Я делал так 100500 раз, массив из структур, на каждой итерации новая структура. На платформе 8.2. В массив, естественно, передается указатель (но не ссылка, какая ссылка у структуры?), но он каждый раз новый получался при создании новой структуры.
(0) Прочти хорошо правила работы с массивами и со структурами и не торопясь сделай. Если не получается - возьми отладчик, и проползи на пузе каждый шаг цикла, итерации две проследи в отладчике, наверняка найдешь ошибку.
(16) так и было, решил попробовать другой способ.
(15) Конечно же так и делал.
(14) Ну а как я по твоему видел, что в массиве все структуры пустые, когда делаешь через инициализацию структуры. Хотя думаю стоит еще раз попробовать что за фигня при записи структуры в массив. :(
(17) Да ты видимо в отладчике только итог посмотрел. А надо на каждом шаге смотреть значения всех переменных. Массив (длина его, да и на F2 посмотреть), текущая ячейка массива, переменная-структура, и что там у тебя еще есть?
Раз совсем ничего не понятно - делай так. Похоже, что ты еще ленишься, ибо не сказал нам - на каком шаге произошел космический глюк.
Мы бы тебе сразу подсказали.
(19) Какой ИТОГ? :))) Расскажу как происходит. Цикл, инициализируется структура, заполняется значениями из записи БД, Добавляется в массив. Все отлично, в массиве значения первой записи как надо. Переходим на вторую итерацию, после инициализации структуры в первой записи массива есть тип значения структура, но пустое.
(19) Если структуру не инициализировать, то во всем массиве значения последней структуру в него записанной
Нужно было добится хранения по типу "Параметр - Значение" в массиве.
Пример реализации типа Record (Pascal) в массиве. Но, значения передаются в массив по ссылке (!), что значительно усложняло задачу.
В Итоге получется что массив[0].знач1 = 510 . Все элементы массива ссылаются на одну переменную.
Проблема была решены следующим образом.
Как ни сиранно, но обект структуры не уничтожился после завершения работы функции. И теперь доступен из другой процедуры.
А вот теперь вопрос! Как долго будут "жить" объекты структуры в массиве? Когда 1С уничтожает объекты?
Хочу услашать ваши мнения, критику и альтернативные решения. Спасибо за внимание.
Преобразование таблицы значений в массив структур
Не могли бы помочь с этим преобразованием. А то тз на клиент нельзя передать, а знающие люди.
Блочная сортировка структур (Отсортировать массив структур по фамилии)
Подскажите алгоритм блочной сортировки структур на языке С++. Мне нужно отсортировать массив.
Не уверен, что понял вопрос
Попытаюсь прояснить (может и ответить)
На сколько я знаю, 1С (по крайней мере 7.7) всегда передает в процедуры сам объект, а не ссылку
Соответственно, после вызова ПолучитьСтруктуруДопСправочника(мас); все данные записанные в мас будут доступны везде, где он объявлен, независимо от типа этой переменной
В принципе, это должно также работать в любом языке
По крайней мере будет верно для C++
А проблема кода
в том, что массив[0] хранит ссылку на объект, который затем изменяется
надо либо хранить объект, либо создавать новый объект каждый раз пред сохранением ссылки в очередной элемент массива
Я с Вами полностью согласен - либо создавать новый объект каждый раз. Но вот нюанс - Время "жизни" переменной/объекта (Не глобальной) ограничевается функцией (В моём случае объект "структура") - покрайней мере так написанно во всех справочниках. Т.е. создал в функции, а пользоватся надо в другой процедуре. Если предположить что в выражении массив[0] = структ; производится именно копирование структуры, а сам структ в дальнейшем уничтожится то проблема решается сама собой.
Но в выражении массив[0] = структ; производится передачи ссылки на объект (Это уже проверенный вариант!) А это значит что, после завершения функции ПолучитьСтруктуруДопСправочника 1С может в любой момент сама уничтожить объект структ. Тогда я потеряю значения всех элементов массива!
Я перефразирую свой вопрос: Когда 1с уничтожает отработанные объекты?
Я перефразирую свой ответ
Я могу и ошибаться, но на 99% уверен, что 1С тоже уничтожает объекты по завершении функции
Но когда выполняется Буффер.Добавить(Новый Структура("Название, КодПоля", дПоля.POLE_NAZV, дПоля.POLE_KODP)), то в Буффер попадает не ссылка, а копия объекта и сия копия не будет уничтожена пока будет жить сам Буффер
В вашем конкретном примере - это везде где объявлен мас
Хотя, как я понял, ваш пример из 1С 8, с которой я не работал и лучше проверить на примере
В любом случае, я уверен, что 1С не уничтожает объекты в произвольный момент, и главное - это убедится, что вы храните копию объекта, а не ссылку на него
Я тут намудрил, точнее говоря неверно использовал термины
Правильнее сказать, что 1С передает именно ссылку (а можно передать только значение, если на это указать) и при изменении переменной внутри процедуры или функции затем будет доступно ее новое значение
дрыщ клиент 8.3 как переделать тип ДанныеФормаСтруктура в структура.
ну или пробежаться по данные форма структура цикилом?
Тип структура. Описать, используя тип структура
Описать, используя тип структура, данные на учеников (фамилия, улица, дом, квартира). Составить.
Структура, как тип контейнеров данных
Доброго времени суток. Возможно ли использование структуры, в качестве типа данных <T>.
Тип данных как структура с функциями
Тип многочлен от одной переменной, задаваемый степенью многочлена и массивом коэффициентов.
Преобразовать в прикладной тип
Добавлено через 10 секунд
через ДанныеФормыВЗначение()
не олучается, грит несоответсвие типа там чета,
ни данныеформы в знач, ни реквизитформы в знач, и второй параметр не помогает никак.
/////////
иначе б не спрашивал
Глобальный контекст (Global context)
ДанныеФормыВЗначение (FormDataToValue)
Синтаксис:
Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура; ДанныеФормыДерево.
Данные формы.
(обязательный)
Тип: Тип.
Тип значения, получаемого из данных формы.
Возвращаемое значение:
Преобразует данные формы в объект прикладного типа.
Сервер, толстый клиент.
Примечание:
Нельзя преобразовать в объект типа Табличная часть.
Добавлено через 6 минут
Вторым параметром метода РеквизитФормыВЗначение является тип значения. Это необязательный параметр. Если обрабатываемый реквизит не является составным типом, то тип будет автоматически получен из реквизита формы. Иначе генерируется исключение времени выполнения.
Добавлено через 3 минуты
Из какого прикладного типа значение было преобразовано в Данные Формы Структура в тот же прикладной тип оно может быть преобразовано обратно и никак иначе
аааа, я понил про что ты
неее у мене не было преобразования.
я хотел написать универсальный заполнятель,
этой формы из Этаформа.параметры.
Мне кажется, не надо было такую свежую версию БСП брать. Что-нибудь из 3.0.х было бы более востребовано.
Хотя, далеко не все описанные методы являются "свежими".
(3) Я описал наиболее полезные функции которые помогут в решении многих задач. конечно это далеко не весь список, будем дополнять по мере возможности новыми процедурами и функциями)
БСП использовал наиболее актуальную, но большая часть используется и в 3.0 ) спасибо
(0) А где же ОбщегоНазначенияКлиентСервер: Проверить(. ) и ПроверитьПараметр(. ) .
Соблюдение контрактов - это наше все;)
Спасибо, отличная тема для циклов статей!
Предложение: указывать тип возвращаемого значения (для функций), было бы удобно)
(7) Вообще в модулях описывается каждая процедура и функция )
но постараюсь дополнить в статье в ближайшее время!)
(13) От перестановки слагаемых сумма не меняется)
Результат такой же - решения разные.
Кстати для получения текущего пользователя на Клиенте:
Выдает ошибку:
Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Document is empty
Эту ТаблицаЗначений надо заранее создать и столбиками заполнить или как вообще.
Возвращает значение дополнительного свойства объекта:
УправлениеСвойствами.ЗначениеСвойства
Мне кажется часто нужен и достоин упоминания.
Просмотры 23960
Загрузки 0
Рейтинг 208
Создание 10.03.20 09:20
Обновление 14.01.21 12:35
№ Публикации 1207488
Тип файла Нет файла
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)
Код открыт Да
См. также
Библиотека стандартных подсистем (Механизм БСП) Промо
Конфигурации в 1С пишутся для пользователей и по их «правилам» (клиент всегда прав), поэтому в основном все конфигурации разные, но достаточно часто в них используются одни и те же объекты, которые незначительно отличаются друг от друга. Действительно, сложно представить конфигурацию, где не фигурировали бы такие сущности как номенклатура, контрагенты, пользователи, валюта. И некоторые задачи являются типичными: возможность базового разграничения прав, работа с электронной почтой, задачи пользователям и т.д. Но.
03.03.2017 86292 V.Stavinsky 22
Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП
В данной статье я рассматриваю несколько полезных "классических" функций и процедур для работы с данными, которые уже встроены в БСП и готовы к использованию.
25.04.2022 2812 quazare 11
Правила регистрации объектов 1С:БСП
Здравствуйте, коллеги! В статье рассмотрим работу с правилами регистрации объектов в библиотеке стандартных подсистем 1С.
20.04.2022 871 Koder_Line 6
Многопоточный режим выполнения процедуры с помощью методов БСП - примеры разработки
В данной статья я рассмотрю примеры использования выполнения функций и процедур в многопоточном режиме, используя возможности Библиотеки стандартных подсистем (БСП).
01.04.2022 3320 quazare 14
Полезные функции БСП Промо
Список часто востребованных, по моему мнению, функций из состава Библиотеки стандартных подсистем 2.2.
1 стартмани
01.02.2015 86566 52 spec8s 31
Необычное решение для хранения настроек внешней обработки
При написании внешней обработки, например для импорта данных из сторонней базы данных используя HTTP-сервисы, необходимо сохранять настройки соединения с HTTP. Подсказали оригинальный способ сохранения настроек с БД. При использовании "ХранилищеОбщихНастроек" все сильно зависит от прав пользователя. Чтобы читать настройки, сохраненные другим пользователем, необходимы права: "АдминистрированиеДанных". Как-то не хочется раздавать всем пользователям права администратора. Помогает БСП.
25.03.2022 961 AlexeyRaevsky 7
Получение контактной информации из отбора
Универсальная функция получения контактной информации из отбора компоновки данных. Весь код в статье.
25.03.2022 977 the1 0
Стандартные подсистемы БСП - параметры работы клиента и возможности диалогов
В данной небольшой статье рассмотрим обработку параметров работы клиента и режим диалога (выбора вопроса) модулей "стандартные подсистемы" БСП.
22.03.2022 3123 quazare 7
Полезный код для программистов 1С (часть 3). Подготовка печатных форм + подсистема Управление печатью (БСП)
Мы все любим 1С, не так ли? Вот дает 1С прекрасный механизм возможности модификации макетов печатных форм в БСП. А из всех рекомендаций это получение макета и заполнение параметров областей. И вы спросите: "А что не так. ты печатные формы накодить не можешь без указаний сверху?". Да вот в том то и дело, что я могу все. А вот пользователям от такого механизма пользы 0, если из всех доступных изменений остаются только шрифты, да текст произвольный накинуть. А ведь можно больше, надо только соблюдать несколько правил при подготовке печатных форм.
07.03.2022 3239 vandalsvq 0
Подключение подсистемы исправления документов и регистров в конфигурации ЗУП 3.1
Описание шагов для того, чтобы подключить разработанный документ к подсистеме исправления в конфигурации ЗУП 3.1.
Возникала необходимость чтения обработки XML файлов неизвестной структуры, вот написал процедуры, которые преобразуют XML файл любой в дерево значений, а также считывают и преобразуют данные в переменную типа структура причем типы переменных преобразуются в соответствии с требованиями, Дата, Булево, Число, Строка
Возможно, что кому нибудь эти данные будут интересны
Тестировалась на платформе 1С:Предприятие 8.3 (8.3.15).
Конфигурация 1С не имеет значения.
Специальные предложения
Дерево значений это хорошо, но у меня основная цель стояла создать переменную структуры а не дерево значений, а так спасибо!
модуль ИнтеграцияВЕТИС, 1С:ERP Управление предприятием 2 (2.4.9.82)
// Преобразует объект XDTO в структуру
//
// Параметры:
// ОбъектXDTO - ОбъектXDTO - Объект XDTO.
//
// Возвращаемое значение:
// Структура - Структура объекта.
//
Функция ОбъектXDTOВСтруктуру(ОбъектXDTO, ПараметрыПреобразования = Неопределено) Экспорт
Структура = Новый Структура;
ТипОбъектаXDTO = ОбъектXDTO.Тип();
Для Каждого Свойство Из ОбъектXDTO.Свойства() Цикл
ИмяСвойства = Свойство.Имя;
ЗначениеСвойства = ОбъектXDTO[ИмяСвойства];
Если ТипЗнч(ЗначениеСвойства) = Тип("ОбъектXDTO") Тогда
Структура.Вставить(ИмяСвойства, ОбъектXDTOВСтруктуру(ЗначениеСвойства, ПараметрыПреобразования));
ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("СписокXDTO") Тогда
Структура.Вставить(ИмяСвойства, Новый Массив);
Для Индекс = 0 По ЗначениеСвойства.Количество() - 1 Цикл
ЭлементСписка = ЗначениеСвойства.Получить(Индекс);
Если ТипЗнч(ЭлементСписка) = Тип("ОбъектXDTO") Тогда
Структура[ИмяСвойства].Добавить(ОбъектXDTOВСтруктуру(ЭлементСписка, ПараметрыПреобразования));
Иначе
Структура[ИмяСвойства].Добавить(ЭлементСписка);
КонецЕсли;
Если ПараметрыПреобразования <> Неопределено
И ПараметрыПреобразования.НайтиИдентификаторы
И Свойство.Тип = ПараметрыПреобразования.ТипUUID Тогда
РезультатПоиска = ПараметрыПреобразования.ТипыИдентификаторов[ТипОбъектаXDTO];
Если РезультатПоиска <> Неопределено
И РезультатПоиска.ИмяПоля = ИмяСвойства Тогда
ПараметрыПреобразования.Идентификаторы[РезультатПоиска.ИмяТаблицы].Вставить(ЗначениеСвойства, РезультатПоиска.ПустоеЗначение);
КонецЕсли;
Читайте также: