Имя: Пароль:
1C
 
Заполнить строку с GUIDами элементов справочника «Платформы», разделённые символом «;»
0 Дима1С-ник
 
naïve
14.08.25
16:50
В конфигурации есть справочник «Платформы»; состав реквизитов:
- Наименование (строка, 100 знаков);
- ЧисловойКод (число, 3; значения от 100 до 999; контроль уникальности);
- Ключевая (булево).
В конфигурации существует константа «ПлатформыРезерв» с типом данных «ХранилищеЗначений».
Добавляем в хранилище значений данной константы добавляем следующую информацию:
- Строка с GUIDами элементов справочника «Платформы», разделённые символом «;»

Сделал через Массив
//======Код================
СтрокаГУИД = Новый Массив;    
     Номенклатура = Справочники.Платформы;
     Выборка = Номенклатура.Выбрать();
     Пока Выборка.Следующий()  Цикл
        
         СтрокаГУИД.Добавить(Выборка.Ссылка.УникальныйИдентификатор());
         //Константы.ПлатформыРезерв.Установить(СтрокаГУИД);
        
     КонецЦикла;  
    
     СтрокаГУИД1 = СтрСоединить(СтрокаГУИД,";");
         Константы.ПлатформыРезерв.Установить(СтрокаГУИД1);

//===================================

Можно ли сделать это через Структуру или ТаблицуЗначений
1 Волшебник
 
14.08.25
16:52
массив - норм
2 Волшебник
 
14.08.25
16:53
а вот константа со списком значений - это зашквар
3 Мультук
 
гуру
14.08.25
17:00
(0)

Суть (назначение) этой константы?

Вариант1
Кэш ?

Вариант2
Константа содержит только кошерные платформы ?
Добавьте в справочник реквизит ЭтоКошернаяПлатформа Булево
4 Волшебник
 
14.08.25
17:04
можно без цикла
Запрос = Новый Запрос("ВЫБРАТЬ УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Ссылка) КАК GUID ИЗ Справочник.Платформы");
м = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("GUID");
Константы.бяка.Установить(СтрСоединить(м,";"));
5 Дима1С-ник
 
naïve
14.08.25
17:06
(1) Спасибо, но если например из этой константы «ПлатформыРезерв» будем удалять все указатели (ссылки или GUIDы) на платформы, признак «Ключевая» у которых равен «Ложь». То тогда надо структурой сделать
6 Волшебник
 
14.08.25
17:09
(5) Ну так не надо было вообще заводить эту константу
7 Fish
 
гуру
14.08.25
17:13
А почему нельзя было сделать нормальный регистр сведений?
8 ptiz
 
14.08.25
17:14
(5) Зачем понадобилось такую чудную константу заводить?
9 craxx
 
14.08.25
17:18
(0) какая жесть🤦
10 Дима1С-ник
 
naïve
14.08.25
17:20
(8) Это было ТЗ я его сделал с помощью массива, после чего добавили еще условие, удалить из этой константы с типом хранилезначений все указатели (ссылки или GUIDы) на платформы, признак «Ключевая» у которых равен «Ложь»...
11 Волшебник
 
14.08.25
17:22
(10) Просто перезаполните константу другим запросом:
Запрос = Новый Запрос("ВЫБРАТЬ УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Ссылка) КАК GUID ИЗ Справочник.Платформы ГДЕ Ключевая");
м = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("GUID");
Константы.бяка.Установить(СтрСоединить(м,";"));
12 craxx
 
14.08.25
17:56
(10) А если кто-то удалит этот элемент справочника, что в константе будет? Битая ссылка?
13 X Leshiy
 
14.08.25
18:35
Больше ада)
14 Волшебник
 
14.08.25
18:52
(13) Можно строку закодировать в base64 и рассматривать как картинку. Получится фотография справочника
15 Волшебник
 
14.08.25
20:16
(14)+ При наличии неограниченной вычислительной мощности, можно найти эту строку в числе Пи и хранить только позицию, откуда начинать читать, и сколько байтов прочитать. То есть можно справочник любого объёма закодировать в два целых числа.

Я уверен, что можно и до одного свести, например, первое число — это целая часть, а второе число — это десятичная часть, записанная с хвостовыми нулями.

Или можно свести до одного комплексного числа, у которого первое число — это действительная часть, а второе число — это мнимая часть.
16 ejikbeznojek
 
14.08.25
19:11
Значениевстрокувнутр(ваша таблица)
17 PR
 
14.08.25
19:15
(0) Прекрасная задача на проверку дебилов
Вот ТС дебил, проверку не прошел
Ему сказали сделать бессмысленную константу и хранить в ней гуиды всего справочника через запятую, он и пошел делать
Не ну а чо, в ТЗ же так написано
18 Волшебник
 
14.08.25
20:05
(16)👍 Красавчег!
19 Волшебник
 
14.08.25
20:09
(17) Тест на бота? wiki:Тест_Тьюринга
20 Волшебник
 
14.08.25
20:53
(15) + Примерный алгоритм от DeepSeek, как закодировать любой объём информации в одно число (идеальный архиватор, который очень удобен для вселенского блокчейна https://wizard.mista.ru/music/my-songs/blockchain.html ):

Коды исходного справочника: [1, 4, 159]

1. Кодирование в искомую строку:
   [1 → "11", 4 → "14", 159 → "3159"]
   Искомая строка = "11143159"

2. Поиск в π (иррациональное число бесконечной длины, в котором содержится фсё!):
   Ищется последовательность "11143159" в дробной части π
   Найдена на позиции 1924 (пример), длина 8

3. Пи-фото справочника в виде комплексного числа. Заметьте, что это не хэш! Это снимок или вектор, который содержит всю исходную последовательность целиком, причём без потери точности, что важно для блокчейна:
   complex(1924, 8) = 1924 + 8i


4. Восстановление справочника из Пи-фото:
   Чтение 8 символов из π начиная с позиции 1924
   Декодирование "11143159" → [1, 4, 159]


Есть даже код на Python, который не запускался

Подробности
def build_kmp_table(pattern: str) -> list:
    """Строит таблицу префиксов для алгоритма Кнута-Морриса-Пратта"""
    table = [0] * len(pattern)
    length = 0
    i = 1
    while i < len(pattern):
        if pattern[i] == pattern[length]:
            length += 1
            table[i] = length
            i += 1
        else:
            if length != 0:
                length = table[length-1]
            else:
                table[i] = 0
                i += 1
    return table

def encode_numbers(numbers: list) -> str:
    """Кодирует список чисел в уникальную строку с префиксами длин"""
    return ''.join(f"{len(str(num))}{num}" for num in sorted(numbers))

def find_in_pi(pattern: str, pi_file: str = 'pi.txt') -> tuple[int, int]:
    """Ищет подстроку в числе π с использованием алгоритма KMP"""
    if not pattern:
        return 0, 0
    
    kmp_table = build_kmp_table(pattern)
    state = 0
    current_pos = 0
    found = False
    
    try:
        with open(pi_file, 'r') as f:
            # Пропускаем "3." в начале файла
            if f.read(2) == "3.":
                pass  # Уже в дробной части
            else:
                f.seek(0)  # Читаем файл с начала если нет "3."
            
            # Буферизированное чтение
            chunk_size = 131072  # 128KB
            buffer = ""
            keep = max(0, len(pattern) - 1)  # Сохраняем хвост для поиска
            
            while True:
                chunk = f.read(chunk_size)
                if not chunk:
                    break
                
                buffer += chunk
                index = buffer.find(pattern)
                
                if index != -1:
                    start_pos = current_pos + index
                    return start_pos, len(pattern)
                
                # Обновляем позицию и буфер
                if len(buffer) > keep:
                    processed = len(buffer) - keep
                    current_pos += processed
                    buffer = buffer[-keep:] if keep > 0 else ""
    
    except FileNotFoundError:
        pass
    
    return -1, 0  # Последовательность не найдена

def make_pi_photo(numbers: list, pi_file: str = 'pi.txt') -> complex:
    """Создает π-фото для списка чисел"""
    # Кодируем числа в уникальную строку
    pattern = encode_numbers(numbers)
    
    # Ищем подстроку в числе π
    start, length = find_in_pi(pattern, pi_file)
    
    # Возвращаем результат в виде комплексного числа
    return complex(start, length)

def decode_photo(photo: complex) -> tuple[int, int]:
    """Декодирует π-фото в позицию и длину"""
    return int(photo.real), int(photo.imag)

def decode_pi_sequence(pi_file: str, start: int, length: int) -> list:
    """Восстанавливает исходные числа из последовательности в π"""
    try:
        with open(pi_file, 'r') as f:
            # Пропускаем "3." и начальные позиции
            header = f.read(2)
            skip_chars = 2 + start if header == "3." else start
            
            # Позиционируем и читаем нужную длину
            f.seek(skip_chars)
            sequence = f.read(length)
            
            # Декодируем последовательность
            numbers = []
            i = 0
            while i < len(sequence):
                # Первая цифра - длина числа
                num_length = int(sequence[i])
                i += 1
                
                # Извлекаем само число
                num_str = sequence[i:i+num_length]
                i += num_length
                
                numbers.append(int(num_str))
            
            return numbers
    
    except (FileNotFoundError, ValueError, IndexError):
        return []  # Ошибка чтения или декодирования

# Пример использования
if __name__ == "__main__":
    # Пример с известными первыми цифрами π
    numbers = [1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
    photo = make_pi_photo(numbers)
    print(f"π-фото: {photo}")
    
    start, length = decode_photo(photo)
    print(f"Начало: {start}, Длина: {length}")
    
    # Восстановление исходных чисел из π
    restored = decode_pi_sequence('pi.txt', start, length)
    print(f"Восстановленные числа: {restored}")
    print(f"Совпадает с исходными? {sorted(numbers) == restored}")