Персональные данные и подготовка базы
Зачем обезличивать
Расширение выполняет на стороне вашей базы 1С код, который формирует результат запросов. Этот результат передаётся на сервис и может отображаться в Telegram. Если в выборку попадают ФИО сотрудников, наименования контрагентов и другие сведения, позволяющие идентифицировать человека, это могут быть персональные данные. За законность состава передаваемых данных отвечает клиент (см. оферту).
Обезличивание и минимизация набора полей снижают риски по 152-ФЗ и совпадают с рекомендацией юриста по данным третьих лиц (сотрудников и контрагентов в отчётах).
Что считать ПДн в отчётах
- Фамилия, имя, отчество, должность в связке с результатом, если можно выделить конкретное лицо.
- Наименование контрагента — часто не ПДн юрлица, но для ИП и физлиц может совпадать с ФИО.
- Суммы и остатки без привязки к людям обычно не являются ПДн сами по себе.
Как уменьшить риски
Код запросов, выполняемых у вас в базе, формирует и передаёт Сервис — изменить его на стороне клиента нельзя. Поэтому обезличивание достигается на уровне самих данных в базе-источнике. Есть два подхода:
Вариант 1 — База-посредник (рекомендуется при высоких требованиях)
Установите расширение не на рабочую базу, а на отдельную базу-посредник. Вы самостоятельно настраиваете обмен между рабочей базой и посредником: в ходе обмена данные очищаются или заменяются обезличенными значениями (например, «Контрагент 1» вместо реального наименования, «Сотрудник №5» вместо ФИО). Сервис будет видеть только посредника — без персональных данных из рабочей базы.
Вариант 2 — Рабочая база напрямую
Если данные, которые запрашивает Сервис (см. примеры кода ниже), не содержат персональных данных в вашей базе — используйте рабочую базу напрямую. Ознакомьтесь с примерами запросов ниже и убедитесь, что по ним не возвращается ФИО сотрудников, ИП или иных физических лиц. Если возвращается — воспользуйтесь вариантом 1 или заранее обезличьте нужные данные в самой базе.
Откуда берётся код у клиента
Сервис передаёт в установленное у вас расширение готовый код из регистра сведений ШаблоныЗапросовКоманд (ресурс КодВыполненияУКлиента). Расширение получает этот код при каждой синхронизации (GET CommandCodes) и выполняет его в вашей базе 1С. Клиент не имеет возможности изменить состав запрашиваемых полей — это зона ответственности оператора Сервиса.
Примеры ниже показывают фактический код, который будет выполнен в вашей базе. Используйте их, чтобы заранее понять, какие именно данные окажутся в ответе, и оценить, нужно ли вам обезличивание. Если нужно — настройте базу-посредник или обезличьте исходные данные в рабочей базе до подключения расширения.
Примеры кода 1С (выполняются у вас в базе)
Ниже — фактические фрагменты из сервиса на дату снимка. Символ | в текстах запросов — перенос строки в языке запросов 1С.
💵 Остатки денег на счетах — УНФ
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10 ПРЕДСТАВЛЕНИЕ(ДС.БанковскийСчетКасса) КАК Счет, СУММА(ДС.СуммаОстаток) КАК Сумма ИЗ РегистрНакопления.ДенежныеСредства.Остатки(, ) КАК ДС ГДЕ ДС.ТипДенежныхСредств = ЗНАЧЕНИЕ(Перечисление.ТипыДенежныхСредств.Безналичные) СГРУППИРОВАТЬ ПО ПРЕДСТАВЛЕНИЕ(ДС.БанковскийСчетКасса) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 10 ПРЕДСТАВЛЕНИЕ(ДС2.БанковскийСчетКасса), СУММА(ДС2.СуммаОстаток) ИЗ РегистрНакопления.ДенежныеСредства.Остатки(, ) КАК ДС2 ГДЕ ДС2.ТипДенежныхСредств = ЗНАЧЕНИЕ(Перечисление.ТипыДенежныхСредств.Наличные) СГРУППИРОВАТЬ ПО ПРЕДСТАВЛЕНИЕ(ДС2.БанковскийСчетКасса) УПОРЯДОЧИТЬ ПО Сумма УБЫВ"; Результат = Запрос.Выполнить().Выгрузить();
📈 Продажи за сегодня — УНФ
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ СУММА(ПродажиОбороты.СуммаОборот) КАК Сумма ИЗ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, , ) КАК ПродажиОбороты"; Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ТекущаяДатаСеанса())); Запрос.УстановитьПараметр("ДатаКон", КонецДня(ТекущаяДатаСеанса())); РЗ = Запрос.Выполнить(); В = РЗ.Выбрать(); С = 0; Если В.Следующий() Тогда С = В.Сумма; КонецЕсли; Результат = Новый Структура("Сумма,Дата", Формат(С, "ЧДЦ=2; ЧРГ= "), Формат(ТекущаяДатаСеанса(), "ДФ=dd.MM.yyyy"));
💳 Долги клиентов — УНФ
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10 РасчетыСПокупателямиОстатки.Контрагент.Наименование КАК Контрагент, СУММА(РасчетыСПокупателямиОстатки.СуммаОстаток) КАК СуммаДолга ИЗ РегистрНакопления.РасчетыСПокупателями.Остатки(, ) КАК РасчетыСПокупателямиОстатки ГДЕ РасчетыСПокупателямиОстатки.СуммаОстаток > 0 СГРУППИРОВАТЬ ПО РасчетыСПокупателямиОстатки.Контрагент.Наименование УПОРЯДОЧИТЬ ПО СуммаДолга УБЫВ"; Результат = Запрос.Выполнить().Выгрузить();
💵 Остатки денег на счетах — УТ
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 10
| ПРЕДСТАВЛЕНИЕ(ДенежныеСредстваБезналичныеОстатки.БанковскийСчет) КАК Счет,
| СУММА(ДенежныеСредстваБезналичныеОстатки.СуммаОстаток) КАК Сумма
|ИЗ
| РегистрНакопления.ДенежныеСредстваБезналичные.Остатки(, ) КАК ДенежныеСредстваБезналичныеОстатки
|
|СГРУППИРОВАТЬ ПО
| ПРЕДСТАВЛЕНИЕ(ДенежныеСредстваБезналичныеОстатки.БанковскийСчет)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 10
| ПРЕДСТАВЛЕНИЕ(ДенежныеСредстваНаличныеОстатки.Касса),
| СУММА(ДенежныеСредстваНаличныеОстатки.СуммаОстаток)
|ИЗ
| РегистрНакопления.ДенежныеСредстваНаличные.Остатки(, ) КАК ДенежныеСредстваНаличныеОстатки
|
|СГРУППИРОВАТЬ ПО
| ПРЕДСТАВЛЕНИЕ(ДенежныеСредстваНаличныеОстатки.Касса)
|
|УПОРЯДОЧИТЬ ПО
| Сумма УБЫВ";
Результат = Запрос.Выполнить().Выгрузить();
📈 Продажи за сегодня — УТ
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК Сумма ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ГДЕ РеализацияТоваровУслуг.Дата >= НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И РеализацияТоваровУслуг.Дата <= КОНЕЦПЕРИОДА(&Дата, ДЕНЬ) И РеализацияТоваровУслуг.Проведен = ИСТИНА";
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
РЗ = Запрос.Выполнить();
В = РЗ.Выбрать();
С = 0;
Если В.Следующий() Тогда С = В.Сумма; КонецЕсли;
Результат = Новый Структура("Сумма,Дата",Формат(С, "ЧДЦ=2; ЧРГ= "),Формат(ТекущаяДатаСеанса(), "ДФ=dd.MM.yyyy"));
💳 Долги клиентов — УТ
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 10
| РасчетыСКлиентамиОстатки.АналитикаУчетаПоПартнерам.Партнер.Наименование КАК Контрагент,
| СУММА(РасчетыСКлиентамиОстатки.СуммаОстаток) КАК СуммаДолга
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Остатки(, ) КАК РасчетыСКлиентамиОстатки
|ГДЕ
| РасчетыСКлиентамиОстатки.СуммаОстаток < 0
|
|СГРУППИРОВАТЬ ПО
| РасчетыСКлиентамиОстатки.АналитикаУчетаПоПартнерам.Партнер.Наименование
|
|УПОРЯДОЧИТЬ ПО
| СуммаДолга";
Результат = Запрос.Выполнить().Выгрузить();
💵 Остатки денег на счетах — БП
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10 ПРЕДСТАВЛЕНИЕ(Ост.Субконто1) КАК Счет, Ост.СуммаОстатокДт КАК Сумма ИЗ РегистрБухгалтерии.Хозрасчетный.Остатки(, Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.БанковскиеСчета), ) КАК Ост ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 10 ПРЕДСТАВЛЕНИЕ(Ост2.Субконто1), Ост2.СуммаОстатокДт ИЗ РегистрБухгалтерии.Хозрасчетный.Остатки(, Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Касса)), , ) КАК Ост2 УПОРЯДОЧИТЬ ПО Сумма УБЫВ"; Результат = Запрос.Выполнить().Выгрузить();
📈 Продажи за сегодня — БП
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК Сумма ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, , Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Выручка)), , , ) КАК ХозрасчетныйОбороты"; Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ТекущаяДатаСеанса())); Запрос.УстановитьПараметр("ДатаКон", КонецДня(ТекущаяДатаСеанса())); РЗ = Запрос.Выполнить(); В = РЗ.Выбрать(); С = 0; Если В.Следующий() Тогда С = В.Сумма; КонецЕсли; Результат = Новый Структура("Сумма,Дата", Формат(С, "ЧДЦ=2; ЧРГ= "), Формат(ТекущаяДатаСеанса(), "ДФ=dd.MM.yyyy"));
💳 Долги клиентов — БП
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10 ПРЕДСТАВЛЕНИЕ(Ост.Субконто1) КАК Контрагент, СУММА(Ост.СуммаОстатокДт - Ост.СуммаОстатокКт) КАК СуммаДолга ИЗ РегистрБухгалтерии.Хозрасчетный.Остатки(, Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателямиИЗаказчиками)), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты), ) КАК Ост СГРУППИРОВАТЬ ПО ПРЕДСТАВЛЕНИЕ(Ост.Субконто1) ИМЕЮЩИЕ СУММА(Ост.СуммаОстатокДт - Ост.СуммаОстатокКт) > 0 УПОРЯДОЧИТЬ ПО СуммаДолга УБЫВ"; Результат = Запрос.Выполнить().Выгрузить();