Довольно часто, в процессе работы разработчика 1С требуется обфуцировать (подменить) различные данные. Например для целей создания тестовой базы для демонстрации или разработки. Рассмотрим вариант подмены на примере персональных сведений о сотрудниках, такие как СНИЛС и ИНН.

    Требования: Значение не должно меняться в процессе повторных замен, т.е. повторная попытка замены исходных данных должна возвращать аналогичное значение, второе - получаемые значения должны проходить проверку валидности, т.е. должны быть рассчитаны контрольные числа и в третьих не должно быть простого способа обратного восстановления данных. 

1. Генерация ИНН.

Будем генерировать новый ИНН на основе текущего путем расчета хэша + некоторый ключ, который сами себе определим. Функция ниже на входе принимает 2 значения реальный ИНН и ключ (произвольный текст). На выходе получаем псевдо-случайный фиктивный ИНН который валиден с точки зрения проверки контрольных чисел. 

Функция СгенерироватьИНН(ИНН, КлючХешированияДанных = "")
		
	ХешИНН = Новый ХешированиеДанных(ХешФункция.CRC32);
	ХешИНН.Добавить(ИНН);
	ХешИНН.Добавить(КлючХешированияДанных);
	ИНН_Хеш = ХешИНН.ХешСумма;
	ИНН_Хеш = Прав("0000000000"+СтрЗаменить(ИНН_Хеш,Символы.НПП,""),10);
	
	ИНН = "";
	Множители11=СтрРазделить("0,7,2,4,10,3,5,9,4,6,8,0",",");
	Множители12=СтрРазделить("0,3,7,2,4,10,3,5,9,4,6,8",",");
	
	КонтрольнаяСумма11=0;
	КонтрольнаяСумма12=0;
	Для М=1 По 10 Цикл
		Цифра=Число(Сред(ИНН_Хеш,М,1));
		ИНН=ИНН+Цифра;
		КонтрольнаяСумма11=КонтрольнаяСумма11+Цифра*Множители11[М];
		КонтрольнаяСумма12=КонтрольнаяСумма12+Цифра*Множители12[М]
	КонецЦикла;
	Цифра=(КонтрольнаяСумма11%11)%10;
	ИНН=ИНН+Цифра;
	ИНН=ИНН+((КонтрольнаяСумма12+Цифра*Множители12[М])%11)%10;
	
	Возврат ИНН;
	
КонецФункции

2. Генерация СНИЛС.

Для генерации СНИЛС используем аналогичный методологический подход.

Функция СгенерироватьСНИЛС(СНИЛС_ВХ, КлючХешированияДанных = "") 

	ХешИНН = Новый ХешированиеДанных(ХешФункция.CRC32);
	ХешИНН.Добавить(СНИЛС_ВХ);
	ХешИНН.Добавить(КлючХешированияДанных);
	СНИЛС = ХешИНН.ХешСумма;
	СНИЛС = Прав("000000000"+СтрЗаменить(СНИЛС,Символы.НПП,""),9);
 	
	Если Число(СНИЛС)>1001998 Тогда
		Всего=0;
		Для М=1 По 9 Цикл
			Всего=Всего+Число(Сред(СНИЛС,10-М,1))*М
		КонецЦикла;
		Остаток=Всего%101;
		СНИЛС=СНИЛС+"."+?(Остаток=100,0,Остаток)
	Иначе
		СНИЛС=СНИЛС+".00"
	КонецЕсли;
	
	Возврат Формат(Число(СНИЛС),"ЧЦ=11; ЧДЦ=2; ЧРД=' '; ЧРГ=-; ЧВН=");

КонецФункции 

Вывод: Используя эти функции можно легко подготовить информационную базу для тестирования или демонстрации.

Docker, широко известная платформа, упрощает управление приложениями в изолированных средах для разработчиков, предоставляя мощные возможности контейнеризации, необходимые в современной разработке программного обеспечения. Для эффективного использования Docker важно знать основные команды для управления контейнерами и образами. Ниже рассмотрим ключевые команды Docker:

1. Команда "docker run" эта команда создает и запускает контейнер из образа, позволяя настраивать контейнер с помощью различных параметров и аргументов.

Примеры использования:
- Запуск контейнера в фоновом режиме, проброс порта с хоста на контейнер и передача переменной окружения: `docker run -d -p 8080:80 -e env_var=value nginx`
- Запуск контейнера с ограничением ресурсов, например, ограничение оперативной памяти до 2 гигабайт: `docker run --memory=2g myIMG`

2. Команда "docker start" используется для запуска остановленных контейнеров, чтобы возобновить их работу.

Примеры использования:
- Запуск одного остановленного контейнера: `docker start mycontainer`
- Запуск нескольких остановленных контейнеров: `docker start first_container second_container third_container`

3. Команда "docker stop" останавливает работающий контейнер.

Примеры использования:
- Остановка одного работающего контейнера: `docker stop mycontainer`
- Остановка нескольких контейнеров: `docker stop first_container second_container third_container`
- Остановка контейнера через определенное время (например, через 30 секунд): `docker stop -t 30 mycontainer`

4. Команда "docker restart" позволяет перезапустить контейнер.

Примеры использования:
- Перезапуск одного контейнера:

docker restart mycontainer

- Перезапуск нескольких контейнеров:

docker restart first_container second_container third_container

- Перезапуск через определенное время:

docker restart -t 30 mycontainer

5. Команда "docker rm" используется для удаления одного или нескольких остановленных контейнеров.

Примеры использования:
- Удаление одного контейнера:

docker rm mycontainer

- Удаление нескольких контейнеров:

docker rm first_container second_container third_container

- Принудительное удаление (позволяет удалить контейнер, который выполняется в данный момент):

docker rm -f mycontainer

6. Команда "docker ps" отображает список активных контейнеров в системе и предоставляет информацию о них, такую как их id, имена, статус, порты и использование ресурсов.

Пример использования:
- Отображение списка только работающих контейнеров:

docker ps

Команды для работы с контейнерами в Docker:

- Отображение списка всех контейнеров (включая остановленные):

docker ps -a

- Отображение размера занимаемого дискового пространства контейнерами:

docker ps -s

Команды для управления образами:

7. Команда "docker pull" загружает образы из удаленного репозитория Docker Hub и предоставляет доступ к готовым образам.

Примеры использования:
- Загрузка последней версии образа Ubuntu:

docker pull ubuntu

- Загрузка определенной версии образа, например, Ubuntu версии 20.04:

docker pull ubuntu:20.04

8. Команда "docker build" эта команда используется для создания пользовательского образа Docker на основе Dockerfile, который содержит инструкции для создания образа.

Примеры использования команды "docker build":
- Сборка образа из текущего каталога, используя Dockerfile из этого каталога:

docker build -t myIMG:latest .

- Сборка образа из удаленного репозитория Git, содержащего Dockerfile:

docker build -t myIMG:latest https://github.com/username/repo.git#branch

9. Команда "docker push" эта команда используется для загрузки пользовательского образа в Docker Hub или другие хранилища образов, позволяя делиться созданным образом с другими пользователями Docker.

Примеры использования:
- Загрузка в репозиторий по умолчанию:

docker push username/myIMG:1.0

- Загрузка в другое хранилище, например, репозиторий ECR:

docker push myecr/myIMG:latest

10. Команда "docker rmi" эта команда используется для удаления образов с локального хоста.

Пример использования:
- Удаление образа:

docker rmi myIMG

Команда "docker rmi" используется для удаления нескольких образов. С помощью этой команды вы можете удалить образы с указанными идентификаторами или тегами.

Пример использования команды "docker rmi":

docker rmi myIMG:1.0 myotherimage:latest

11. Команда "docker images" служит для вывода списка образов, находящихся на вашем локальном хосте. Она предоставляет информацию о доступных образах, такую как идентификаторы, размеры, теги и другие детали.

Примеры использования команды "docker images":

1. Вывод всех образов:

docker images

2. Вывод образов по конкретному репозиторию:

docker images myrepository/myIMG

12. Управление хранилищами данных в Docker выполняется с помощью команды "docker volume create". Docker тома представляют собой постоянные хранилища данных, которые обеспечивают контейнерам возможность хранить и обмениваться информацией между собой. Использование томов позволяет сохранять данные даже после удаления или перезапуска контейнеров.

Примеры использования команды "docker volume create":

1. Создание нового тома:

docker volume create myvolume

2. Создание тома с указанием драйвера:

docker volume create --driver local myvolume

3. Создание тома с добавлением меток:

(Пример использования меток)

docker volume create --label mylabel=myvalue myvolume

13. Команда "docker run -v" используется для привязки тома к контейнеру при его запуске. Это позволяет контейнеру обращаться к постоянному хранилищу данных, предоставляемому этим томом.

Примеры использования:

Привязка существующего тома:

docker run -v myvolume:/data myIMG

Привязка тома с указанием дополнительных опций (например, read only):

docker run -v myvolume:/data:ro myIMG

14. Команда "docker volume rm" используется для удаления тома с локального хоста. При выполнении этой команды все данные, связанные с удаляемым томом, будут безвозвратно утеряны, поэтому будьте осторожны.

Примеры использования:

Удаление одного тома:

docker volume rm myvolume

Удаление нескольких томов:

docker volume rm first_volume second_volume third_volume

15. Команда "docker volume ls" позволяет вывести список всех доступных томов на локальном хосте. Эта команда предоставляет возможность просмотра существующих томов и получения информации о них, такую как их имена и идентификаторы.

Пример использования:

docker volume ls

После выполнения данной команды будет выведен список всех доступных томов на вашем локальном хосте. Результат будет содержать столбцы с информацией о каждом томе, включая их имена, идентификаторы и дополнительные сведения, если они доступны. Ниже приведен пример вывода:

driver     volume name
local      myvolume1
local      myvolume2

16. Команды Docker Compose
Docker Compose работает поверх Docker и позволяет управлять множеством контейнеров в рамках одного проекта. Ниже приведены основные команды (принципы работы большинства из них вам уже знакомы):

- "docker-compose up" - запускает приложение со всеми контейнерами, информация о которых есть в файле docker-compose.yml. Если файл не указан, по умолчанию используется файл в текущем каталоге.
- "docker-compose down" - останавливает и удаляет все контейнеры, а также тома, связанные с ними.

Команды Docker Compose для управления контейнерами:

- "docker-compose start" - запускает остановленные контейнеры;
- "docker-compose stop" - останавливает работу запущенных контейнеров без их удаления;
- "docker-compose restart" - перезапускает контейнеры;
- "docker-compose build" - позволяет обновить образы или создать их заново, если они были изменены;
- "docker-compose logs" - выводит журналы состояния;
- "docker-compose ps" - отображает текущее состояние контейнеров;
- "docker-compose pull" - загружает последние версии образов для сервисов, описанных в файле docker-compose.yml.

Заключение
Это основные команды Docker, необходимые для управления контейнерами и образами. Они помогут вам эффективно использовать Docker в вашей работе с разработкой программного обеспечения.

1С:СЛК (система лицензирования конфигураций) - это инструмент, который используется для управления лицензированием прикладных решений на 1С Предприятие. Он позволяет владельцам разработок на 1С контролировать использование своих программ и получать доход от их использования.
Развертывание 1С:СЛК на Docker Compose - это удобный способ установки и настройки системы лицензирования контента на вашем сервере. Docker Compose позволяет создавать и управлять контейнерами Docker в одной команде.
Для развертывания 1С:СЛК на Docker Compose необходимо выполнить следующие шаги:
1. Установить Docker и Docker Compose на ваш сервер.
2. Создать файл Docker Compose с конфигурациями контейнеров 1С:СЛК .
3. Запустить контейнеры 1С:СЛК с помощью команды docker-compose up.
4. Настроить параметры контейнеров и настроить доступ к ним.
5. Протестировать работу системы лицензирования контента 1С.
6. Настроить мониторинг и логирование для обнаружения ошибок и проблем в работе 1С:СЛК.
После развертывания СЛК на Docker Compose вы получите надежную и гибкую систему лицензирования прикладных решений 1С, которая позволит вам контролировать их использование и получать дополнительный доход.
Консолидация данных. Функциональная схема.

Функциональная схема системы Консолидации данных

    Ниже представлена функциональная схема, некоторой, условной системы консолидации данных. Описано назначение основных подсистем. Приведена примерная структура и связи объектов.

  1. Отчет КД

    Отчет КД - центральный объект системы. Отчет это результат деятельности всех подсистем консолидации данных. Отчет получает подготовленные данные из регистра. В дальнейшем выполняется логика самого отчета по представлению данных пользователю. Пользователь имеет возможность управлять структурой и отборами в отчете. А также сохранять варианты настроек как для себя так и других пользователей. 

  • Настройка отчета

    Настройки отчета основная подсистема определяющая поведение отчета. Определяет порядок получения данных, структуру хранения для отчета и т.д.

  • Параметры

Список параметров при помощи которых будет производиться выборка данных.

  • Источники

    Источники - так называемый периметр данных, определяют состав узлов получения данных для отчета.

  • Настройка заданий

    Настройка отчета имеет возможность получать данных по расписанию. Для этого есть настройка регламентного задания.

  • Алгоритмы

Алгоритмы предназначены для подготовки данных. Могут применяться для дополнения или очистки данных.

  • Структура данных

Структура данных хранит названия и тип полей отчета, а также условия их агрегации и пр. настройки.

  1. Данные

Хранилище данных реализовано в виде регистров.

  • Хранение данных

Используется трех ступенчатая структура хранения данных. Такая структура выбрана не случайно - цель обеспечение максимальной производительности системы по извлечению данных.

  • Обработка данных

    Перед загрузкой данные предварительно обрабатываются алгоритмами, выполняется процесс нормализации. Выполняются алгоритмы обработки данных по консолидации и агрегации.

  • Регламентные задания

    Регламентные задания по получению данных настраиваются в настройке отчета. Регламентное задание создает пакет сообщений по параметрам настройки, причем параметры могут вычисляться по произвольной формуле.

  • Получение данных

При получении данных от источника производиться входной контроль структуры сообщения. Контролируется код ответа, ошибки выполнения. Если ошибок нет, первичные данные сохраняются в системе для последующей обработки.

  1. Глобальные параметры

Настройки на уровне системы в целом, определяющие функциональность.

  • Общие настройки

    Настройки определяющие режим работы и порядок действий консолидации данных.

  1. Общие подсистемы

Системообразующие модули служебного назначения.

  • Диагностика подключений

Роль подсистемы диагностики подключений - определить доступность узлов до начала взаимодействия по отправке пакетов. Информирование пользователя, администратора системы о неполадках подключений или отсутствие ответов от источников, для принятия мер.

  • Системные отчеты

Системные отчеты предназначены для отображения статистики по сообщениям, подключениям, доступности узлов и пр.

  • Многопоточное получение данных

    Многопоточная реализация механизма отправки и получения данных обязательная подсистема. Она позволяет ускорить сбор данных источников, максимально задействовать ресурсы оборудования. Состоит из двух частей.

  • Управляющее ФЗ

Регламентное фоновое задание реализующее подготовку потоков для отправки сообщений.

  • Рабочее ФЗ

    Рабочее фоновое задание состоит из нескольких потоков. Параметры потоков задаются в общих настройках системы.

  • Служебные обработки

    Служебные обработки позволяют проводить обслуживание системы. Например, групповое создание сообщений для получения данных отчетов по всем источникам за текущий или предыдущий год. 

 

Сложение таблиц значений. Технологии 1С.

    Для некоторых типов задач, решаемых на Платформе 1С, часто необходимо сложение таблиц значений. Данная задача обычно решается при помощи двух основных алгоритмов объединения таблиц значений: по строкам и по столбцам. На разных сайтах приводятся различные мнения относительно производительности обоих методов, однако однозначного ответа мне получить не удалось. Пришлось проверить оба способа экспериментально.

Тестирование проводилось на платформе 1С 8.3.19, в качестве слагаемых таблиц брались 2 таблицы по 70 колонок и 500 000 строк. Обе таблицы были одинаковой структуры т.е. совпадали количество и названия колонок.

Результат получился следующий: для данного тестового примера производительность способа №1 получилась на 80% быстрее, чем для способа №2. Таким образом, основным для реализации решения был выбран алгоритм по способу №1. Способ №2 не более чем зарядка для ума.

Вывод: Для реальных проектов рекомендуется способ №1. Для практических задач способ №2 не пригоден.

Ниже приводиться код исполняемых модулей.

Способ №1 - по строкам:

Процедура СложитьТаблицы(ИтоговаяТаб, СлагаемаяТаб) Экспорт
      
    Если ИтоговаяТаб.Количество() = 0 Тогда
        ИтоговаяТаб = СлагаемаяТаб;
        Возврат;        
    КонецЕсли;
    
    Для Каждого СтрСлаг ИЗ СлагаемаяТаб Цикл
        НовСтр = ИтоговаяТаб.Добавить();
        ЗаполнитьЗначенияСвойств(НовСтр,СтрСлаг);        
    КонецЦикла;
        
КонецПроцедуры 

Способ №2 - по столбцам

Процедура СложитьТаблицы(ИтоговаяТаб, СлагаемаяТаб) Экспорт
    
    Если ИтоговаяТаб.Количество() = 0 Тогда
        ИтоговаяТаб = СлагаемаяТаб;
        Возврат;        
    КонецЕсли;
         
    Для Сч = 1 По СлагаемаяТаб.Количество() Цикл 
        ИтоговаяТаб.Вставить(0); 
    КонецЦикла;
    
    Для Сч = 0 По СлагаемаяТаб.Колонки.Количество()-1 Цикл
        ИтоговаяТаб.ЗагрузитьКолонку(СлагаемаяТаб.ВыгрузитьКолонку(Сч), Сч);
    КонецЦикла;