Коротко о скриптах в конфигурации 1С:Документооборот

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

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

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

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

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

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

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

 

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

1) Итак:

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

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

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

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

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

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

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

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

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

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

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

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

Благодаря форумчанам, выкладываю ссылку на ресурсы, где можно почитать подробнее о данном механизме:

Информация с ИТС

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

 

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

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

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

6 Comments

  1. MSK_Step

    (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

    Reply
  2. D_e_X_T_e_R

    (1)Спасибо за информацию.

    Reply
  3. kraynev-navi

    При использовании кода в коде не забываем писать тесты на проверку работоспособности. Неоднократно наблюдал использование функций из БСП в скриптах ДО приводили к неработоспособности целых бизнес-процессов.

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

    ПросклонятьОтветственногоВДоверенности(Параметры)

    Но тогда теряется «прелесть» внесения изменений в функционал без изменения конфигурации ))

    Reply
  4. acsent

    По мне так все эти скрипты лучше в расширения выносить

    Так хоть отладка будет работать

    Reply
  5. D_e_X_T_e_R

    (4)В плане отладки да, но цель статьи была показать, как писать именно во встроенном механизме.

    Для отладки можно использовать еще обработку эмулятор скриптов. В статье об этом тоже упомянуто.

    Reply
  6. acsent

    (5) ну так текст скриптов не меняется, просто хранится в расширении.

    Еще плюс — это Хранилище/Гит

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *