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

28.11.17

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Работа с кодами - числами ,датами, кодами справочников, номерами документов, идентификаторами в 1С и в других базах данных.:
.epf 26,75Kb
3
3 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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



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

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

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

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

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

 

См. также

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

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

21.05.2024    25290    dimanich70    82    

149

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

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

1 стартмани

18.03.2024    4519    3    John_d    11    

57

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

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

12.02.2024    25748    atdonya    25    

58

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

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

30.11.2023    6097    ke.92@mail.ru    17    

65

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

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

28.08.2023    16612    YA_418728146    8    

170

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

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

2 стартмани

22.08.2023    4285    73    progmaster    10    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 1C:Бухгалтерия 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    19164    181    sapervodichka    112    

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