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