Скрипт для автозаполнения адресата документа

1. user1178010 20.10.21 11:13 Сейчас в теме
Помогите исправить скрипт для автозаполнения шаблона файла в 1С:ДО 2.1 КОРП
Нужно:
1) чтобы каждый параметр начинался с новой строки (+ Символы.ПС почему-то не помогает, добавляется только пробел, см. скрин)
2) скрипт работает только если ДопРеквизит.Несколько адресатов = Истина (тип данных Булево). Если он в документе не заполнен, выдается ошибка, что скрипт с ошибкой



РезультатОбработки = "";

МногоАдресатов = ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла, "Несколько адресатов");
Если МногоАдресатов тогда
РезультатОбработки = "Руководителям подразделений (по списку)";
Иначе

Адресат1 = ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла, "Подразделение адресата1");
Если ЗначениеЗаполнено (Адресат1) тогда
НомерПробела = СтрНайти(Строка(Адресат1), " ");
НаимПодрАдресат1 = Прав(Строка(Адресат1),СтрДлина(Строка(Адресат1))-НомерПробела);
ДанныеРегистра = РегистрыСведений.СведенияОПользователяхДокументооборот.ПолучитьСведенияОПользователе(Адресат1.Руководитель);
АдресатДолжность1 = ДанныеРегистра.Должность;
СклАдресатДолжность1 = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Строка(АдресатДолжность1), 3);
АдресатФИО1 = Адресат1.Руководитель.ПредставлениеВДокументах;
СклАдресатФИО1 = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Строка(АдресатФИО1), 3);
Адресат1Полный = НаимПодрАдресат1 + Символы.ПС + СклАдресатДолжность1 + Символы.ПС + СклАдресатФИО1;
РезультатОбработки = Адресат1Полный;
КонецЕсли;

Адресат2 = ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла, "Подразделение адресата 2");
Если ЗначениеЗаполнено (Адресат2) тогда
НомерПробела = СтрНайти(Строка(Адресат2), " ");
НаимПодрАдресат2 = Прав(Строка(Адресат2),СтрДлина(Строка(Адресат2))-НомерПробела);
ДанныеРегистра = РегистрыСведений.СведенияОПользователяхДокументооборот.ПолучитьСведенияОПользователе(Адресат2.Руководитель);
АдресатДолжность2 = ДанныеРегистра.Должность;
СклАдресатДолжность2 = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Строка(АдресатДолжность2), 3);
АдресатФИО2 = Адресат2.Руководитель.ПредставлениеВДокументах;
СклАдресатФИО2 = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Строка(АдресатФИО2), 3);
Адресат2Полный = НаимПодрАдресат2 + Символы.ПС + СклАдресатДолжность2+ Символы.ПС + СклАдресатФИО2;
РезультатОбработки = РезультатОбработки + Символы.ПС + Адресат2Полный;
КонецЕсли;

Адресат3 = ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла, "Подразделение адресата 3");
Если ЗначениеЗаполнено (Адресат3) тогда
НомерПробела = СтрНайти(Строка(Адресат3), " ");
НаимПодрАдресат3 = Прав(Строка(Адресат3),СтрДлина(Строка(Адресат3))-НомерПробела);
ДанныеРегистра = РегистрыСведений.СведенияОПользователяхДокументооборот.ПолучитьСведенияОПользователе(Адресат3.Руководитель);
АдресатДолжность3 = ДанныеРегистра.Должность;
СклАдресатДолжность3 = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Строка(АдресатДолжность3), 3);
АдресатФИО3 = Адресат3.Руководитель.ПредставлениеВДокументах;
СклАдресатФИО3 = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Строка(АдресатФИО3), 3);
Адресат3Полный = НаимПодрАдресат3 + Символы.ПС + СклАдресатДолжность3+ Символы.ПС + СклАдресатФИО3;
РезультатОбработки = РезультатОбработки + Символы.ПС + Адресат3Полный;
КонецЕсли;

Адресат4 = ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла, "Подразделение адресата 4");
Если ЗначениеЗаполнено (Адресат4) тогда
НомерПробела = СтрНайти(Строка(Адресат4), " ");
НаимПодрАдресат4 = Прав(Строка(Адресат4),СтрДлина(Строка(Адресат4))-НомерПробела);
ДанныеРегистра = РегистрыСведений.СведенияОПользователяхДокументооборот.ПолучитьСведенияОПользователе(Адресат4.Руководитель);
АдресатДолжность4 = ДанныеРегистра.Должность;
СклАдресатДолжность4 = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Строка(АдресатДолжность4), 3);
АдресатФИО4 = Адресат4.Руководитель.ПредставлениеВДокументах;
СклАдресатФИО4 = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Строка(АдресатФИО4), 3);
Адресат4Полный = НаимПодрАдресат4 + Символы.ПС + СклАдресатДолжность4+ Символы.ПС + СклАдресатФИО4;
РезультатОбработки = РезультатОбработки + Символы.ПС + Адресат4Полный;
КонецЕсли;

КонецЕсли;
Показать
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
8. Westonline82 21.10.21 12:13 Сейчас в теме +0.2 $m
МногоАдресатов у тебя неопределено возвращает, из за этого ошибка "Преобразование значения к типу Булево не может быть выполнено".
Попробуй так

Если МногоАдресатов = Неопределено Или Не МногоАдресатов Тогда
// Тут свою обработку
ИначеЕсли
РезультатОбработки = "Руководителям подразделений (по списку)";
КонецЕсли
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. TokarevV 30 20.10.21 11:44 Сейчас в теме
Попробуйте Символы.ПС + Символы.ВК , вместо Символы.ПС .
Если вам нужен вариант, когда "не много адресов", тогда опубликуйте текст ошибки, если вам надо всегда "МногоАдресов", тогда вместо строки МногоАдресатов = ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла, "Несколько адресатов");
пишите МногоАдресатов = Истина;
3. user1178010 20.10.21 11:59 Сейчас в теме
(2)
1) Символы.ПС + Символы.ВК все равно не приводят к желаемому результату, разрыв строки не появляется
2) Мне нужно, если доп. реквизит "Несколько адресатов" установлен, выводить фразу "Руководителям подразделений (по списку)", а если признак не установлен, то выводить всех заполненных адресатов (Подразделение, ФИО, должность по каждому). Детального текста ошибки, к сожалению, нет, в ЖР фиксируется только:

Следующие реквизиты или скрипты настройки заполнения файла "Служебная записка_шаблон" заданы некорректно:
Скрипт ""Адресат1""

{ОбщийМодуль.АвтозаполнениеШаблоновФайловСервер.Модуль(221)}: ВызватьИсключение СтрокаОшибки;
{ОбщийМодуль.АвтозаполнениеШаблоновФайловСервер.Модуль(402)}: МассивЗамен = ПолучитьМассивАвтозаполненийШаблона(
{ОбщийМодуль.АвтозаполнениеШаблоновФайловКлиентСервер.Модуль(1732)}: НастройкиАвтозаполнения =
{Справочник.ШаблоныВнутреннихДокументов.Форма.ШаблонВнутреннегоДокумента.Форма(2332)}: РезультатЗаполненияФайла = АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(
{Справочник.ВнутренниеДокументы.Форма.ФормаВыбора.Форма(252)}: ОповеститьОВыборе(Элементы.Список.ТекущиеДанные.Ссылка);

Подозреваю, что проблема в том, что когда доп. реквизит установлен в Истина, появляется запись в РС со значением Истина. А когда доп. реквизит не заполнен, запись в РС отсутствует и вероятно метод ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла, "Несколько адресатов") возвращает не "Ложь", а пусто или не заполнено или просто ругается. Как его переписать?

МногоАдресатов = ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла, "Несколько адресатов");
Если МногоАдресатов тогда
4. TokarevV 30 20.10.21 12:08 Сейчас в теме
(3) Попробуйте вместо:
Адресат1 = ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла, "Подразделение адресата1");
вот так
Адресат1 = ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла, "Подразделение адресата");
5. user1178010 20.10.21 13:03 Сейчас в теме
(4)
вот так
Адресат1 = ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла, "Подразделение адресата");


у меня доп. реквизиты называются "Подразделение адресата1", "Подразделение адресата 2", "Подразделение адресата 3" и "Подразделение адресата 4". Доп .реквизита с именем "Подразделение адресата" нет...
6. TokarevV 30 20.10.21 13:10 Сейчас в теме
(5) Это доп. реквизиты какого объекта? Они заполнены?
7. user1178010 20.10.21 13:52 Сейчас в теме
(6)
это доп. реквизиты С.ВнутренниеДокументы. Да, они заполнены. Если убрать проверку на "Несколько адресатов", они выводятся, см. приложенный скрин. Когда ставлю проверку на "Несколько адресатов", но при этом доп. реквизит "Несколько адресатов" у ВнД не заполнен, возникает ошибка работы скрипта.
8. Westonline82 21.10.21 12:13 Сейчас в теме +0.2 $m
МногоАдресатов у тебя неопределено возвращает, из за этого ошибка "Преобразование значения к типу Булево не может быть выполнено".
Попробуй так

Если МногоАдресатов = Неопределено Или Не МногоАдресатов Тогда
// Тут свою обработку
ИначеЕсли
РезультатОбработки = "Руководителям подразделений (по списку)";
КонецЕсли
9. user1178010 21.10.21 14:32 Сейчас в теме
Спасибо, п. 2 (проверка на много адресатов) заработал
Прошу еще помочь с п. 1. Кто сталкивался? Почему не работает разрыв строки?
10. Westonline82 21.10.21 17:33 Сейчас в теме
(9)
Как предположение "Результат обработки" затем выводится в виде html который не понимает Символы.ПС
Как вариант попробуй использовать <"br"> (без кавычек) вместо Символы.ПС
11. user1178010 22.10.21 08:54 Сейчас в теме
(10)
при таком синтаксисе выдает ошибку "Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {<Неизвестный модуль>(15,36)}: Ошибка в выражении"
Как правильно использовать этот тег?
Прикрепленные файлы:
12. Westonline82 22.10.21 09:00 Сейчас в теме
(11)
Вот так
Прикрепленные файлы:
13. user1178010 22.10.21 11:13 Сейчас в теме
(12) При таком варианте Ворд не открывается
Прикрепленные файлы:
14. Westonline82 22.10.21 12:29 Сейчас в теме
(13)
Сразу не понял что это скрипт заполнения Word-овского документа. Word случайно не 2013? Попробуй перенос строки вместе с возвратом каретки
 Адресат1Полный = НаимПодрАдресат1 + Символы.ВК + Символы.ПС + СклАдресатДолжность1 + Символы.ВК + Символы.ПС + СклАдресатФИО1;

К сожалению у меня нет ms office что бы проверить.
15. user1178010 22.10.21 13:16 Сейчас в теме
(14) Word 2010. Такой вариант (Символы.ВК + Символы.ПС) выше предлагали, тоже не помогло...
16. Westonline82 22.10.21 13:36 Сейчас в теме
(15)
Символ(10) + Символ(13) можно еще попробовать, или просто Символ(13). Больше нет мыслей никаких. В LibreOffice все работает
17. user1178010 22.10.21 13:49 Сейчас в теме
(16) Исправила на :
Адресат1Полный = НаимПодрАдресат1 + Символ(10) + Символ(13) + СклАдресатДолжность1 + Символы.ВК + Символы.ПС + СклАдресатФИО1;
К сожалению, тоже не помогает...
18. пользователь 03.11.21 15:34
Сообщение было скрыто модератором.
...
Оставьте свое сообщение
Вакансии
Программист 1С
Казань
зарплата от 150 000 руб.
Полный день

Программист 1С:ERP
Москва
зарплата от 100 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день