Информационная система 1С ИТС: "При разработке решений следует учитывать, что опасно не только непосредственное выполнение кода, написанного в режиме Предприятие, но и те места, где методами Выполнить или Вычислить исполняется код, сконструированный на основе параметров, переданных в серверные функции и процедуры. Ограничение не распространяется на код, выполняемый на клиенте."
Скачать файл
ВНИМАНИЕ:
Файлы из Базы знаний - это исходный код разработки.
Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы.
Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных.
Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Вы внимательно прочитали анонс, остановились, осознали всю глубину ОПАСНОСТИ выполнения кода написанного в режиме предприятия.
И если "Этот анонс не про вас", тогда читаем дальше.
Обработка, используя механизм БСП Дополнительные отчеты и обработки позволяет быстро настроить и выполнить произвольный алгоритм. Конечно писать код в режиме предприятия мягко говоря не удобно, но бывает код который пишется(исправляется) быстрее чем конфигуратор открывается.
Возможности:
- Механизм БСП дает возможность запускать обработку из форм списков и объектов по одному или нескольким объектам назначения непосредственно или в фоне.
- Обработка позволяет сохранять произвольный алгоритм в общем хранилище, настраивать доступность по видам объектов и пользователям.
- Передавать произвольные параметры в процедуру выполнения алгоритма.
- Настройка алгоритмов доступна Ответственному за дополнительную обработку.
Краткая инструкция:
- Добавить обработку в Дополнительные отчеты и обработки.
- Настроить размещение в объектах.
- Вызвать команду из командной панели формы.
- Добавить, настроить и сохранить(при необходимости) произвольный алгоритм. Для настройки перейти в режим разработчика. В режиме пользователя для редактирования доступны только дополнительные параметры.
Объект назначения (откуда вызвали обработку) = Параметры.Ссылка
Дополнительные параметры = Параметры.Дополнительно.<Имя параметра>
- Выполнить. Если вызываем из списков, тогда можно выбрать несколько объектов, алгоритм будет выполнен для каждого объекта. Есть возможность выполнить в небезопасном режиме, например для работы с файлами.
Несколько примеров произвольных алгоритмов обработки. Для чего ее вообще можно использовать.
Объект = Параметры.Ссылка;
Сообщить(Строка(Объект.УникальныйИдентификатор()));
Популярная сейчас тема СЗВ-ТД. Установить флаг ОтразитьВТрудовойКнижке в последних кадровых документах до 2020.
Период = Параметры.Дополнительно.Период;
Организация = Параметры.Дополнительно.Организация;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КадроваяИсторияСотрудниковСрезПоследних.Регистратор КАК Регистратор,
| КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
| ВЫБОР
| КОГДА КадроваяИсторияСотрудниковСрезПоследних.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.НачальныеДанные)
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ОтразитьВТрудовойКнижке
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&Период, ГоловнаяОрганизация = &Организация) КАК КадроваяИсторияСотрудниковСрезПоследних
|ГДЕ
| НЕ КадроваяИсторияСотрудниковСрезПоследних.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
|
|УПОРЯДОЧИТЬ ПО
| КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Наименование";
Запрос.Параметры.Вставить("Период", Период);
Запрос.Параметры.Вставить("Организация", Организация);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ТекстСообщения = "" + ВыборкаДетальныеЗаписи.Сотрудник + " документ " + ВыборкаДетальныеЗаписи.Регистратор + " ";
Если ВыборкаДетальныеЗаписи.ОтразитьВТрудовойКнижке Тогда
ДокОбъект = ВыборкаДетальныеЗаписи.Регистратор.ПолучитьОбъект();
Если ТипЗнч(ДокОбъект) = Тип("ДокументОбъект.ПриемНаРаботуСписком") или ТипЗнч(ДокОбъект) = Тип("ДокументОбъект.КадровыйПереводСписком") Тогда
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Сотрудник", ВыборкаДетальныеЗаписи.Сотрудник);
НайденныеСтроки = ДокОбъект.Сотрудники.НайтиСтроки(ПараметрыОтбора);
Для Каждого СтрокаДок Из НайденныеСтроки Цикл
СтрокаДок.ОтразитьВТрудовойКнижке = Истина;
КонецЦикла;
//Сообщить(ТекстСообщения + " не поддерживаемый вид документа");
ИначеЕсли ТипЗнч(ДокОбъект) = Тип("ДокументОбъект.ПриемНаРаботу") или ТипЗнч(ДокОбъект) = Тип("ДокументОбъект.КадровыйПеревод") Тогда
ДокОбъект.ОтразитьВТрудовойКнижке = Истина;
Иначе
Сообщить(ТекстСообщения + " не поддерживаемый вид документа");
КонецЕсли;
ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.Записать();
Иначе
Сообщить(ТекстСообщения + " нельзя отразить в трудовой книжке");
КонецЕсли
КонецЦикла;
Установить наименование подразделений для СЗВ-ТД
СпрСсылка = Параметры.Ссылка;
ТекУровень = СпрСсылка.Уровень();
ТекЭлемент = СпрСсылка;
НаименованиеПолное = "";
Пока ТекУровень > 0 Цикл
НаименованиеПолное = НаименованиеПолное + ?(ЗначениеЗаполнено(НаименованиеПолное),"/","") + СокрЛП(ТекЭлемент.Наименование);
ТекЭлемент = ТекЭлемент.Родитель;
ТекУровень = ТекЭлемент.Уровень();
КонецЦикла;
Сообщить(НаименованиеПолное);
СпрОбъект = СпрСсылка.ПолучитьОбъект();
СпрОбъект.ОбменДанными.Загрузка = Истина;
СпрОбъект.НаименованиеПолное = НаименованиеПолное;
СпрОбъект.Записать();
Тестировал на версии 1С:Предприятие 8.3 (8.3.15.1830)
В конфигурациях Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.10.309), Бухгалтерия предприятия, редакция 3.0 БИТ.ФИНАНС 3.1 (3.0.75.58/3.1.44.4).