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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *