Скрипт... скрипт... скрипт или коротко о скриптах в 1С:Документооборот

Программирование - Практика программирования

29
Краткая информация о том, как писать скрипты в конфигурации 1С:Документооборот.

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

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

1) Моя тема на Инфостарте, где я задал вопрос и меня наставили на истинный путь.

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

2) Очень помогла обработка "Эмулятор скриптов". Прям жизнь облегчила и помогла понять, как все это работает.

Взять ее можно тут.

 

Ну что, вводная часть прошла, переходим к практике.

Итак задача стояла следующая:

1) Подставить в форму договора ответственного в родительном падеже

2) Так же подставить его должность в родительном падеже

3) Ну и основание доверенности, которое нужно было взять из связанного с договором документа.

 

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

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

Справа от шаблона есть кнопочка "открыть". Нажимаем.

На вкладке реквизиты, платформа уже сама показывает реквизиты, которые можно вставить в шаблон. То есть отметив галочками нужные и нажав готово, у нас открывается шаблон, где в самом верху появляются отмеченные ранее поля для заполнения. Они выделены серым цветом.(При печати и отправке этот цвет не отображается).

Расставляем параметры в нужные места в документе. Как-то так:

Все бы ничего, но нет нужных мне полей. То есть я могу вытащить ответственного, но он будет в именительном падеже. А вот связанного документа и должности здесь нет совсем.

Вот тут-то и приходят на помощь скрипты.

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

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

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

Вот какими скриптами я решил поставленную задачу:

1) Итак:

//Вытащить связь с доком
//Конкретно под доверенность
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|    СвязиДокументов.СвязанныйДокумент
|ИЗ
|    РегистрСведений.СвязиДокументов КАК СвязиДокументов
|ГДЕ
|    СвязиДокументов.Документ = &Документ";

Запрос.УстановитьПараметр("Документ", Файл.ВладелецФайла); //Файл.ВладелецФайла - ссылка на договор

Результат = Запрос.Выполнить().Выбрать();
Результат.Следующий();

РезультатОбработки = СтрДоверенность;  // РезультатОбработки это как раз переменная, из которой и будет подставляться значение в параметр.

2) А вот тут, что мне особенно понравилось. В конфигурации, в общем модуле есть функция склонения и в скрипте можно к ней обратиться.

//Скрипт склонения 

Результат = "";
Склонение = ФизическиеЛица.Просклонять(Строка(Файл.ВладелецФайла.Ответственный), 2, Результат); //Файл.ВладелецФайла.Ответственный - ссылка на ответственного из документа.
РезультатОбработки = Результат;

3) Аналогичным способом используем функцию из общего модуля для того чтобы получить должность пользователя(ответственного).

//Должность
Результат = "";
Должность = РаботаСПользователями.ПолучитьДолжность(Файл.ВладелецФайла.Ответственный);
СклДолжность = ФизическиеЛица.Просклонять(Строка(Должность), 2, Результат);
РезультатОбработки = Результат;

И вот он результат:

Вот так все просто. Но шел я к этому в течении нескольких часов. Единственное чего еще хотелось бы, так это вызов конструктора запросов в форме написания скриптов, но это уже мои придирки))).

Еще раз скажу, что мне очень помогла обработка "Эмулятор скриптов". Она работает примерно, как консоль запросов, то есть мы вставляем или пишем в нее наш скрипт и она сразу вытаскивает значение, которое мы этим скриптом получим.

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

Очень надеюсь, что вам, тем кто до сюда дочитали и не уснули, очень поможет данная информация и сэкономит часы жизни и мыслетопливо. 

Живите свободно, но продуктивно.

Спасибо за внимание.

29

См. также

Комментарии
Избранное Подписка Сортировка: Древо
1. MSK_Step 17 13.07.18 16:29 Сейчас в теме
(0)тут много полезного написано про документооборот и как там работать. На инфостате мало кто знаком с этой конфигурацией.

https://its.1c.ru/db/doccorp21#content:766:1:issogl3_%D0%B0%D0%B2%D1%82%D0%BE%D0%B7%D0%B0%D0%BF%D0%BE%D0%­BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%88%D0%B0%D0%B1%D0%BB%D0­%BE%D0%BD%D0%BE%D0%B2_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_o­dt_txt_html_htm

тут оф группа https://www.facebook.com/groups/1C.DOC8
alexfps79; sm.artem; yadexter1986; +3 Ответить
2. yadexter1986 353 13.07.18 16:36 Сейчас в теме
(1)Спасибо за информацию.
3. kraynev-navi 374 16.07.18 08:34 Сейчас в теме
При использовании кода в коде не забываем писать тесты на проверку работоспособности. Неоднократно наблюдал использование функций из БСП в скриптах ДО приводили к неработоспособности целых бизнес-процессов.

Возможно, неплохим вариантом явилось бы написание отдельных функций и вызов их в одну строку:
ПросклонятьОтветственногоВДоверенности(Параметры)

Но тогда теряется "прелесть" внесения изменений в функционал без изменения конфигурации ))
4. acsent 1077 17.07.18 15:29 Сейчас в теме
По мне так все эти скрипты лучше в расширения выносить
Так хоть отладка будет работать
5. yadexter1986 353 17.07.18 16:09 Сейчас в теме
(4)В плане отладки да, но цель статьи была показать, как писать именно во встроенном механизме.
Для отладки можно использовать еще обработку эмулятор скриптов. В статье об этом тоже упомянуто.
6. acsent 1077 17.07.18 17:40 Сейчас в теме
(5) ну так текст скриптов не меняется, просто хранится в расширении.
Еще плюс - это Хранилище/Гит
Оставьте свое сообщение