Приветствую вас, читающие это статью. Раз уж так вышло, что вы попали сюда, значит вас, как и меня, занесла нелегкая познакомиться-таки с конфигурацией 1С:Документооборот. И скорее всего дошло до того, что нужно написать какой-нибудь скрипт, чтобы облегчить кому-то жизнь и что-нибудь автоматизировать. Именно так случилось и со мной пару-тройку дней назад.
Я громко и долго спрашивал гугл, чтобы он выдал хоть какую-нибудь информацию о том, как это делать, но все было тщетно. Далее я нашел книгу по конфигурации, но и там было все очень поверхностно. В итоге мне помогли две вещи:
1) Моя тема на Инфостарте, где я задал вопрос и меня наставили на истинный путь.
Обсуждение оказалось довольно коротким, то есть люди знают о скриптах, но увы на форуме я больше информации не нашел, ну или плохо искал, посему решил поделиться своим личным опытом в этой статье.
2) Очень помогла обработка "Эмулятор скриптов". Прям жизнь облегчила и помогла понять, как все это работает.
Взять ее можно тут.
Ну что, вводная часть прошла, переходим к практике.
Итак задача стояла следующая:
1) Подставить в форму договора ответственного в родительном падеже
2) Так же подставить его должность в родительном падеже
3) Ну и основание доверенности, которое нужно было взять из связанного с договором документа.
По идее задача простая, если скажем реализовать такое, скажем, в бухгалтерии. Но как оказалось, в документообороте все еще проще, но давайте по порядку:
Заходим в конфигурацию в режиме предприятия. Далее идем в раздел "НСИ", выбираем виды документов и выбираем документ, для которого у вас есть шаблон договора в формате Word. Мой пример на документе договор поставки, поэтому захожу в него и вижу такую картину:
Справа от шаблона есть кнопочка "открыть". Нажимаем.
На вкладке реквизиты, платформа уже сама показывает реквизиты, которые можно вставить в шаблон. То есть отметив галочками нужные и нажав готово, у нас открывается шаблон, где в самом верху появляются отмеченные ранее поля для заполнения. Они выделены серым цветом.(При печати и отправке этот цвет не отображается).
Расставляем параметры в нужные места в документе. Как-то так:
Все бы ничего, но нет нужных мне полей. То есть я могу вытащить ответственного, но он будет в именительном падеже. А вот связанного документа и должности здесь нет совсем.
Вот тут-то и приходят на помощь скрипты.
На вкладке где отмечали реквизиты, переходим на вкладку скрипты и добавляем свои поля, после того как их заполним, снова откроется шаблон и нам нужно будет их расставить по местам.
Должность есть в карточке пользователя, а связанный документ находится на вкладке "связи" в договоре.
Теперь пришло время прописать скрипты и вот тут самое интересное, все это можно писать точно также будто мы пишем в конфигураторе, с одним маленьким НО: нужно использовать конструкцию "Файл.ВладелецФайла", тем самым мы будем обращаться к владельцу шаблона, то есть документу, откуда шаблон будет формировать заполненный договор.
Вот какими скриптами я решил поставленную задачу:
1) Итак:
//Вытащить связь с доком
//Конкретно под доверенность
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СвязиДокументов.СвязанныйДокумент
|ИЗ
| РегистрСведений.СвязиДокументов КАК СвязиДокументов
|ГДЕ
| СвязиДокументов.Документ = &Документ";
Запрос.УстановитьПараметр("Документ", Файл.ВладелецФайла); //Файл.ВладелецФайла - ссылка на договор
Результат = Запрос.Выполнить().Выбрать();
Результат.Следующий();
РезультатОбработки = СтрДоверенность; // РезультатОбработки это как раз переменная, из которой и будет подставляться значение в параметр.
2) А вот тут, что мне особенно понравилось. В конфигурации, в общем модуле есть функция склонения и в скрипте можно к ней обратиться.
//Скрипт склонения
Результат = "";
Склонение = ФизическиеЛица.Просклонять(Строка(Файл.ВладелецФайла.Ответственный), 2, Результат); //Файл.ВладелецФайла.Ответственный - ссылка на ответственного из документа.
РезультатОбработки = Результат;
3) Аналогичным способом используем функцию из общего модуля для того чтобы получить должность пользователя(ответственного).
//Должность
Результат = "";
Должность = РаботаСПользователями.ПолучитьДолжность(Файл.ВладелецФайла.Ответственный);
СклДолжность = ФизическиеЛица.Просклонять(Строка(Должность), 2, Результат);
РезультатОбработки = Результат;
И вот он результат:
Вот так все просто. Но шел я к этому в течении нескольких часов. Единственное чего еще хотелось бы, так это вызов конструктора запросов в форме написания скриптов, но это уже мои придирки))).
Еще раз скажу, что мне очень помогла обработка "Эмулятор скриптов". Она работает примерно, как консоль запросов, то есть мы вставляем или пишем в нее наш скрипт и она сразу показывает какое значение получится в результате выполнения скрипта.
Благодаря форумчанам, выкладываю ссылку на ресурсы, где можно почитать подробнее о данном механизме:
Официальная группа в facebook, где можно задать вопросы разработчикам
Очень надеюсь, что вам, тем кто до сюда дочитали и не уснули, очень поможет данная информация и сэкономит часы жизни и мыслетопливо.
Живите свободно, но продуктивно.
Спасибо за внимание.
(0)тут много полезного написано про документооборот и как там работать. На инфостате мало кто знаком с этой конфигурацией.
тут оф группаhttps://www.facebook.com/groups/1C.DOC8
(1)Спасибо за информацию.
При использовании кода в коде не забываем писать тесты на проверку работоспособности. Неоднократно наблюдал использование функций из БСП в скриптах ДО приводили к неработоспособности целых бизнес-процессов.
Возможно, неплохим вариантом явилось бы написание отдельных функций и вызов их в одну строку:
Но тогда теряется «прелесть» внесения изменений в функционал без изменения конфигурации ))
По мне так все эти скрипты лучше в расширения выносить
Так хоть отладка будет работать
(4)В плане отладки да, но цель статьи была показать, как писать именно во встроенном механизме.
Для отладки можно использовать еще обработку эмулятор скриптов. В статье об этом тоже упомянуто.
(5) ну так текст скриптов не меняется, просто хранится в расширении.
Еще плюс — это Хранилище/Гит