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




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

58 Comments

  1. davdykin

    Спасибо за статью! Но мне кажется, значительно большие трудности не с написанием, а с отладкой данных обработок. Интересно было бы почитать про способы отладки!

    Reply
  2. json

    (1) davdykin, благодарю за вопрос.

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

    Reply
  3. vadver

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

    Reply
  4. nixel

    Кто-то должен спросить…

    Чем не устроила официальная документация по БСП на ИТС?

    З.Ы. Про разрешения там тоже есть.

    Reply
  5. fishca

    (4) а у всех туда доступ есть?

    Reply
  6. fishca

    Только за одно оформление «+»

    Reply
  7. rayastar

    «применить данную технологию»

    уж тогда механизм) технология это немножко другое

    Reply
  8. vadver

    (4) nixel, ага, документация там по принципу «краткость — сестра таланта»

    Reply
  9. palsergeich

    (4) nixel, https://its.1c.ru/db/bspdoc#content:427:1 Вы про это? При всем моем уважении, это не документация, это КрССТал.

    Нормально посмотреть как это работает, конечно, можно в демо базе, но зачем тогда такая документация, если по любому вопросу проще лезть в пример. А доступ к демо базе может быть не всегда…

    Да они в общем то этого не скрывают:

    Подробнее см. дополнительную обработку Демо: Обработка заполнения в справочнике Дополнительные отчеты и обработки демонстрационной конфигурации.

    Reply
  10. nixel

    (8) vadver, не заметил там краткости, особенно в разделе «Использование при разработке конфигурации»

    Видимо, вкусовщина.

    Reply
  11. json

    (4) nixel, я описал с точки зрения программиста, который начал использовать данный механизм, а не с точки зрения архитектора, который его разработал и описал документацию.

    Архитектору, например, и так понятно, что СвязанныеОбъекты — появляются в меню «Создать на основании» в карточке документа. Но я потратил кучу времени, чтобы понять, на что влияет этот параметр. Или чем отличается Отчет от ДополнительныйОтчет? Из указанной вами справки этого не понять, о чем справедливо заметил (8) vadver, Или например, те же самые команды — все поля перечислены скопом, сидишь и думаешь, как их все заполнить, а заполнять то оказывается достаточно только три из них. И такие мелочи на каждом шагу. В итоге, разобравшись, мне было просто жалко, что эта информация забудется мною через некоторое время, поэтому я выложил свое знание в виде публикации

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

    (3) vadver, я постарался осветить только основные моменты, не погружаясь в детали. На полноту изложения не претендую. Я пропустил не только этот аспект, но и еще дополнительные методы объектов, которые на мой взгляд тоже заслуживают внимания. Думаю, что такие детали уже можно разобрать по справке или на примерах из БСП, имея общее понимание механизма.

    Reply
  12. Makushimo

    Спасибо

    Reply
  13. sml

    плюсанул за внятный удобочитаемый вид

    Reply
  14. Trucker

    Да, все это нужное и важное. Вот только разработчик БСП постепенно уходит от текущей модели подключаемых внешних обработок и переходит на расширения.

    Reply
  15. Сурикат

    Забыли про внешние обработки, позволяющие добавлять свои способы расчета скидок

    Reply
  16. KazanKokos

    а под ОФ(ут10.3) тоже самое подходит? Не могу никак найти описание. видимо уже неактуально и ссылки ушли вниз

    Reply
  17. Taliesien

    Подскажите, пожалуйста, если я вызываю внешний отчёт с формы элемента справочника, могу ли я использовать/получить данный элемент в модуле отчёта?

    Reply
  18. Xershi

    В моей версии конфигурации «УТ» также есть хороший комментарий в функции ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке.

    Reply
  19. jaroslav.h

    Спасибо большое, ведь в новых конфах уже старый способ не канает. Пример УНФ 1.6 для Украины, не хотела форма показываться при подключении старым способом

    Reply
  20. jaroslav.h

    в прочем, алгоритм то тот же, просто блокировка интерфейса стояла у меня на форме обработки)

    Reply
  21. user780762

    Отличная статья! Всё максимально разжевано и разложено по полочкам, благодарю

    Reply
  22. ylyas

    В шаблонах обработки в процедуре ВыполнитьКоманду() параметр «ПараметрыВыполнения» по умолчанию равно «Неопределено».

    А внутри процедуры нет проверки и сразу идет обращение через точку «ПараметрыВыполнения.РезультатВыполнения» ..

    Здесь явно будет ошибка

    Reply
  23. 7OH

    (22) так и происходит

    Reply
  24. 7OH

    Ну и про «СтандартныеПодсистемыКлиентСервер.ВывестиОповещение(»

    у меня в этом модуле всего 3 функции — далеко не для этого…

    Reply
  25. 7OH

    Подскажите — как вызвать форму обработки для заполнения формы объекта?

    (Хотелось бы без записи объекта).

    Если вызывать заполнение формы — то оно почему-то вызывается с сервера и я не могу открыть другую форму.

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

    Reply
  26. Xershi

    (25) увы тоже с этим столкнулся. В таком случае придется переписывать логику, чтобы не записывать документ. И это будет велосипед, разработчики предполагили запись в базу, потом открытие.

    Reply
  27. 7OH

    (26) Для себя костыль нашел — через ЭтаФорма.Владелец.Объект достучался куда надо.

    А пока ковырял пытался себя на место разрабов поставить и не понял:

    1. Почему в параметры формы форму не передать — имя передают, а саму форму нет.

    2. Почему форма заполнения открывается без РежимОткрытияОкнаФормы.БлокироватьОкноВладельца.

    Reply
  28. Xershi

    (27) потому что это работает, если делать на основании 1 документа, а если на основании нескольких? Тогда велосипед не поедет!

    Reply
  29. 7OH

    (28) Согласен — задачи бывают разные.

    Как по мне — форма заполнения документА — один к одному должна быть ( с трудом представляю заполнение нескольких документов сразу, особенно разных типов).

    Ну а если по какому-то алгоритму — то можно и объекты по ссылкам заполнить.

    В общем — не панацея, но при 1:1 — решение есть.

    Reply
  30. Xershi

    (29) так вот тут и вопрос заключается, когда делается 2 документа сразу их приводить к 1 или 2 к 2. 1 к 1 это частный случай)

    Reply
  31. 7OH

    (30) более одного — это уже из формы списка открывается — или не ?

    а из формы списка формы ж никак не получить.

    Или есть метод вызвать одну команду сразу у 2+ открытых форм одной кнопкой ?

    Reply
  32. baracuda

    Почему не все обработки в один архив? Каждую отдельно качать шо ли. (

    Reply
  33. json

    (32)

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

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

    1. Разобраться самостоятельно, также как это сделал я. Для этого достаточно скачать демо конфигурацию по БСП. Об этом указано в публикации

    2. Написать что-нибудь ПОЛЕЗНОЕ и выложить на инфостарте. Тогда не будет возникать таких вопросов и не будет сложностей со скачиванием чужих разработок

    Reply
  34. baracuda

    (33) давайте по чесноку.

    1) на статистику вам наплевать 100%

    2) обязательно это сделаю и не буду требовать стартманей

    Reply
  35. user777757

    От себя добавлю: обязательно смотрите на привязку процедуры ПриСозданииНаСервере к самой форме! У меня случилось следующее: в форме списка не выводилась кнопка Печать, хотя в форме документа была. В модуле формы списка прописаны все необходимые процедуры, но печать не работала, пока не обратил внимания на свойства формы! Разработчик скопировал стандартные процедуры из формы другого документа, а сделать привязку забыл. Пришлось потратить достаточно много времени на устранение простейшей ошибки.

    Reply
  36. spmisc

    (25) А как вообще организовать вызов процедуры ВыполнитьКоманду при типе команды ЗаполнениеФормы?

    У меня в эту процедуру программа не заходит вообще, при этом не пишет никаких ошибок (вид обработки: ЗаполнениеОбъекта).

    Возможно, я не там и/или не так эту процедуру (ВыполнитьКоманду) написал: пробовал и в модуле формы (и НаКлиенте и НаСервере) и в модуле обработки — ноль реакции системы…

    Reply
  37. spmisc

    (22) В моей текущей версии (не знаю как посмотреть) в Общем Модуле «ДополнительныеОтчетыИОбработки» идет проверка:

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

    Показать

    Reply
  38. user970630

    Спасибо за статью. Только начал изучать программирование, поэтому не все понял. Буду разбираться дальше.

    Reply
  39. vanessa

    Отличная статья!

    Подскажите пожалуйста, в варианте ОткрытиеФормы — для — ЗаполненияОбъекта.

    Вы указали, что в форму, передается дополнительный параметр «ОбъектыНазначения»

    Однако я никак не могу понять, как этот параметр использовать, и где его можно отловить?

    Reply
  40. zawal

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

    Reply
  41. json

    (40) Не понятен сценарий использования: на клиенте или на сервере

    Если на клиенте, то почему нельзя так:

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

    Показать

    Ну а на сервере аналогично

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

    Показать

    Reply
  42. zawal

    (41)

    РеквизитФормыВЗначение(«Объект»)

    Уже нашел, но все равно спасибо

    Reply
  43. Xershi

    (1) если это печать, то все просто. Создаем форму и эмулируем параметры. Затем вывод на форму в табличный документ.

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

    Reply
  44. Taxes

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

    «ДополнительныеОтчетыИОбработки» (по кнопке «записать» или «записать и закрыть») она сразу начинает выполнять команды, заложенные в процедуре ВыполнитьКоманду(ИдентификаторКоманды).

    Как этого избежать? Исполняется все корректно, но как-то не вовремя… Заранее, спасибо

    Reply
  45. json

    (44) Если честно, то не углублялся в этот механизм с регламентными заданиями в БСП.

    Но судя по описанной ситуации понятно что:

    1. У вас стоит расписание регламентного задания с небольшой периодичностью (1 раз в день, 1 раз в час или что-то типа того).

    2. В типовой БСП, видимо, при записи справочника внешних обработок регламентное задание перезаписывается. То есть если трассернуть метод запись элемента справочника внешних обработок, то будет примерно такой вот код

    …..
    Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(УникальныйИдентификатор);
    …..
    Задание.Записать();
    …..

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

    Что с этим делать:

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

    Если хочется более гибкого решения — то можно

    Вариант 1. Попробовать самому проанализировать код записи справочника внешних обработок и увидеть, есть ли какой-нибудь стандартный механизм обхода перезаписи задания.

    Вариант 2. Записывать справочник внешних обработок в режиме ОбменДанными.Загрузка = Истина. Возможно в этом случае не выполняется перезапись задания. Делать это либо через доработанную форму элемента (например, в виде внешней обработки), либо в другой базе, если у вас несколько баз и между ними обмен и регламентное задание выполняется в одной из баз

    Вариант 3. Задать вопрос разработчикам БСП на телеграмм-канале https://t.me/ssl1c

    Ну и последнее. Если разберетесь с этим вопросом и решение будет не очевидное, то напишите публикацию на ИС. Т.к. проблема типовая и возникает у многих.

    Reply
  46. Taxes

    (45)

    Спасибо за гипотезы… Попробую воспользоваться советами.

    Регламентное задание действительно выполняется раз в сутки и даже так — непонятна логика…. Если тебе задали явно время выполнения — будь добр в данное время и стартовать 🙂 Да и выполнение обработки при самой первой записи элемента справочника тоже непонятно. Я полагал, что упускаю что-то из теории и ответ очевиден для опытных разработчиков, а оказывается многие мучаются с подобными неудобствами…

    Reply
  47. json

    (46) регламентное задание учитывает, что в заданное время старта сервер, например может лежать или стоит блокировка заданий. Тогда оно выполнится сразу же как только появляется возможность, если этот момент входит в заданный интервал регламентного задания.

    Если оно выполняется раз в сутки, то задайте ему расписание : раз в сутки с 01:00 до 05:00, ну или что-нибудь в этом духе. У вас скорее всего стоит расписание : раз в сутки с 00:00 до 23:59. Поэтому и возникает проблема

    Reply
  48. Taxes

    (47) Да, причина (даже не причина, а вариант обхода… ) именно в этом. После установки допустимого временного диапазона выполнения — обработки перестали выполняться при записи (очевидно, что записывать их нужно за пределом этого диапазона 🙂 ).

    Спасибо за подсказку!

    Reply
  49. user824140

    (17) «Подскажите, пожалуйста, если я вызываю внешний отчёт с формы элемента справочника, могу ли я использовать/получить данный элемент в модуле отчёта?»

    Присоединяюсь к вопросу.

    Reply
  50. user824140

    Подскажите, пожалуйста, если я вызываю внешний отчёт с формы элемента справочника, могу ли я использовать/получить данный элемент в модуле отчёта?

    Reply
  51. json

    (49) (50) не понятны детали вопроса. Если речь идет о внешнем отчете СКД с видом Отчет, то тогда что подразумевается под словом «Элемент»: объект или ссылка?

    Если речь об «объекте», то во-первых, к нему из отчета обратиться не получится, во-вторых, если вам это нужно, значит есть проблема с архитектурой.

    Если речь о «ссылке», то — да, ссылки передаются как параметр, но не в модуль объекта, в форму.

    В общем слабо понятен контекст вопроса…

    Reply
  52. user824140

    (51) Да, внешний отчет на СКД с видом Отчет (привязан к справочнику Номенклатура). Хочу получить (не важно) в форме или модуле внешнего отчета ссылку на номенклатуру. Возможно ли это?

    Reply
  53. json

    (52) да, возможно.

    Reply
  54. kalleka

    (50) Не актуально наверняка, но может кому пригодится ответ

    ВладелецФормы.Объект

    Reply
  55. ks8585

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

    Как узнать какие переменные доступны на этих процедурах ?!)

    (54)

    Reply
  56. VovaSan

    Добрый день! Тут как-то вскользь упоминалось про вызов «ОбработкаОбъекта» из формы списка, никак не получается это осуществить. При регистрации обработки есть крыжики для вариантов выбора в форме объекта и/илив форме списка. В форме объекта появляется кнопка с вызовом, а вот в форме списка никак. Где что нужно дописать чтоб появился вызов из формы списка по кнопке или в контекстном меню?

    Reply
  57. zykov_vitaliy

    В данной статье не упомянулось про тип команды «ЗагрузкаДанныхИзФайла». Считаю, что это одна из важнейших типов обработок, которая позволяет не выдумывать механизм загрузок в справочники, табличные части документа данных, а пользоваться стандартными средствами загрузки. Рекомендую дополнить вашу статью описанием данного типа обработки. В интернете очень мало информации про него

    Reply
  58. ybatiaev

    (37) Понимаю, что глупый вопрос — а где должна быть команда или сценарий. Есть примеры этого?

    Reply

Leave a Comment

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