Работа с кодами - числами, датами, кодами справочников, номерами документов, идентификаторами в 1С и в других базах данных

28.11.17

Разработка - Универсальные функции

Поддерживается преобразование Кодов на основе Алфавитов, в том числе ''блочных" кодов - состоящих из блоков (подстрок) одинаковой длины (например: 8, 16, 32-битные коды, Хэши и т.п.). Функции доступны на Клиенте и на Сервере. Демо-примеры сделаны на управляемых формах. Тестировалось на платформах серии 8.3.10.

Скачать исходный код

Наименование Файл Версия Размер
Работа с кодами - числами ,датами, кодами справочников, номерами документов, идентификаторами в 1С и в других базах данных.:
.epf 26,75Kb
3
.epf 26,75Kb 3 Скачать

Первоначально стояла задача взаимно-однозначного соответствия (синхронизации ) областей кодов некоторых справочников, номеров документов 1С с идентификаторами таблиц сторонней Базы Данных. Примененный подход показался  интересным и получил дальнейшее развитие  - это  методы работы с Алфавитами, "блочные"  коды с расчетом  длин блоков,  использование Алфавитов-коллекций с кодами символов. Последние могут пригодиться например  при передаче Клиент-Сервер  "непередаваемых" символов Алфавита.

1. Изменение кода,  добавление числа

Это наиболее востребованная операция : к входному числовому или строковому Коду на основе входного Алфавита добавляется Число , полученное преобразуется в выходной Код на основе выходного Алфавита. Реализовано  функцией:

Функция Код_Изменить(Код,Алфавит,ДобавитьЧисло,АлфавитИлиТипВых,РазмерВых)
//
//Возвращает Код в виде Числа,Даты или Строки (в зависимости от параметра АлфавитИлиТипВых).
//
//ВХОД
//     Код                  -  Число, Дата  или строковый входной Код на основе Алфавита;
//     Алфавит              =(перечислены возможные значения):
//                          - Строка уникальных символов  (не менее двух), на основе которых был создан строковый входной Код; если "" - все Уникоды.
//                          - СписокЗначений Кодов символов, на основе которых создан входной Код.
//                          - Массив Кодов символов, на основе которых создан входной Код.
//                          Не используется, если Код является Числом или Датой.
//      ДобавитьЧисло       - целое положительное или отрицательное число; иначе  0.
//      АлфавитИлиТипВыхода =(перечислены возможные значения):
//                          - Тип("Число") или любое Число (интерпритируется как Тип("Число"));                                                     
//                          - Тип("Дата") или любая Дата (интерпритируется как Тип("Дата"));
//                          - Алфавит-строка уникальных символов (не менее двух), на основе которых создается возвращаемый код; если "" - все Уникоды.
//                          - Алфавит-СписокЗначений Кодов символов, на основе которых создается выходной Код
//                          - Алфавит-Массив Кодов символов, на основе которых создается выходной Код.
//                          В других случаях (например, Неопределено) - наследуются входные параметры.
//      РазмерВых           - Количество символов в выходном коде. Недостающие ("нулевые") символы добавляются слева, в качестве "нулевого" 
//                            символа берется первый символ выходного Алфавита.
//                            Не используется для  "не алфавитных" выходных Кодов.
   

Если Код является Числом, производиться суммирование с ДобавитьЧисло, на основе АлфавитИлиТипВыхода  производиться преобразование в  выходной Код. Если добавляемое число равно 0, тогда это просто преобразования Кода из одного Алфавита в другой (например из "десятичного"  в "двоичный", из "русского" в "латиницу"  и т.п.).    

2. Методы Алфавитов

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

Код_Алфавит(Метод,Алфавит,Строки,ИсключаемыеСимволы,ДопИзменение,ТипВыхода)
//
//Возвращает Алфавит - Строку символов, СписокЗначений кодов символов или Массив кодов символов.
//
//ВХОД
//   Метод = "+" или "Сумма" - Добавляем к Алфавиту все отсутствующие в нем символы из строк параметра "Строки" ; 
//           "-" или "Разность" - Убираем из Алфавита все символы, присутствующие в строках параметра "Строки";
//           "=" или "Пересечение" - Получаем Строку из символов, присутствующих и в Алфавите и в строках параметра "Строки"
//           "#" или "Неповторение" - Получаем Строку из неповторяющихся символов  Алфавита и строк из параметра "Строки" ;  
//   Алфавит         - строка из неповторяющихся (уникальных) символов (отсортированность не обязательна,может быть пустым);
//   Строки          - строка или массив строк из любых символов;
//   ИсключаемыеСимв - строка из символов, которые запрещено использовать в алфавите;
//   ДопИзменение    = (перечислены возможные значения):-   
//                   - "Возр" - сортировать полученный Алфавит по возрастанию кодов Символов;
//                   - "Убыв" - сортировать полученный Алфавит по убыванию кодов символов;
//                   - "Инв"  - инвертирование полученного Алфавита (переписать справа- налево) 
//                   - [целое число] - код для ГСЧ ("случайная" перестановка символов полученного Алфавита.
//    ТипВыхода      - "Строка" или "СписокЗначений" или "Массив" (умолчание - "Строка"). 



Так, "пролистав"  нужную таблицу  (или таблицы) и собрав Коды в массив Строки, создаем Алфавит для данной таблицы (таблиц):

Алфавит= Код_Алфавит("+","",Строки,,"Возр").

 Можно применять эту функцию и на каждом шаге сканирования :

Алфавит= Код_Алфавит("+",Алфавит,Код); 

 а затем отсортировать:

Алфавит= Код_Алфавит(,Алфавит,,,"Возр");

3. "Блочные" Коды. Изменение, добавление числа.

В некоторых случаях Код-строка состоит  из одинаковых блоков определенной длины (подстрок). Так, например, построены битные строки при 8, 16 или 32 битном кодировании,  Хэши и т.п.   Для преобразования таких строк  предназначена функция:

Код_БлочныйИзменить(Код,Алфавит,ДлинаБлока,ДобавитьЧисло,АлфавитВых,ДлинаБлокаВых,ТипВыхода,Проверять,Ошибка)
//
//Функция возвращает выходной  "блочный"  Код  в зависимости от параметра ТипВыхода:
//  - или в виде Строки из соединенных подстрок  одинаковой длины (блоков)
//  - или в виде Массива подстрок одинаковой длины (блоков)
//  - или в виде Списка Значений подстрок одинаковой длины (блоков)
//  Работает со строковыми  "целыми" (не "дробными") Кодами на основе строковых Алфавитов.
//
//ВХОД
//  Код           - (входной) - строка символов  принадлежащих Алфавиту;
//  Алфавит       - строка уникальных символов  (не менее двух), на основе которых был создан входной Код 
//                  (если пустая строка  - подразумеваются все Уникоды). 
//  ДлинаБлока    - количество символов во входном  коде, рассматриваемых как единое целое (блок, подстрока).
//  ДобавитьЧисло - Добавляемое к Коду целое положительное или отрицательное число (в других случаях - 0).
//  АлфавитВых    - строка уникальных символов  (не менее двух), на основе которых будет создан выходной Код;
//                  (если пустая строка - подразумеваются все Уникоды).
//  ДлинаБлокаВых - количество символов в выходном коде, рассматриваемых как единое целое (блок,подстрока).   
//  ТипВыхода     - "Строка" или "Массив" или "СписокЗначений"  с  блоками
//  Проверять     - Если Истина - проверяются (и пересчитываются, если нужно) длины блоков    
//                  входа и выхода  (используется функция Код_ РазмерБлоков(...)).   
//
// ВЫХОД
//  Ошибка        - описание ошибки или пустая строка.



4. Проверка и расчет длин блоков

Для расчета  возможных длин блоков  в блочных Кодах предназначена функция:

Код_РазмерБлоков(РазмерАлфавита,ДлинаБлока,РазмерАлфавитаВых,ДлинаБлокаВых,РасчДлинаБлока,РасчДлинаБлокаВых)
//
//Возвращает пустую строку  или, в случае ошибки - строку с описанием ошибки.
//Внимание:  в случае ошибки все равно производиться расчет  "минимальных" значений длин входного и выходного блоков!
//
//ВХОД
//  РазмерАлфавита    - размер входного Алфавита;
//  ДлинаБлока        - количество символов во входном коде, рассматриваемых как единое целое  (блок,подстрока)
//  РазмерАлфавитаВых - размер выходного Алфавита;
//  ДлинаБлокаВых     - количество символов в выходном коде, рассматриваемых как единое целое  (блок,подстрока)       
//
//ВЫХОД
//  РасчДлинаБлока    - расчитанная длина входного  Блока
//  РасчДлинаБлокаВых - расчитанная длина выходного Блока

Данная функция используется для проверки-расчета длин блоков в функции  Код_БлочныйИзменить(...). Однако она может использоваться и самостоятельно, например для расчета минимальной длины получаемого кода при перекодировке из одного Алфавита в другой функцией  Код_Изменить(...). Вот так  получаем расчетную длину выходного кода:

РасчетнаяДлинаВыходногоКода=0;
Код_РазмерБлоков(РазмерВходногоАлфавита,ДлинаВходногоКода,РазмерВыходногоАлфавита,,,РасчетнаяДлинаВыходногКода);

 

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

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

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2851    1    John_d    9    

56

GUID в 1С 8.3 - как с ними быть

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

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4977    atdonya    22    

51

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    4087    ke.92@mail.ru    16    

62

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    9315    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2196    24    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16323    141    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7342    quazare    8    

110
Оставьте свое сообщение