Чем структура отличается от соответствия 1с
1. Место коллекции "соответствие" среди других универсальных коллекций значений.
массив предназначен для доступа к элементам массива;
структура используется для хранения небольшого количества значений, каждое из которых имеет некоторое имя;
список значений - это не сохраняемый в базе данных объект, который позволяет строить динамические наборы значений и манипулировать ими;
таблица значений - почти тоже, что список, только еще с колонками.
А вот про соответствие в хелпе написано только что данный объект "Представляет доступ к соответствию".
Не собираюсь поправлять техписателей 1С - другого определения давать не буду.
С моей точки зрения, соответствие занимает промежуточное положение между структурой и массивом, с одной стороны, и списком и таблицей значений, с другой, объединяя хорошие черты этих коллекций.
Все коллекции хранят множества элементов. Структура позволяет получить нужный элемент по имени, массив - по номеру, список и таблица значений - поиском (отбором) среди других элементов. А соответствие позволяет выбрать или изменить нужный элемент по "ключу" этого элемента. При этом в качестве ключа может использоваться значение почти любого типа (например, ссылка). Возможность выбора и изменения по ключу дает возможность обрабатывать заранее неизвестное количество элементов, при этом никак их не нумеруя. Получаем практически таблицу значений, проиндексированную по колонке "ключ".
И вот тут, думаю, для многих будет сюрпризом, что доступ к элементу соответствия по ключу происходит почти со скоростью доступа к массиву или элементу структуры! - Как будто по номеру!
Будем подавать на вход обработки случайные числа в диапазоне от 1 до КоличествоРазличныхЭлементов. Обработка должна будет проверять каждое число, чтобы определить: не встречалось ли очередное число в текущей последовательности раньше. Если такого числа не было - оно добавляется в коллекцию, иначе - увеличивается число его повторений.
То есть оценивается время выполнения конструкции ". " в цикле (фиг1)
В качестве конструкции ". " используется:
Вариант 1. Массив (фиг2)
Вариант 2. Соответствие (фиг3)
Вариант 3. Индексированная ТаблицаЗначений (фиг4)
Результаты сравнения показали, что отметка в массиве занимает на тестовом компьютере 2,45 мкс, в соответствии - 7,06 мкс, в индексированной таблице значений - 15,06 мкс, причем это время не зависит от числа элементов в коллекции! Прилагаемый к статье отчет "БыстродействиеКоллекций" позволит Вам перепроверить эти результаты.
Скорость доступа к элементам соответствия и независимость скорости доступа от размера коллекции "соответствие" может удивлять, если не догадываться о ее устройстве. Можно предположить, что используется хеш-функция и хеш-таблица. Хеш-функция вычисляет номер строки хеш-таблицы, где лежит ссылка на элемент. Простая косвенная адресация! Одно лишнее (по сравнению с массивом) обращение к памяти!
При использовании для решения этой задачи списка значений, неиндексированной таблицы значений или добавления чисел в таблицу значений без контроля повторений с последующей сверткой, получаются существенно более плохие результаты. Которые, к тому же, зависят от размеров коллекций . При этом самые лучшие результаты среди аутсайдеров дает свертка.
В комментариях к статье также уже посоветовали отметить, что еще одна прелесть соответствия в том, что перед присваиванием Соответствие[Ключ] = Значение не нужна проверка на существование элемента с этим ключом, так как отсутствующий элемент в этом случае вставляется в соответствие. В приведенных примерах этому красивому приему, к сожалению, места не нашлось.
2. Пример использования соответствия в задаче подсчета повторений слов.
Приведем пример программы, подсчитывающей число повторений каждого слова в заданном тексте. Обычное решение - запоминание отдельных слов в строках таблицы значений и последующая свертка по полю "Слово". Соответствие ускоряет основную операцию в этом алгоритме минимум в два раза! При этом получается не только самый быстрый, но и выразительный код. Чтобы учесть, что слово, прочитанное в переменную "Слово" строкового типа, встретилось еще раз, используется наглядная запись: Частота[Слово] = Частота[Слово] + 1. Правда, чтобы определить, что символ является буквой, использовать соответствие будет уже неправильно: встроенная функция поиска подстроки работает быстрее!
Текст программы приведен на фиг5 и в приложенном к статье отчете "ЧастотаСлов", позволяющем проанализировать любой текстовый файл.
Прилагаемый к статье скриншот показывает результат определения частоты слов в данной статье.
3. Пример использования соответствия в задаче представления ориентированного графа.
Если стоит задача сохранить в оперативной памяти и проанализировать связи объектов информационной базы, то эффективной оказывается использование следующей структуры: Соответствие "Граф" хранит связи объекта, ссылка на который определяется ключом. Значением соответствия "Граф" является вложенное соответствие "Связи", которое для каждого связанного элемента хранит вес связи.
Например, если переменные "Элемент1" и "Элемент2" хранят ссылки на два элемента справочника "Номенклатура", причем второй входит в спецификацию первого с весом 2, то выражение
Граф[Элемент1][Элемент2] будет равно 2.
Если связи нет, то выражение Граф[Элемент1][Элемент2] будет равно "Неопределено".
Если нужно сделать вес связи равным 1, это сделает следующий код: Граф[Элемент1][Элемент2] = 1.
При этом Элемент1 и Элемент2 могут быть как ссылкой на справочник, так и ссылкой на документ и другие объекты. То есть так можно обрабатывать любые связи!
Стоит предупредить, что обращаться к элементам вложенного соответствия можно только, если во внешнем соответствии существует ключ первого элемента. Поэтому перед обращением к связям требуется проверка Граф[Элемент1] <> Неопределено.
На фиг6 приведен фрагмент кода программы, который производит чтение из базы данных в оперативную память связей номенклатуры, задаваемых в конфигурации "Бухгалтерия предприятия" в справочнике "СпецификацииНоменклатуры".
Заключительные замечания.
1. Ничего нового здесь не изобретено, просто делюсь опытом. Сам узнал о сравнительной эффективности коллекций из статьи Сергея Осипова. Спасибо ему!
2. Использование соответствия в решении задач позволяет исключить поиск при обработке заранее непронумерованных данных. Таким образом существенно ускоряется реализация многих базовых алгоритмов. Пользуйтесь соответствием в случаях, когда не нужен весь функционал таблиц значений!
3. Несмотря на ориентированность языка 1С на решение бизнес-задач, в нем есть место настоящему программированию - кодингу, в том числе и самому хитроумному. Поэтому изучайте теорию алгоритмов и программ, не мусорьте в коде и сможете сберечь нервы и время пользователей, строки кода, место на дисках, циклы процессора, электроэнергию. Делайте мир лучше!
Соответствие и структура очень близкие по сути коллекции.
Соответствие – это коллекция пар ключ и значение.
Структура – это коллекция пар ключ и значение.
Как видите, из определений объектов не отличишь структуру от соответствия, а разница между ними есть и находится в свойстве Ключ. Ключ в структуре может быть только строкой, а в соответствии может быть любым типом.
Что понимается под словом «Ключ»? Ключ – это ключевое поле которое не может иметь двух одинаковых значений - является уникальным в пределах коллекции. Т.е. если мы попытаемя в структуру имеющую ключ "Номенклатура" и значение "Диван" поместить такой же ключ, но с значением "Кресло", то программа просто заменит старое значение "Диван" на новое "Кресло", а не добавит ещё один ключ "Номенклатура" со значением "Кресло".
Основное использование объекта типа "Структура":
Этот объект часто используется в качестве способа передачи параметров в процедуры и функции.
Основное использование объекта типа "Соответствие":
Имя типа объекта оправдывает свое название, соответственно можно связывать два разных объекта системы, что позволяет избежать ипользования ТЗ с двумя колонками.
У этих объектов одинаковые методы для добавления и удаления элементов, но разные для получения.
У структуры имеется метод "Свойство" который проверяет есть ли такой ключ в коллекции и возвращает в переменную полученное значение. Если ключа нет, то возвращается Неопределено. При этом метод является функцией и возвращает Булево( Истина или Ложь )
В Соответствии для этого есть метод "Получить" в параметрах которого передается ключ парное значение которого мы ищем. Т.е. нет отдельной функции для проверки, но если ключ не найден, то возвращается Неопределено, что и можно использовать для этой же цели(текст изменен, благодаря замечаниям в комментариях).
Комментарии
Ольга, как я понимаю у Вас задача быстро сравнивать Списки значений, но соответствие здесь не поможет, т.к. программа при проверки уникальности ключа будет сравнивать не значения списка, а ссылку(указатель) на список. Если вы создадите два одинаковых списка значений и вставите их в соответствие, то программа их расположит как два разных ключа - 2 значения, но повторное добавление этих списков значений в соответствие не даст дублирования и количество значений так и останется 2.
Скажите, пожалуйста, как в ключ Соответствия засунуть список значений (массив), и потом искать этот ключ, сравнивая ключ как сам список значений, а не какой-то адрес (хэш). Какую структуру данных использовать для ключа?
Проблема в том, что каждый раз он видит массив, как новый, хотя его значения такие же, как в массиве уже существующего ключа Соответствия.
Не обязательно точно знать ключ соответствия.
Соответствие можно циклом Для каждого обойти, как и любую коллекцию.
И запросто узнать все ключи.
На счет точно знать есть ли у соответствия ключ, это да. Но добавьте чтобы было понятно (немного получается, что знать нужно и ошибиться нельзся, что в случае не нахождения по сути ключа, вернет Неопределно) поэтому это тоже свое рода проверка на наличие ;)
"Ключ в соответствии может быть только строкой, а в структуре может быть любым типом"
Наоборот, в структуре - строка, в соответствии - произвольный тип
Соответствие и структура очень близкие по сути коллекции.
Соответствие – это коллекция пар ключ и значение.
Структура – это коллекция пар ключ и значение.
Как видите, из определений объектов не отличишь структуру от соответствия, а разница между ними есть и находится в свойстве Ключ. Ключ в структуре может быть только строкой, а в соответствии может быть любым типом.
Что понимается под словом «Ключ»? Ключ – это ключевое поле которое не может иметь двух одинаковых значений - является уникальным в пределах коллекции. Т.е. если мы попытаемя в структуру имеющую ключ "Номенклатура" и значение "Диван" поместить такой же ключ, но с значением "Кресло", то программа просто заменит старое значение "Диван" на новое "Кресло", а не добавит ещё один ключ "Номенклатура" со значением "Кресло".
Основное использование объекта типа "Структура":
Этот объект часто используется в качестве способа передачи параметров в процедуры и функции.
Основное использование объекта типа "Соответствие":
Имя типа объекта оправдывает свое название, соответственно можно связывать два разных объекта системы, что позволяет избежать ипользования ТЗ с двумя колонками.
У этих объектов одинаковые методы для добавления и удаления элементов, но разные для получения.
У структуры имеется метод "Свойство" который проверяет есть ли такой ключ в коллекции и возвращает в переменную полученное значение. Если ключа нет, то возвращается Неопределено. При этом метод является функцией и возвращает Булево( Истина или Ложь )
В Соответствии для этого есть метод "Получить" в параметрах которого передается ключ парное значение которого мы ищем. Т.е. нет отдельной функции для проверки, но если ключ не найден, то возвращается Неопределено, что и можно использовать для этой же цели(текст изменен, благодаря замечаниям в комментариях).
Комментарии
Ольга, как я понимаю у Вас задача быстро сравнивать Списки значений, но соответствие здесь не поможет, т.к. программа при проверки уникальности ключа будет сравнивать не значения списка, а ссылку(указатель) на список. Если вы создадите два одинаковых списка значений и вставите их в соответствие, то программа их расположит как два разных ключа - 2 значения, но повторное добавление этих списков значений в соответствие не даст дублирования и количество значений так и останется 2.
Скажите, пожалуйста, как в ключ Соответствия засунуть список значений (массив), и потом искать этот ключ, сравнивая ключ как сам список значений, а не какой-то адрес (хэш). Какую структуру данных использовать для ключа?
Проблема в том, что каждый раз он видит массив, как новый, хотя его значения такие же, как в массиве уже существующего ключа Соответствия.
Не обязательно точно знать ключ соответствия.
Соответствие можно циклом Для каждого обойти, как и любую коллекцию.
И запросто узнать все ключи.
На счет точно знать есть ли у соответствия ключ, это да. Но добавьте чтобы было понятно (немного получается, что знать нужно и ошибиться нельзся, что в случае не нахождения по сути ключа, вернет Неопределно) поэтому это тоже свое рода проверка на наличие ;)
"Ключ в соответствии может быть только строкой, а в структуре может быть любым типом"
Наоборот, в структуре - строка, в соответствии - произвольный тип
Справочники 1С — специализированный объект древа метаданных, который служит для хранения статичной информации справочного характера.
Документы в 1С 8.2 и 8.3 — объект метаданных, с помощью которого в 1С фиксируются хозяйственные операции предприятия.
2. Может ли справочник быть регистратором в регистрах?
Нет. Только документ может быть регистратором.
3. Какие модули конфигурации вы знаете?
Модуль управляемого приложения
Модуль внешнего соединения
Модуль обычного приложения
4. Чем "модуль объекта" отличается от "модуля менеджера"?
Модуль объекта вызывается при создании нового объекта и при записи объекта.
Модуль менеджера позволяет описать собственные методы для объекта конфигурации, которые относятся не к конкретному экземпляру объекта базы данных, а к самому объекту конфигурации.
5. Какие директивы компиляции в модулях знаете?
&НаКлиентеНаСервере
&НаКлиентеНаСервереБезКонтекста
6. Что такое мутабельные значения? Примеры.
Мутабельный тип (в переводе с английского Mutable – изменчивый) – это сложный тип данных в 1С, который может менять свои свойства уже после создания.
К мутабельным типам в языке программирования 1С относятся:
"Средние" вопросы:
1. Директива по умолчанию (если не указать)?
По умолчанию, если перед процедурой (функцией) ничего не указано, то применяется директива 1С &НаСервере.
2. Для чего используют директиву "НаКлиентеНаСервереБезКонтекста"? Какие у нее особенности?
Используется, когда к процедуре нужно обращаться и с клиента, и с сервера. В остальном аналог &НаСервереБезКонтекста.
3. Чем структура отличается от соответствия? (топ рейтинга =) )
Ключ в структуре может быть только строкой, а в соответствии может быть любым типом.
4. Какими горячими клавишами пользуетесь при разработке?
F5, F9-F11 для отладки, Ctrl+H для замены значений.
5. В какой момент отрабатывают подписки на события?
После отработки события, к которому привязаны.
6. Имеет ли значение порядок измерений в регистрах?
Да. Выше всего необходимо ставить измерения, которые будут чаще запрашиваться в системе.
7. Каким способом можно отсортировать структуру?
Предполагается, что структура не нуждается в сортировке. Можно выгрузить в таблицу значений и отсортировать.
8. Что означает флаг "Вызов сервера" у общего модуля?
Глобальный — если флаг установлен, функции и процедуры из этого модуля становятся доступны в глобальном контексте. Т.е. их можно вызвать в любом месте конфигурации, обращаясь без названия общего модуля. Однако добавляется условие — название процедур и функций в этом общем модуле должны быть уникальны в рамках глобального контекста.
Сервер — процедуры и функции данного общего модуля могут быть выполнены на сервере.
Внешнее соединение — программные коды данного общего модуля могут быть выполнены при подключении внешним источником (например, COM).
Клиент (управляемое приложение) — процедуры и функции данного общего модуля могут быть использованы в толстом клиенте в режиме управляемого приложения.
Клиент (обычное приложение) — программные коды данного общего модуля могут быть использованы в толстом клиенте в режиме обычного приложения.
Вызов сервера — флаг, разрешающий на клиенте использовать процедуры и функции из этого общего модуля.
Привилегированный — если установлена Истина, в этом общем модуле будет отключена проверка прав доступа.
Повторное использование — определяет настройки возвращаемых значений, если опция включена, то после первого выполнения система запомнит значение для данных входных параметров и будет возвращать уже готовое значение. Может принимать следующие значения: не используется — отключение, на время вызова — на время выполнения определенной процедуры, на время сеанса — пока пользователь не закрыл сеанс (программу).
"Сложные" вопросы:
К таким вопросам причисляются вопросы про индексы, блокировки, sql и т.д.
1. С какими подсистемами БСП приходилось работать? Какие функции использовали?
2. Организация прав доступа в типовых конфигурациях. Что где указывается? Как работает?
3. Как используется RLS в типовых? Где указывать ограничения?
4. Разница директивы &НаСервере и &НаСервереБезКонтекста?
5. Используется ли ТаблицаЗначений на форме? Что используется?
6. Как передать значение реквизита формы в фильтр формы выбора?
Блокировки и проведение:
7. Стандарты 1с по организации проведения документа. Где подготавливаются данные для проведения?
8. Что такое разделяемая (исключительная) блокировка? Автоматическая (управляемая) блокировка?
Объектная (транзакционная) блокировка? Их связь с SQL?
9. Что такое индекс?
10. Нужно ли использовать индексы и в каких случаях?
11. Зависимость порядка измерений регистра и индекса?
12. Будет ли использоваться индекс, если в запросе есть условие по третьему измерению регистра, все измерения в котором проиндексированы?
13. Как изменить запрос в условии которого присутствует "ИЛИ"? Зачем менять?
14. Где хранится временная таблица? Если она большая? Как индексируется?
15. Мы получаем данные остатков из регистра накопления для проведения. В параметрах запроса нужно использовать текущую дату или МоментВремени? Почему?
16. Почему возникает ошибка "В данной транзакции уже происходили ошибки!"? Как её избежать?
17. Опишите порядок действий, если нужно организовать постоянный обмен каким-то документом между двумя различными конфигурациями, использующими БСП.
Иногда встает вопрос, что лучше использовать, а чаще всего в стандартных конфигурациях 1С и их партнеров при обновлении может, происходит преобразование данных в другие объекты метаданных и почему то они строят структуру, где ключом является код объекта?! А там же может быть значение, которое начинается на цифру и сразу же выходит ошибка.
Таблица сравнения построена по версии справки из Конфигуратора:
Структура
Соответствие
Возможно обращение к значению элемента посредством оператора [. ]. В качестве аргумента передается значение ключа элемента.
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Представляет собой коллекцию пар КлючИЗначение . При этом ключ может быть только строковым и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка.
К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства.
Структура используется обычно для хранения небольшого количества значений, каждое из которым имеет некоторое имя.
Представляет доступ к соответствию.
Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен .
Имя типа XDTO: Structure
Имя типа XDTO: Map
Может использоваться в реквизитах управляемой формы.
Запись = Новый Структура ;
Запись = Новый Соответствие ;
Запись . Вставить ( "Ключ" , "Значение" );
Кроме этого: Структура упорядочивает элементы при добавлении, а соответсвие нет.
Вернемся к теме:
Для «Структура» ключ должен быть введен по всем правилам объявления переменных, а «Соответствие» нет.
Можно просто заменить тип переменной и заменить метод «Свойство» на «Получить». Обычно этого достаточно.
Но бывают и неожиданные результаты при использовании «Соответствие».
Например, платформа даёт добавить значение с ключом = Неопределенно, а вот считать нельзя, так как по факту запись не была добавлена, но и ошибку не выдал.
Предлагаю код для проверки исключительных ситуаций. Код можно добавить на пустой форме, добавив 2 таблицы значений с именами табСтруктура и табСоответствие .
Процедура КнопкаВыполнитьНажатие ( Кнопка )
Для А = 1 По 500000 Цикл
ВставитьИПроверить ( мСтруктура , Стр , Стр );
Сообщить ( "Структура - " + ( ТекущаяДата () - тДата ));
ВставитьИПроверить ( мСтруктура , Тест , Тест );
Для А = 1 По 500000 Цикл
ВставитьИПроверить ( мСоответствие , Стр , Стр );
Сообщить ( "Соответствие - " + ( ТекущаяДата () - тДата ));
ВставитьИПроверить ( мСоответствие , Тест , Тест );
Процедура ВставитьИПроверить ( Список , Ключ , Значение );
мТип = ТипЗнч ( Список );
//проверка возможно добавить или нет
Список . Вставить ( Ключ , Значение );
Сообщить ( "" + мТип + ": Не возможно добавить ключ [" + Значение + "]." );
Если НЕ (( мТип = Тип ( "Соответствие" ) И НЕ Список . Получить ( Ключ ) = Неопределено)
ИЛИ ( мТип = Тип ( "Структура" ) И НЕ Список . Свойство ( Ключ ) = Неопределено)) Тогда
Сообщить ( "" + мТип + ": Выполнено неявное преобразование типов и/или данных ключа [" + Значение + "]." )
Сообщить ( "" + мТип + ": Невозможно получить значение по ключу [" + Значение + "].
| Возможно было выполнено неявное преобразование типов и/или данных ключа." )
Процедура ОсновныеДействияФормыПроверка ( Кнопка )
мСсылка = Справочники . Валюты . ПустаяСсылка ();
// добавление новый элементов в Структуру
ВставитьИПроверить ( мСтруктура , "Ключ1" , "Ключ1" );
ВставитьИПроверить ( мСтруктура , "1Ключ" , "1Ключ" );
ВставитьИПроверить ( мСтруктура , мСсылка , "Справочники.Валюты.ПустаяСсылка()" );
ВставитьИПроверить ( мСтруктура , табСтруктура , "ТаблицаЗначений" );
ВставитьИПроверить ( мСтруктура , Неопределено, "Неопределено" );
ВставитьИПроверить ( мСтруктура , null, "null" );
// добавление новый элементов в Соответствие
ВставитьИПроверить ( мСоответствие , "Ключ1" , "Ключ1" );
ВставитьИПроверить ( мСоответствие , "1Ключ" , "1Ключ" );
ВставитьИПроверить ( мСоответствие , мСсылка , "Справочники.Валюты.ПустаяСсылка()" );
ВставитьИПроверить ( мСоответствие , табСоответствие , "ТаблицаЗначений" );
ВставитьИПроверить ( мСоответствие , Неопределено, "Неопределено" );
ВставитьИПроверить ( мСоответствие , null, "null" );
// выводим результат на форму
Для Каждого Стр Из мСтруктура Цикл
нСтр = табСтруктура . Добавить ();
нСтр . Ключ = Стр . Ключ ;
нСтр . Значение = Стр . Значение ;
ЭлементыФормы . табСтруктура . СоздатьКолонки ();
Для Каждого Стр Из мСоответствие Цикл
нСтр = табСоответствие . Добавить ();
нСтр . Ключ = Стр . Ключ ;
нСтр . Значение = Стр . Значение ;
ЭлементыФормы . табСоответствие . СоздатьКолонки ();
мСтруктура = Новый Структура ;
мСоответствие = Новый Соответствие ;
табСтруктура . Колонки . Добавить ( "Ключ" );
табСтруктура . Колонки . Добавить ( "Значение" );
табСоответствие . Колонки . Добавить ( "Ключ" );
табСоответствие . Колонки . Добавить ( "Значение" );
Структура : Не возможно добавить ключ [1Ключ].
Структура : Не возможно добавить ключ [Справочники.Валюты.ПустаяСсылка()].
Структура : Не возможно добавить ключ [Неопределено].
Структура : Не возможно добавить ключ [null].
Соответствие : Выполнено неявное преобразование типов и/или данных ключа [Неопределено].
Прошу обратить внимание: Что ТаблицаЗначений при добавлении в Структуру было преобразовано к строке "ТаблицаЗначений".
Последний раз у меня возникла такая ситуация при обновлении 1С:Консолидация ПРОФ с 1.3.3.7 (1.3.4.1) на 2.0.1.4 (2.0.2.6)
Строилась "Структура" по коду справочника "Операнды показателей".
Исправляется 1 строкой в Общих модулях.УправлениеОтчетами строка 3622.
"СтруктураПолей=Новый Структура;" заменить на "СтруктураПолей=Новый Соответствие;"
Специальные предложения
Последний раз у меня возникла такая ситуация при обновлении 1С:Консолидация ПРОФ с 1.3.3.7 (1.3.4.1) на 2.0.1.4 (2.0.2.6)
Строилась "Структура" по коду справочника "Операнды показателей".
Исправляется 1 строкой в Общих модулях.УправлениеОтчетами строка 3622.
"СтруктураПолей=Новый Структура;" заменить на "СтруктураПолей=Новый Соответствие;"
(1) Согласен c awk, это разные объекты с разным назначением.
(12) kereo, менять коды не вариант.
Так как на этих кодах справочника построены формулы расчета.
Но и это не самое страшное, видать для повышения скорости работы почти в каждом справочники, есть реквизит типа ХранилищеЗначения, которое в себе хранит копию почти всех реквизитов объекта + какие-то промежуточные расчеты.
Потом эти формулы используются в макетах, где они тоже берутся не из справочников, а из ХранилищеЗначения.
Возможно, где то еще есть ХранилищеЗначения на ХранилищеЗначения на ХранилищеЗначения, но дальше углубляться не стал.
Так как их надо будет обновлять. А это не просто, всё-таки это 1С: Консолидация.
(1)
вы непонятно что проверяете своим кодом. Лучше уберите его совсем.
В очередной раз доказали, что в ключ структуры ничего, кроме "правильной" строки, внести нельзя?
Доказали, что Соответствие может принимать любые ключи и любые значения?
И кому, кроме Вас, взбредет в голову давать ключу (ключу!) значение Неопределено (и Соответствие правильно ничего показывает - это же значение Непопределено) или Null?
Самое главное - что для получения значения Соответствия у запрашиваемого ключа должен быть обязательно тот же самый тип данных, что и при создании ключа - у автора ни слова (видимо, не знает).
Прошу обратить внимание: Что ТаблицаЗначений при добавлении в Структуру было преобразовано к строке "ТаблицаЗначений".
И никаких преобразований ни Структура, ни Соответствие не делают - разве что преобразуются в строковой ключ (Структура) таким образом:
где Ключ - строка, либо для Соответствия - по правилу преобразования 1С последовательности значений: все следующие значения - принимают тип данных (если это возможно) первого из слагаемых, иначе - ошибка.
ТаблицаЗначений как была ТЗ, так ей и остается. Разве что Вы сами себя там запутали, и превратили на каком-то этапе в строку (даже ковырять не хочется столь бестолковый код).
Так что лучше разберитесь по-настоящему, что и как, а пока статья - ни о чем, и никак никому не поможет, а только запутает.
Единственно верное замечание -
и то, упорядочивает не "значения", а строковые ключи, и, естественно, Соответствие не сможет никогда упорядочить ссылку на объект и число с Неопределено - т.е. все, что взбредет туда засунуть в Ключ.
Так что и по этому вопросу - у автора нет понятия.
Читайте также: