Разбираемся с механизмом Дополнительные отчеты и обработки в БСП

Публикация № 558559

Разработка - Практика программирования

БСП универсальные процедуры шаблоны внешняя печатная форма внешние печатные формы подключение внешней обработки подключение внешних обработок дополнительные отчеты дополнительные обработки дополнительные отчеты и обработки заполнить заполнение

413
Чуть более комплексное описание, чем на других ресурсах

Недавно столкнулся с необходимостью применить данную технологию. Статей в интернете много. Но полного понимания они не дают.

В итоге удалось разобраться, затратив некоторое время.

Опишу то, что я сам хотел бы знать об этом механизме, чтобы начать его применять.

Сведения о внешней обработке

Чтобы подключить внешний отчет или обработку в справочник Дополнительные отчеты и обработки необходимо описать экспортную функцию СведенияОВнешнейОбработке() в модуле. Вот шаблон такой функции:

Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();


	// заполняем структуру ПараметрыРегистрации


	Возврат ПараметрыРегистрации;
	
КонецФункции


Описание полей возвращаемой структуры можно посмотреть в комментарии к функции ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(). Там можно получить актуальную информацию для вашей версии БСП.

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


Поле "Вид"

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


// Минимальное описание параметров регистрации

Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

Это поле определяет откуда будет вызываться команда, из какого пункта меню на форме объекта или списка. 

Возможные значения этого поля приведу в виде таблицы

  Значение поля "Вид"   Расположение команды

  Расширение  

   файла  

  ПечатнаяФорма   В меню "Печать" на форме объекта или списка   epf
  ЗаполнениеОбъекта   В меню "Заполнить" на форме объекта или списка   epf
  СозданиеСвязанныхОбъектов     В меню "Создать на основании" - "Создание связанных объектов.."  
  на форме объекта или списка 
  epf
  Отчет   В меню "Отчеты" на форме объекта или списка   erf
  ДополнительнаяОбработка   В списке соответствующих подсистем в меню
 "Сервис" - "Дополнительные обработки"
  epf
  ДополнительныйОтчет   В списке соответствующих подсистем в меню
 "Сервис" - "Дополнительные отчеты"
  erf

Это поле может принимать одно из значений, возвращаемых функциями ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки<Вид>(). Например, для вида "ПечатнаяФорма" есть функция ВидОбработкиПечатнаяФорма()

// рекомендуется заполнять поле "Вид" таким способом

ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();

// а не вот таким
ПараметрыРегистрации.Вид = "ПечатнаяФорма";


Поле "Назначение"

Содержит массив объектов конфигурации в формате "<Тип>.<Вид>", для которых будет назначен внешний отчет/обработка.

// для конкретных видов
ПараметрыРегистрации.Назначение.Добавить("Документ.Счет");

// для всех документов
ПараметрыРегистрации.Назначение.Добавить("Документ.*"); 

Этот параметр игнорируется, если поле "Вид" имеет значение "ДополнительнаяОбработка" или "ДополнительныйОтчет".


Поле "Наименование"

Это значение подставляется в наименование элемента справочника Дополнительные отчеты и обработки при создании.

Если не заполнено, то используется синоним внешней обработки/отчета.

Используется только для администрирования, а при добавлении в пункт меню, например, Печать будет подставляться наименование команды из таблицы команд, а не значение этого поля.


Поле "Команды"

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

Эту табличную часть можно заполнить и вручную.

Каждой строке соответствует один пункт в соответствующих меню, описанных в таблице выше.

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

НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Заказ с характеристиками (сервер)";
НоваяКоманда.Идентификатор = "ЗаказСХарактеристикамиСервер";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();

 

   

Таблица "Команды", колонка "Использование"

В колонке "Использование" указывается тип вызываемой команды. По сочетанию Вид-Тип команды система определяет какая предопределенная процедура будет вызвана из внешней обработки/отчета, и где  она будет объявлена - на клиенте или на сервере.

Наиболее часто используются процедуры Печать() и ВыполнитьКоманду(), а также открытие формы без обращения к методу.  

Это поле может принимать одно из значений, возвращаемых функциями ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКоманды<Тип>(), например, ТипКомандыВызовСерверногоМетода(). В каждой из этих функций есть подробный комментарий.

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

 Тип команды     Значение поля "Вид"     Вызываемая экспортная процедура  
 ВызовСерверногоМетода   ПечатнаяФорма   Печать(
      МассивОбъектов,
      КоллекцияПечатныхФорм,
      ОбъектыПечати,
      ПараметрыВывода) 

 ДополнительнаяОбработка
 ДополнительныйОтчет
 Отчет 
 ВыполнитьКоманду(
      ИдентификаторКоманды,
      ПараметрыВыполнения) 

 СозданиеСвязанныхОбъектов   ВыполнитьКоманду(
      ИдентификаторКоманды,
      ОбъектыНазначения,
      СозданныеОбъекты,
      ПараметрыВыполнения) 

 ЗаполнениеОбъекта   ВыполнитьКоманду(
      ИдентификаторКоманды,
      ОбъектыНазначения,
      ПараметрыВыполнения) 
 ВызовКлиентскогоМетода   ПечатнаяФорма   &НаКлиенте
  Печать(
      ИдентификаторКоманды,
      ОбъектыНазначенияМассив) 

 ДополнительнаяОбработка
 ДополнительныйОтчет 
 &НаКлиенте
  ВыполнитьКоманду(
      ИдентификаторКоманды) 

 СозданиеСвязанныхОбъектов   &НаКлиенте
 ВыполнитьКоманду(
      ИдентификаторКоманды,
      ОбъектыНазначенияМассив,
      СозданныеОбъекты) 

 ЗаполнениеОбъекта Отчет   &НаКлиенте
 ВыполнитьКоманду(
      ИдентификаторКоманды,
      ОбъектыНазначенияМассив) 

 Для всех видов   в форму передается параметр
    ДополнительнаяОбработкаСсылка 
 ОткрытиеФормы   СозданиеСвязанныхОбъектов
 ЗаполнениеОбъекта
 Отчет 
 в форму передается дополнительный параметр
    ОбъектыНазначения 

 Для всех видов   в форму передаются параметры
     ИдентификаторКоманды
     ДополнительнаяОбработкаСсылка
     ИмяФормы 

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

   

Для типа команды ВызовКлиентскогоМетода необходимо создать форму в обработке, назначить ее основной и объявить экспортную процедуру

   


Полезные процедуры

Рекомендую обратить внимание на следующие процедуры и функции:

ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбработку(ОбъектСправочника, ПараметрыРегистрации)
ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(Ссылка)
ДополнительныеОтчетыИОбработки.ВыполнитьКомандуИзФормыВнешнегоОбъекта(ИдентификаторКоманды, ПараметрыКоманды, ЭтаФорма)


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


Файлы

Прикладываю шаблоны для наиболее востребованных на мой взгляд вариантов использования
Шаблоны тестировались на БСП 2.3.2.35 в режиме совместимости с 8.3.6. Версию библиотек в своей конфигурации можно посмотреть в регистре сведений  Версии подсистем

В шаблонах присутствует минимально необходимый код и убрано все лишнее.

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

Данный список файлов предполагаю расширять по мере необходимости

  

Внешняя печатная форма (шаблон)

Реализованы типы команд: ВызовСерверногоМетода, ВызовКлиентскогоМетода, ОткрытиеФормы. 

Сам шаблон в неизменном виде регистрируется для всех видов документов и выдает печатную форму, содержащую список переданных в него объектов и идентификатор команды.

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

  

Внешняя обработка Создание связанных объектов (шаблон)

Реализованы типы команд: ВызовСерверногоМетода, ВызовКлиентскогоМетода, ОткрытиеФормы. 

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


   

Внешняя обработка Заполнение объекта (шаблон)

Реализованы типы команд: ВызовСерверногоМетода, ВызовКлиентскогоМетода, ОткрытиеФормы, ЗаполнениеФормы. 

Сам шаблон в неизменном виде регистрируется для всех видов документов и увеличивает на один день дату выбранного документа (или документов).

  

Внешний отчет СКД по объекту (шаблон)

Реализован тип команд: ОткрытиеФормы

Сам шаблон в неизменном виде регистрируется для справочника Организаци и выводит поля Ссылка, Код, Наименование с отбором по организации (или организациям), для которой вызван отчет

413

Скачать файлы

Наименование Файл Версия Размер
Внешняя печатная форма (шаблон)
.epf 8,58Kb
29.10.16
159
.epf 8,58Kb 159 Скачать
Внешняя обработка Создание связанных объектов (шаблон)
.epf 8,43Kb
30.10.16
132
.epf 8,43Kb 132 Скачать
Внешняя обработка Заполнение объекта (шаблон)
.epf 8,46Kb
30.10.16
246
.epf 8,46Kb 246 Скачать
Внешний отчет СКД по объекту (шаблон)
.erf 6,42Kb
30.10.16
248
.erf 6,42Kb 248 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. davdykin 16 30.10.16 18:09 Сейчас в теме
Спасибо за статью! Но мне кажется, значительно большие трудности не с написанием, а с отладкой данных обработок. Интересно было бы почитать про способы отладки!
pvl_mksv; MaCCapAkIII; KMAPJS; user612914_andshibwork; mike1970; Vida; NeviD; pas; iolko; mindcannon; wbazil; syberman; +12 Ответить
2. json 30.10.16 19:44 Сейчас в теме
(1) davdykin, благодарю за вопрос.
Раз тема актуальная, то опишу свой подход к решению этой задачи в ближайшее время
MaCCapAkIII; Мах; +2 Ответить
43. Xershi 697 11.01.19 17:00 Сейчас в теме
(1) если это печать, то все просто. Создаем форму и эмулируем параметры. Затем вывод на форму в табличный документ.
Для остального обычно существует форма, если нет, то тоже самое, параметры подсмотреть перед вызовом и все быстро отлаживается в полном контексте и не нужно каких-то режимов разработчика или дополнительной обработки, которая будет работать через сохранение в файл и подмену.
3. vadver 37 31.10.16 08:45 Сейчас в теме
Спасибо, хорошая статья. Правда, совершенно не освещено заполнение разрешений. Для безопасного режима это очень актуально
olbu; vasiliy_b; +2 Ответить
4. nixel 786 31.10.16 09:54 Сейчас в теме
Кто-то должен спросить...
Чем не устроила официальная документация по БСП на ИТС?
З.Ы. Про разрешения там тоже есть.
AnderWonder; vano-ekt; +2 Ответить
6. fishca 1152 31.10.16 11:16 Сейчас в теме
(4) а у всех туда доступ есть?
user717534; Мах; +2 Ответить
8. vadver 37 31.10.16 17:32 Сейчас в теме
(4) nixel, ага, документация там по принципу "краткость - сестра таланта"
user717534; rystam_atai; spmisc; +3 Ответить
10. nixel 786 31.10.16 18:40 Сейчас в теме
(8) vadver, не заметил там краткости, особенно в разделе "Использование при разработке конфигурации"

Видимо, вкусовщина.
9. palsergeich 31.10.16 18:19 Сейчас в теме
(4) nixel, https://its.1c.ru/db/bspdoc#content:427:1 Вы про это? При всем моем уважении, это не документация, это КрССТал.
Нормально посмотреть как это работает, конечно, можно в демо базе, но зачем тогда такая документация, если по любому вопросу проще лезть в пример. А доступ к демо базе может быть не всегда...

Да они в общем то этого не скрывают:
Подробнее см. дополнительную обработку Демо: Обработка заполнения в справочнике Дополнительные отчеты и обработки демонстрационной конфигурации.
bow; sbcode; +2 Ответить
11. json 31.10.16 23:38 Сейчас в теме
(4) nixel, я описал с точки зрения программиста, который начал использовать данный механизм, а не с точки зрения архитектора, который его разработал и описал документацию.
Архитектору, например, и так понятно, что СвязанныеОбъекты - появляются в меню "Создать на основании" в карточке документа. Но я потратил кучу времени, чтобы понять, на что влияет этот параметр. Или чем отличается Отчет от ДополнительныйОтчет? Из указанной вами справки этого не понять, о чем справедливо заметил (8) vadver, Или например, те же самые команды - все поля перечислены скопом, сидишь и думаешь, как их все заполнить, а заполнять то оказывается достаточно только три из них. И такие мелочи на каждом шагу. В итоге, разобравшись, мне было просто жалко, что эта информация забудется мною через некоторое время, поэтому я выложил свое знание в виде публикации

Мое мнение такое: публикация получилась неплохая, наглядная (за счет добавления таблиц и рисунков). Такой материал проще усваивается и запоминается. Кроме того чтение документации никто не отменял, и ее будет проще читать после этой обзорной статьи.

(3) vadver, я постарался осветить только основные моменты, не погружаясь в детали. На полноту изложения не претендую. Я пропустил не только этот аспект, но и еще дополнительные методы объектов, которые на мой взгляд тоже заслуживают внимания. Думаю, что такие детали уже можно разобрать по справке или на примерах из БСП, имея общее понимание механизма.
nvv1970; KidMo; alevnev; AndrewKop; InJey; user717534; Stepka1206; CodeNull; rystam_atai; ZhikinVN1984; SirYozha; Dementor; bow; Krio2; Vladimir Litvinenko; swiss-garant; vic777tor; sbcode; NeviD; AlX0id; vadver; jONES1979; +22 Ответить
5. fishca 1152 31.10.16 11:16 Сейчас в теме
Только за одно оформление "+"
7. rayastar 64 31.10.16 11:50 Сейчас в теме
"применить данную технологию"
уж тогда механизм) технология это немножко другое
12. Makushimo 154 01.11.16 06:36 Сейчас в теме
13. sml 35 02.11.16 10:07 Сейчас в теме
плюсанул за внятный удобочитаемый вид
14. Trucker 6 03.11.16 08:45 Сейчас в теме
Да, все это нужное и важное. Вот только разработчик БСП постепенно уходит от текущей модели подключаемых внешних обработок и переходит на расширения.
15. Сурикат 257 07.12.16 20:12 Сейчас в теме
Забыли про внешние обработки, позволяющие добавлять свои способы расчета скидок
16. KazanKokos 8 26.12.16 12:23 Сейчас в теме
а под ОФ(ут10.3) тоже самое подходит? Не могу никак найти описание. видимо уже неактуально и ссылки ушли вниз
17. Taliesien 16.01.17 15:52 Сейчас в теме
Подскажите, пожалуйста, если я вызываю внешний отчёт с формы элемента справочника, могу ли я использовать/получить данный элемент в модуле отчёта?
49. user824140 17.03.19 17:56 Сейчас в теме
(17) "Подскажите, пожалуйста, если я вызываю внешний отчёт с формы элемента справочника, могу ли я использовать/получить данный элемент в модуле отчёта?"

Присоединяюсь к вопросу.
51. json 2419 17.03.19 18:30 Сейчас в теме
(49) (50) не понятны детали вопроса. Если речь идет о внешнем отчете СКД с видом Отчет, то тогда что подразумевается под словом "Элемент": объект или ссылка?
Если речь об "объекте", то во-первых, к нему из отчета обратиться не получится, во-вторых, если вам это нужно, значит есть проблема с архитектурой.
Если речь о "ссылке", то - да, ссылки передаются как параметр, но не в модуль объекта, в форму.

В общем слабо понятен контекст вопроса...
52. user824140 17.03.19 18:51 Сейчас в теме
(51) Да, внешний отчет на СКД с видом Отчет (привязан к справочнику Номенклатура). Хочу получить (не важно) в форме или модуле внешнего отчета ссылку на номенклатуру. Возможно ли это?
53. json 2419 17.03.19 20:18 Сейчас в теме
18. Xershi 697 15.05.17 17:51 Сейчас в теме
В моей версии конфигурации "УТ" также есть хороший комментарий в функции ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке.
19. jaroslav.h 04.07.17 19:18 Сейчас в теме
Спасибо большое, ведь в новых конфах уже старый способ не канает. Пример УНФ 1.6 для Украины, не хотела форма показываться при подключении старым способом
20. jaroslav.h 04.07.17 20:06 Сейчас в теме
в прочем, алгоритм то тот же, просто блокировка интерфейса стояла у меня на форме обработки)
21. user780762 26.09.17 18:07 Сейчас в теме
Отличная статья! Всё максимально разжевано и разложено по полочкам, благодарю
22. ylyas 25 10.10.17 13:25 Сейчас в теме
В шаблонах обработки в процедуре ВыполнитьКоманду() параметр "ПараметрыВыполнения" по умолчанию равно "Неопределено".
А внутри процедуры нет проверки и сразу идет обращение через точку "ПараметрыВыполнения.РезультатВыполнения" ..
Здесь явно будет ошибка
23. 7OH 32 03.04.18 12:48 Сейчас в теме
37. spmisc 27.04.18 13:57 Сейчас в теме
(22) В моей текущей версии (не знаю как посмотреть) в Общем Модуле "ДополнительныеОтчетыИОбработки" идет проверка:
Процедура ВыполнитьНазначаемуюКомандуДополнительногоОтчетаИлиОбработки­(ВнешнийОбъект, Знач ИдентификаторКоманды, ПараметрыКоманды, ОбъектыНазначения, Знач СценарийВБезопасномРежиме = Ложь)
	
	Если СценарийВБезопасномРежиме Тогда
		
		ВыполнитьСценарийВБезопасномРежиме(ВнешнийОбъект, ПараметрыКоманды, ОбъектыНазначения);
		
	Иначе
		
		Если ПараметрыКоманды = Неопределено Тогда
			ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения);
		Иначе
			ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыКоманды);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры
Показать
24. 7OH 32 03.04.18 13:15 Сейчас в теме
Ну и про "СтандартныеПодсистемыКлиентСервер.ВывестиОповещение("
у меня в этом модуле всего 3 функции - далеко не для этого...
25. 7OH 32 03.04.18 15:04 Сейчас в теме
Подскажите - как вызвать форму обработки для заполнения формы объекта?
(Хотелось бы без записи объекта).

Если вызывать заполнение формы - то оно почему-то вызывается с сервера и я не могу открыть другую форму.
Открытие формы - получает на входе только ссылки - то бишь мне остаётся только заполнять и записывать объекты, а не открытую форму.
26. Xershi 697 03.04.18 15:27 Сейчас в теме
(25) увы тоже с этим столкнулся. В таком случае придется переписывать логику, чтобы не записывать документ. И это будет велосипед, разработчики предполагили запись в базу, потом открытие.
27. 7OH 32 03.04.18 18:45 Сейчас в теме
(26) Для себя костыль нашел - через ЭтаФорма.Владелец.Объект достучался куда надо.
А пока ковырял пытался себя на место разрабов поставить и не понял:
1. Почему в параметры формы форму не передать - имя передают, а саму форму нет.
2. Почему форма заполнения открывается без РежимОткрытияОкнаФормы.БлокироватьОкноВладельца.
28. Xershi 697 03.04.18 19:34 Сейчас в теме
(27) потому что это работает, если делать на основании 1 документа, а если на основании нескольких? Тогда велосипед не поедет!
29. 7OH 32 03.04.18 23:20 Сейчас в теме
(28) Согласен - задачи бывают разные.
Как по мне - форма заполнения документА - один к одному должна быть ( с трудом представляю заполнение нескольких документов сразу, особенно разных типов).
Ну а если по какому-то алгоритму - то можно и объекты по ссылкам заполнить.
В общем - не панацея, но при 1:1 - решение есть.
30. Xershi 697 04.04.18 10:14 Сейчас в теме
(29) так вот тут и вопрос заключается, когда делается 2 документа сразу их приводить к 1 или 2 к 2. 1 к 1 это частный случай)
31. 7OH 32 04.04.18 11:47 Сейчас в теме
(30) более одного - это уже из формы списка открывается - или не ?
а из формы списка формы ж никак не получить.
Или есть метод вызвать одну команду сразу у 2+ открытых форм одной кнопкой ?
36. spmisc 27.04.18 13:43 Сейчас в теме
(25) А как вообще организовать вызов процедуры ВыполнитьКоманду при типе команды ЗаполнениеФормы?
У меня в эту процедуру программа не заходит вообще, при этом не пишет никаких ошибок (вид обработки: ЗаполнениеОбъекта).
Возможно, я не там и/или не так эту процедуру (ВыполнитьКоманду) написал: пробовал и в модуле формы (и НаКлиенте и НаСервере) и в модуле обработки - ноль реакции системы...
32. baracuda 2 05.04.18 08:16 Сейчас в теме
Почему не все обработки в один архив? Каждую отдельно качать шо ли. (
33. json 06.04.18 13:26 Сейчас в теме
(32)
Для меня интересна статистика, какие виды обработок чаще используются.

Для тех, у кого нет возможности скачать нужный шаблон, могу порекомендовать два варианта:
1. Разобраться самостоятельно, также как это сделал я. Для этого достаточно скачать демо конфигурацию по БСП. Об этом указано в публикации
2. Написать что-нибудь ПОЛЕЗНОЕ и выложить на инфостарте. Тогда не будет возникать таких вопросов и не будет сложностей со скачиванием чужих разработок
34. baracuda 2 07.04.18 09:22 Сейчас в теме
(33) давайте по чесноку.
1) на статистику вам наплевать 100%
2) обязательно это сделаю и не буду требовать стартманей
35. user777757 25.04.18 09:25 Сейчас в теме
От себя добавлю: обязательно смотрите на привязку процедуры ПриСозданииНаСервере к самой форме! У меня случилось следующее: в форме списка не выводилась кнопка Печать, хотя в форме документа была. В модуле формы списка прописаны все необходимые процедуры, но печать не работала, пока не обратил внимания на свойства формы! Разработчик скопировал стандартные процедуры из формы другого документа, а сделать привязку забыл. Пришлось потратить достаточно много времени на устранение простейшей ошибки.
38. user970630 28.09.18 12:33 Сейчас в теме
Спасибо за статью. Только начал изучать программирование, поэтому не все понял. Буду разбираться дальше.
39. vanessa 21.12.18 18:31 Сейчас в теме
Отличная статья!
Подскажите пожалуйста, в варианте ОткрытиеФормы - для - ЗаполненияОбъекта.
Вы указали, что в форму, передается дополнительный параметр "ОбъектыНазначения"

Однако я никак не могу понять, как этот параметр использовать, и где его можно отловить?
40. zawal 15 03.01.19 13:23 Сейчас в теме
Добрый день, спасибо за описания. Плюсанул. Может подскажете как в внешней печатной форме указать макет который находится в самой внешней обработке, тотому как по логике макет можно указать только тот который есть в метаданных базы.
41. json 2419 03.01.19 14:26 Сейчас в теме
(40) Не понятен сценарий использования: на клиенте или на сервере

Если на клиенте, то почему нельзя так:
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
	
	КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИдентификаторКоманды);
	ПечатнаяФорма = УправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, ИдентификаторКоманды);
	ПечатнаяФорма.ТабличныйДокумент = ПечатьНаСервере(ОбъектыНазначенияМассив, ИдентификаторКоманды);;
	
	ОбластиОбъектов = Новый СписокЗначений;
	УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, ИдентификаторКоманды);
	
КонецПроцедуры

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

	Возврат ТабличныйДокумент;

КонецФункции
Показать


Ну а на сервере аналогично
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	ИдентификаторКоманды = "ЗаказСХарактеристикамиСервер";
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ИдентификаторКоманды) Тогда
		
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
			КоллекцияПечатныхФорм,
			"ЗаказСХарактеристикамиСервер",
			"Заказ с характеристиками (сервер)",
			ПечатьЗаказаСХарактеристиками(МассивОбъектов, ОбъектыПечати, ИдентификаторКоманды)
		);
		
	КонецЕсли;
	
КонецПроцедуры

Функция ПечатьЗаказаСХарактеристиками(МассивОбъектов, ОбъектыПечати, ИмяМакета)
	
	ТабличныйДокумент = ПолучитьМакет("ИмяМакетаВоВнешнейОбработке");
	// заполнение табличного документа
	
	Возврат ТабличныйДокумент;
	
КонецФункции
Показать
42. zawal 15 03.01.19 18:12 Сейчас в теме
(41)
РеквизитФормыВЗначение("Объект")


Уже нашел, но все равно спасибо
44. Taxes 06.03.19 06:49 Сейчас в теме
Добрый день. Раз уже идет разговор про внешние обработки, то надеюсь на небольшую консультацию. Ситуация следующая, есть вполне рабочая внешняя обработка, подключенная к конфигурации. Выполняется по расписанию. Но при каждом обновлении из файла в справочнике
"ДополнительныеОтчетыИОбработки" (по кнопке "записать" или "записать и закрыть") она сразу начинает выполнять команды, заложенные в процедуре ВыполнитьКоманду(ИдентификаторКоманды).
Как этого избежать? Исполняется все корректно, но как-то не вовремя... Заранее, спасибо
45. json 2419 06.03.19 08:04 Сейчас в теме
(44) Если честно, то не углублялся в этот механизм с регламентными заданиями в БСП.
Но судя по описанной ситуации понятно что:
1. У вас стоит расписание регламентного задания с небольшой периодичностью (1 раз в день, 1 раз в час или что-то типа того).
2. В типовой БСП, видимо, при записи справочника внешних обработок регламентное задание перезаписывается. То есть если трассернуть метод запись элемента справочника внешних обработок, то будет примерно такой вот код
.....
Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(УникальныйИдентификатор);
.....
Задание.Записать();
.....

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

Что с этим делать:
Если у задания периодичность, например один раз в сутки начиная с 1 часа ночи, то можно назначить ему интервал, чтобы в то время, когда вы разрабатываете, оно не выполнялось.
Если хочется более гибкого решения - то можно
Вариант 1. Попробовать самому проанализировать код записи справочника внешних обработок и увидеть, есть ли какой-нибудь стандартный механизм обхода перезаписи задания.
Вариант 2. Записывать справочник внешних обработок в режиме ОбменДанными.Загрузка = Истина. Возможно в этом случае не выполняется перезапись задания. Делать это либо через доработанную форму элемента (например, в виде внешней обработки), либо в другой базе, если у вас несколько баз и между ними обмен и регламентное задание выполняется в одной из баз
Вариант 3. Задать вопрос разработчикам БСП на телеграмм-канале https://t.me/ssl1c

Ну и последнее. Если разберетесь с этим вопросом и решение будет не очевидное, то напишите публикацию на ИС. Т.к. проблема типовая и возникает у многих.
46. Taxes 06.03.19 09:48 Сейчас в теме
(45)
Спасибо за гипотезы... Попробую воспользоваться советами.
Регламентное задание действительно выполняется раз в сутки и даже так - непонятна логика.... Если тебе задали явно время выполнения - будь добр в данное время и стартовать :) Да и выполнение обработки при самой первой записи элемента справочника тоже непонятно. Я полагал, что упускаю что-то из теории и ответ очевиден для опытных разработчиков, а оказывается многие мучаются с подобными неудобствами...
47. json 2419 06.03.19 09:55 Сейчас в теме
(46) регламентное задание учитывает, что в заданное время старта сервер, например может лежать или стоит блокировка заданий. Тогда оно выполнится сразу же как только появляется возможность, если этот момент входит в заданный интервал регламентного задания.
Если оно выполняется раз в сутки, то задайте ему расписание : раз в сутки с 01:00 до 05:00, ну или что-нибудь в этом духе. У вас скорее всего стоит расписание : раз в сутки с 00:00 до 23:59. Поэтому и возникает проблема
48. Taxes 06.03.19 10:22 Сейчас в теме
(47) Да, причина (даже не причина, а вариант обхода... ) именно в этом. После установки допустимого временного диапазона выполнения - обработки перестали выполняться при записи (очевидно, что записывать их нужно за пределом этого диапазона :) ).
Спасибо за подсказку!
50. user824140 17.03.19 18:04 Сейчас в теме
Подскажите, пожалуйста, если я вызываю внешний отчёт с формы элемента справочника, могу ли я использовать/получить данный элемент в модуле отчёта?
54. kalleka 47 16.04.19 13:06 Сейчас в теме
(50) Не актуально наверняка, но может кому пригодится ответ
ВладелецФормы.Объект
55. ks8585 2 23.08.19 22:40 Сейчас в теме
Доброго дня. При разных типах обработки вызывается разные процедуры ( выполнить команду в модуле обработки, выполнть команду а модуле формы, открытие формы.
Как узнать какие переменные доступны на этих процедурах ?!)
(54)
56. VovaSan 29.08.19 10:20 Сейчас в теме
Добрый день! Тут как-то вскользь упоминалось про вызов "ОбработкаОбъекта" из формы списка, никак не получается это осуществить. При регистрации обработки есть крыжики для вариантов выбора в форме объекта и/илив форме списка. В форме объекта появляется кнопка с вызовом, а вот в форме списка никак. Где что нужно дописать чтоб появился вызов из формы списка по кнопке или в контекстном меню?
Оставьте свое сообщение