Декомпиляция элементов формы для 8.2 для обычных форм (не управляемых).




Принцип обмена данными из 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='\

99 Comments

  1. Istur

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

    Перейти к публикации

    Reply ↓
  2. German

    Что с определением цветов и шрифтов из стиля? 🙂

    Знаю только одну обработку в которой это реализовано.

    Reply ↓
  3. Istur

    (1) Нет, не реализовано. Мне пока это не нужно.

    Reply ↓
  4. Поручик

    (2) Добавь в описание, только для обычных форм.

    Reply ↓
  5. Istur

    (3) Сделал.

    Reply ↓
  6. ValeriTim

    (1) какая обработка это делает ?

    Reply ↓
  7. German

    (5) Ei полное (ВЫПОЛНЯЕМОЕ) перобразование, позволяющее скопировать форму

    Reply ↓
  8. vasiliy_b

    Да, такую бы обработку для управляемых форм!

    Reply ↓
  9. alekseineputin

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

    Плюс однозначно 😉

    Reply ↓
  10. Поручик

    (8) Нет, всё это знать не обязательно. Для этих целей есть СП, мануалы, шаблоны кода. Главное знать что искать и как искать.

    Reply ↓
  11. alekseineputin

    (9) Ладно, не нападай 🙂 От шаблонов кода очень часто остаются куски причудливой формы 😀 Или я после НЕ тех программистов работал 😉

    Reply ↓
  12. woozee

    Понять не могу для чего она =) И чем полезна она будет))

    Reply ↓
  13. Istur

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

    Reply ↓
  14. woozee

    Да? Есть одна формочка стандартная суперпеределанная…. Надо проверить… Но суть не в этом) Идея (в моем случае) понравилась.

    А привязки по форме в обычной форме тоже программно описывает?:)

    Reply ↓
  15. Istur

    (13) Да, привязки описывает. Это одно из самых важных, как же без них)

    Reply ↓
  16. Yasen

    Спасибо, плюс.

    Ждем когда управляемые формы достигнут подобного уровня программизма )

    Reply ↓
  17. woozee

    Не работает) Минус) В единственной сложной форме и то не пригодился))

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

    Проблема в 573 строчке (Цикл) — то есть «зацикливание».

    Ждем фикс) Или уже не ждем))

    Reply ↓
  18. Istur

    (16) У меня не возникало подобное.. А какие значения в «СтрИсточник» в зацикливаемой строке? И что за форма?

    Reply ↓
  19. woozee

    Бухгалтерия 2.0.29 СписниеСРасчетногоСчета.ФормаДокумента В СтрИсточник строка дерева =) Они там меняются эти деревья) Значения вроде адекватные, а что так долго — я не знаю. но в замере производительности оно зацикливается.

    Форма Переделана в плане того что добавлена панелька с добавочной страницей, на эту панельку перенесена основная панелька, та самая с кучей страниц. Ну и пара полей добавлено )) Ну как то так)))

    Reply ↓
  20. AlexO

    все делается намного проще.

    копируется форма и меняется все что нужно, подключается паровозом к оснвоной.

    а программно создавать — в любом случае никакие обработки не помогут.

    Вообще, создание программно чего-либо и 1с — вещи несовместимые и чреваты ошибками и лажей.

    Ну не предполагало 1с так делать, не предполагало….

    Reply ↓
  21. woozee

    (19) AlexO,

    Идея программно добавлять нестандартные элементы намного проще чем постоянно отслеживать изменения в элементах формы. Что я и взял на вооружение. Правда перерисовывать то что у нас с этой формой — не представляю даже себе КАК))) Вернее… лениво даже представлять)

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

    Самым правильным будет просто переносить свои кнопочки, поля и т.д. Ну и что, что это может занять продолжительное время — зато практически не возникают ошибок)

    Reply ↓
  22. Istur

    (21) +1

    (20)

    Вообще, создание программно чего-либо и 1с — вещи несовместимые и чреваты ошибками и лажей.

    Ну не предполагало 1с так делать, не предполагало….

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

    а программно создавать — в любом случае никакие обработки не помогут.

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

    все делается намного проще.

    копируется форма и меняется все что нужно, подключается паровозом к оснвоной.

    Проще? Неожиданно) Это по сути значит, что форма будет отключена от обновлений, то есть само действие не имеет никакого смысла. Это тоже самое, что при обновлении у формы снимать флажок обновления. И рано или поздно возникнут проблемы, потому что что-либо добавлять нужно обычно в часто используемых объектах метаданных, обновления для которых приходят если не каждый релиз, то через релиз.

    Reply ↓
  23. woozee

    (22) Мне можно надеятся на испралвение ошибки «зацикливания», или забить?:)

    Reply ↓
  24. Istur

    (23) Да, исправлю. Единственное сейчас запар некоторый на работе, но до конца недели точно время найду.

    Reply ↓
  25. o.nikolaev

    Вот все-таки, для чего это может пригодиться? Неужели нельзя обойтись без генерации кучи кода? Что касается форм объектов — ну это понятно — создаются создаются доп. формы журналов (списков) в них отлавливается «ПриВыборе» и открывается «своя» форма объекта. Какая ситуация может потребовать использования такого подхода при доработке типовой конфигурации с возможностью сохранения обновлений?

    Reply ↓
  26. AlexO

    (22) собственно, в (25) вам ответили. Там как один из вариантов подключения допформы.

    Основная форма остается для обновлений, где-то (можно перед открытием основной формы — при обновлении обновлять спокойно с закрытыми глазами, только потом вставить строчку обратно переключения-ответвления на допформу) вставляется переключатель, допформа один-в-один с основной+изменения, какие надо было внести.

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

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

    (25) такое может потребоваться как раз там, где нужно и обновления ставить «неглядя», и все-таки внести изменения в «типовую» форму. Т.е. совместить несовместимое.

    Что и удается.

    (22) а все программно выводимые реквизиты… механизм отслеживания изменений — отсутствует (кроме визуального восприятия), механизм проверки и контроля создаваемых программно элементов — отсутствует, набор инструментов для создания таких якобы «программных» элементов (на самом деле — это создание куцых «вроде поля»-элементов, как и все полууправляемые или совсем неуправляемые ЭУ в 1С) — отсутствует.

    В конце концов, будет куча кода, который рухнет под собственной тяжестью.

    «сдал проект».. Сдать — полдела, еще и сопровождать это надо. А от этого, я так понимаю, вы самоустранились.

    Прекрасно понимая, что снова разгребать кучу кода от «программно создаваемых элементов» — занятие не для слабонервных.

    Reply ↓
  27. o.nikolaev

    (26)

    Ну видимо как-то так, да — «совместить несовместимое». И склоняюсь к тому что эту стратегию можно рекомендовать для применения как раз в таком случае — «впихнуть невпихуемое», а в случае когда есть возможность создать доп. формы (обработки с дин. списками и etc.) все же следует создавать объекты, используя префиксы, общие модули и т.п.

    —

    Мнение мое и не обязательно правильное.

    Reply ↓
  28. vkr

    По-моему, предложенный автором метод — прекрасный вариант компромисса для вечно загруженного 1С-программера ! 🙂

    Лично я обязательно начну постепенно использовать — задолбало каждый раз свои «кнопки» перегонять в новый билд…

    Reply ↓
  29. woozee

    Спорить можно бесконечно))

    Всем известно что для решения задачи присутствует разновсяческое множество вариантов. От кривых до идеально правильных, оптимизированных и прям супер-пупер…

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

    Чем хороша данная обработка — посидел, потыкал кнопки, скопировал код, описал красиво комментариями и забыл до УФ))

    С сопровождением кода проблем не будет никаких. Проблемы возникают только у тех фирм которые сопровождаются у фирм-франчайзи которые имеют штат неопытных сотрудников, либо фирм которые наняли «сопроводителя» «подешевле». Но это другая история))

    Reply ↓
  30. i132

    (26) Идея: для обновлений оставить Основную форму (без визуальных изменений) а добавленные реквизиты хранить на форме _дополнительные — и добавлять при открытии обходом всех элементов этой формы.

    :удобно тем что видно на глаз новые реквизиты и легко изменить их положение.

    Reply ↓
  31. AlexO

    (28) vkr,

    как раз нисколько не прекрсаный, вам предложен более простой и надежный, а главное — сопровождаемый метод.

    Не понимаете — так и скажите.

    (29) woozee,

    >> Чем хороша данная обработка — посидел, потыкал кнопки, скопировал код, описал красиво комментариями и забыл до УФ))

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

    — ну что ж, остается вам пожелать получить срочное задание по доработке/исправлению вот после такого же программиста «а че тут непонятно, если не можешь разобрать программно <мной> созданные формы — ты дурак».

    А 1С специально сделана, чтобы путать всех и вся. И не надейтесь, что вас кто-то пожалеет и будет писать «как вам удобно/известно». 1с-ники — в большинстве народ малограмотный.

    Reply ↓
  32. woozee

    (31) AlexO,

    >> «а че тут непонятно, если не можешь разобрать программно <мной> созданные формы — ты дурак»

    Самое интересное что есть доля правды))) Дело в том что есть некий стандарт разработки, предложения от 1С. Все эти материалы находятся на диске ИТС. Если хотя бы о них догадываться и если еще немного и почитывать, то разбираться в стандартных конфигурациях, и в коде тех программистов которые хотя бы примерно им придерживаются — проблем особых не возникает))

    ……
    //Программист =========
    ДобавитьПрограммноЭлементыФормы();
    //Программист =========
    ……
    
    //Программист =========
    Процедура ДобавитьПрограммноЭлементыФормы()
    
    //Поле ввода и Надпись ФизЛица
    ……
    
    //Поле ввода и Надпись Договора
    ……
    
    КонецПроцедуры
    //Программист =========
    

    Показать

    Чего сложного?:)

    (30) Дело в том что бывает добавлена страница в панельке без отображения заголовков этих страниц. Либо забываешь привязать процедурку к стандартному реквизиту, например, ПриИзменении… ПриВыборе

    Reply ↓
  33. AlexO

    (32) woozee,

    1с сама же и нарушает везде и свюду свои «правила».

    потому у 1с главное правило — никаких правил…

    Reply ↓
  34. vkr

    (31),(33) Вот уж никогда не придерживался «стандартов разработки» от 1С…

    Могу посоветовать Вам прочесть прекрасную книгу :

    Мифический человеко-месяц или Как создаются программные системы

    (The mythical Man-Month: Essays on Software Engineering)

    Автор: Фредерик П. Брукс

    Издание 1975 или 2010 г.

    Надеюсь, она Вам будет полезна…

    Reply ↓
  35. AlexO

    (28) vkr,

    а и не перегоняйте, сделайте, как я советую в (26) ))

    и просто, и обновлять больше не надо.. разве что изменится сама «родная» форма-родитель, и вам захочется сделать «потомка» снова на неё похожим..

    (30) i132,

    что за форма «Дополнительные»? предлагаете создать новую форму, хранить на ней некие новые реквизиты, потом программно считывать их оттуда и вставлять программно же на старую форму?

    а зачем вся эта длиннющая цепочка? а если «порвется» где-нить — как отследите, что перестало работать?

    (34) vkr,

    теория программирования, теории обработки БД, хранения данных, и 1с — несовместимы ))

    это уже известно давно с выходом снежка…

    (0) рано или поздно возникнут проблемы как в (18), т.к всегда «остаются куски причудливой формы», все эти программные изыски неуниверсальны в силу уже указанной причины — ребята, это не Си, а 1С, которая плевать хотела на все правила, стандарты и развитие программирования, а с выходом 8.2 — и вообще плевать на программиста..

    Reply ↓
  36. AlexO

    хотя у меня есть идея, где все это «программное» чудо пригодится… как раз для «чистого» творчества нужно…

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

    А декомпилировать всю форму со всеми элементами из=за обновлений, чтобы добавить один-два новых элементов на форму..

    А почему никто не попробовал сделать как предложено в (30) — добавлять только нужные, и привязками/размещением играть?

    хотя сами элементы могут сместится на новой форме…. а это уже никак не отследишь программно — или писать целый механизм сравнений и корректировок..

    короче, я вам способ подсказал, но можете все делать программно ))

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

    Reply ↓
  37. AlexO

    слушай, Истур, а это ведь ты натолкнул меня на мысль со своей идеей дискретно декомпилировать.. хотя и так вроде было на поверхности, а вот поди ж ты… ))

    надоть тебе плюсик за это поставить…

    Так проблема из (18) поправлена?

    если можно, пришли исправленный вариант по личке… а то тут с этими ограничениями замучаешься качать…

    Reply ↓
  38. vkr

    (35) Да, я с Вами согласен по поводу идеологической несовместимости 1С с нормальными принципами…

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

    Спасибо за диалог! 🙂

    Reply ↓
  39. woozee

    (37) AlexO, странно, муза под конец рабочего дня приходит =)

    Reply ↓
  40. AlexO

    (38) vkr,

    с 1с бороться бесоплезно ))

    примените стиль айкидо — уйти с линии удара и пусть валится…а как упадет — можно диктовать свои условия.. ))

    (39) woozee,

    что-то путное на 1с можно изобрести только абстрагировавшись от 1с ))

    Reply ↓
  41. echo77

    При добавлении колонки в ТабличноеПоле метод УстановитьДействие не прокатывает :-/

    Было бы неплохо накидать справку в обработке, подобную той что вы здесь привели

    Reply ↓
  42. vkr

    (40) Спасибо, Вы очень точно сформулировали методику взаимоотношений с 1С… 🙂

    Буду теперь знать, как это называется…

    Только на диктовку им условий мне начхать — я работаю по-своему, клиенты довольны — это главное…

    Reply ↓
  43. Sverkalov
  44. AlexO

    (44) что-то сомнительно… в тонком же это невозможно в принципе — так откуда «для управляемых форм»??

    Reply ↓
  45. vasiliy_b

    (45) Почему же невозможно? Программно добавлять элементы на форму можно?! Обходить все элементы формы можно?! так почему же это нереально?

    Reply ↓
  46. AlexO

    (46) в УП нельзя. УФ формируются динамически, поэтому программно ничего добавить нельзя.

    Только если в режиме толстого клиента.

    Reply ↓
  47. vasiliy_b

    (47) AlexO, А как же тогда реализован вывод реквизитов свойств объектов на формы? В типовых конфигурациях в управляемых формах? Прежде чем говорить посмотрите сначала УТ 11 например, в справочник номенклатур добавьте пару свойств…. и о чудо дядьки из 1с прибегут и добавят вам эти реквизиты к объекту, чтоб они динамически сформировались…. а потом еще будут прибегать когда вы будете обновления накатывать.

    Reply ↓
  48. Yasen

    (47) AlexO,

    программно ничего добавить нельзя

    Откуда такие сведения если не секрет? Религия не позволяет или Нуралиев запретил?

    Reply ↓
  49. vasiliy_b

    Ошибка: Берем ТЧ документа, добавляем новый реквизит(я добавлял типа число (15,3)) далее выводим эту колонку на форму привязываем событие «ПриИзменении», и добавляем изменение цвета при выводе строки.

    Декомпилируем эту колонку и получаем следующие ошибки:

    Было:

    Колонка.УстановитьДействие(«ПриИзменении»,Новый Действие(«Товары_БруттоПриИзменении»));

    Надо

    Колонка.ЭлементУправления.УстановитьДействие(«ПриИзменении»,Новый Действие(«Товары_БруттоПриИзменении»));

    …

    Было

    Колонка.ЭлементУправления.ТипЗначения = Новый ОписаниеТипов(«Число»,,,Новый КвалификаторыЧисла(15,3));

    Это не нужно, ругается т.к. тип уже назначен. И еще нужно добавить:

    Колонка.Имя = «_Брутто»

    Иначе имя колонки добавляет «Колонка1»

    Reply ↓
  50. AlexO

    (48) да, ошибся, извините.

    Думал, только невизуальные реквизиты можно.

    Посмотрел, добавлять можно, но что-то все через ж.. происходит с результатом..

    Reply ↓
  51. amiralnar

    Отличная обработка, спасибо! Пол года о ней мечтал. Ну теперь — держись, УПП =)

    Reply ↓
  52. amiralnar

    Есть проблема:

    Для декомпиляции выбираю форму реализации товаров и услуг.

    При работе через терминал (возможно это важно) подвисает на процедуре ДеревоЭлементовФормыПриПолученииДанных(Элемент, ОформленияСтрок)

    За 5 секунд успевает выполнить эту процедуру 85 000 раз.

    Пока отключаю процедуру и ориентируюсь по пустым строкам.

    Можно ли при построении дерева сразу указать представление ячеек?

    Reply ↓
  53. bambr1975
    Reply ↓
  54. kiruha

    Возможно ли от программно созданной формы перейти к непрограммно ?

    Шаг обратный декомпиляции, чтобы клиенту высылать стандартную, нединамическую ?

    Reply ↓
  55. AlexO

    (55) kiruha,

    нет, невозможно — механизма превращения кода 1с в «физический» объект с записью в конфигурацию (на диск) не существует.

    Впрочем, в 1с8 в принципе нет выгрузки объектов интерфейса отдельно.

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

    Это привет вам от Великого Отсутствия ООП в 1с ))

    Если же вы про превращение УФ в обычную форму — тоже невозможно автоматически.

    Reply ↓
  56. AlexO

    (22)

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

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

    Reply ↓
  57. AlexO

    (8) mamanelli,

    ведь нормальный кодер должен знать это «на кончиках пальцев»

    ждем статью, где все, что надо будет знать программисту «на кончиках пальцев», будет описано и выложено в коде, набранном именно таким же методом — без справки по памяти ))

    Reply ↓
  58. rasswet

    при попытке разобрать форму (устанавливаем курсор на форму элемента в дереве слева) в ЗУП релиз 47 (командировки организаций) падает сеанс 1С:Предприятие 8.2 (8.2.15.301)

    Reply ↓
  59. AlexO

    (48) vasiliy_b,

    в справочник номенклатур добавьте пару свойств…. и о чудо дядьки из 1с прибегут и добавят вам эти реквизиты к объекту, чтоб они динамически сформировались….

    ну и где же динамически добавленные «реквизиты»? уж не хранятся ли они в строго ограниченных регистрах свойств объектов?

    вы или ваши дядьки из 1с сделате так, чтобы «программно созданный» реквизит хранил данные, а не просто использовался для подстановки предопределенных значений??

    Reply ↓
  60. AlexO

    (59) rasswet,

    это нормально

    Reply ↓
  61. AlexO

    В УПП в справочнике Проекты при выборе ФормыЭлемента — вылет.

    Reply ↓
  62. rasswet

    (61) ну..не совсем..другой парсер с этого сайта парсит без ошибки.

    но мне нравится работать с тем, который тут. а он валится.

    Reply ↓
  63. bambr1975

    (63) rasswet, попробуйте слегка поправить код (как описано в (54)) — может, поможет 😉

    Reply ↓
  64. AlexO
    Reply ↓
  65. rasswet

    (65) спасибо, завтра протестирую на той же форме.

    Reply ↓
  66. rasswet

    (65) протестировал ваш файл.

    теперь не виснет. но есть Ошибка

    {ВнешняяОбработка.ДекомпиляцияИАнализФорм.МодульОбъекта(165)}: Поле объекта не обнаружено (Верх)

    мТекст.ДобавитьСтроку(Таб + СтрокаПробелов + «УстановитьПоложениеЭлемента(» + ТекстЭлементДляРазмеров + «,» +

    Reply ↓
  67. rasswet

    (65) уточню. ошибку выводит когда ставлю Флаг напротив «работники организации» табличное поле. и при полном анализе формы. на других элементах ошибку не выдает.

    Reply ↓
  68. AlexO

    (67) rasswet,

    я не знаю, что у вас за конфигурация, и что за объект «Работники организаций», в котором есть некое ТабличноеПоле.

    Поэтому здесь не помогу ничем.

    По поводу

    Поле объекта не обнаружено (Верх)

    — у распарсиваемого объекта нет свойства «Вверх», которое ищет обработка и пытается изменить.

    Reply ↓
  69. rasswet

    (69) зуп конфигурация. немного измененная..

    Reply ↓
  70. AlexO

    (68) rasswet,

    когда ставлю Флаг напротив «работники организации» табличное поле. и при полном анализе формы

    если эти «Работники организаций» — это регистр сведений, то в типовой ЗУП ошибок нет.

    Reply ↓
  71. dandrontiy

    Идея интересная. А вот бы обработку, которая из <неуправляемой> формы создавала <управляемую>

    Reply ↓
  72. rasswet

    (71)это документ «командировки организаций», табличная часть его называется «работники организации»

    Reply ↓
  73. AlexO

    (72) dandrontiy,

    1c в принципе «не предусмотрела» таких конвертаций и механизмов для этого не вводила в платформу.

    Reply ↓
  74. AlexO

    (73) rasswet,

    ругается на поля ТП.

    Поля «ОсвобождатьСтавку» и «НапомнитьПоЗавершении» — имеют тип булево (флажки), и, видимо, с этим и связано «непонимание» обработки. Остальные поля с дургими типами — отрабатывают.

    Reply ↓
  75. dandrontiy

    (74) AlexO, Так я про это и говорю.

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

    Reply ↓
  76. AlexO

    (76) dandrontiy,

    это вы про чисто механическую обработку визуальных элементов, которые и в 8.1, и в 8.2 — основаны у 1с на одних и тех же сишных бибилиотеках.

    А с кодом-то что будете делать? или у вас форма будет работать и функционировать без кода формы? 🙂

    Reply ↓
  77. mtv:)

    (0) Наткнулся на ограничения программной генерации элементов формы:

    1. В ФормеДокумента у ПоляВвода невозможно программно задать «Связь по владельцу».

    2. В ФормеСписка при программной вставке Колонки в ТабличноеПоле, в диалоге «Отбор и сортировка» отсутствует втавленная Колонка.

    Пока только это, возможно есть и другие ограничения.

    Reply ↓
  78. sorb

    Отличная обработка, нередко ей пользуюсь.

    На днях столкнулся с такой проблемой: при попытке анализа формы обработки «ПанельФункций» из БП 2.0 словил ошибку:

    {ВнешняяОбработка.ДекомпиляцияИАнализФорм.МодульОбъекта(490)}: Поле объекта не обнаружено (Имя)
    Если пФормаКопия.ЭлементыФормы.Найти(Стр1Уровня.Элемент.Имя)=Неопределено Тогда
    

    В отладчике видно следующее:

    Стр1Уровня.Элемент = Панель (Тип Панель)

    Стр1Уровня.Элемент.Имя = «Поле объекта не обнаружено (Имя)»

    Стр1Уровня.ИмяЭлемента = «ПанельПериод»

    Теперь вопросы 🙂 :

    1. Кто-нибудь пробовал анализировать данную конкретную форму? Если да, то возникала ли такая ошибка?

    2. Из кода видно, что вложенность панелей не учитывается. Правильно ли я понимаю, что это и послужило причиной ошибки?

    P.S. Шибко ковыряться сейчас нет времени, поэтому буду благодарен за любую помощь.

    Reply ↓
  79. AlexO

    Вот и пришло время начать говорить о том, что НЕЛЬЗЯ сделать программно.

    Нельзя создавать стандартные кнопки — Добавить, Переместить, Сортировать и т.д.

    Потому как нужно задавать действие, а его как такового не существует — пока не создана панель с кнопками. Т.е. в платформу не вшиты события стандартных кнопок, на которые можно было бы сослаться — они генерируются при создании элемента. Создаешь панель — создаются кнопки и события. Либо можно сослаться на уже созданные кнопки, но только если они есть. АвтоЗаполнение компанели, кстати, тоже не работает при программном создании.

    Это ответ 1с — ООПу и наследованию классов.

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

    В 8.2 на УФ данную проблему можно обойти (создавать стандартные кнопки в своих панелях), но там свои проблемы — с размещением кнопок и далеко не в каждой пользовательской панели их можно разместить.

    Reply ↓
  80. AlexO

    Далее. Нельзя программно переместить элемент с одной вкладки на другую.

    Все интереснее и чудесатее..

    Reply ↓
  81. AlexO

    (28) vkr, (29) woozee,

    вот и прошел мой пример испытание временем ))

    Попробуйте программно создать вкладку, ТП на ней, компанель к ней…. на последнем пункте все и рушится.

    Нельзя создать такую панель.

    А работает единственный мой способ с подменой формы.

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

    (22)

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

    значит, ничего серьезного не делали программно ))

    Вот даже элементарную стандартную панель нельзя сделать ))

    Upd:

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

    Reply ↓
  82. bambr1975

    (82) AlexO, честно говоря, Вы производите впечатление человека неглупого, но какого-то ни во что не верящего и ужасно невнимательного.

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

    P.S. Ограничения в программном добавлении элементов на форму безусловно есть — но и ручную обработку поступающей информации тоже никто не отменял — просто можно же себе жизнь упростить…

    Reply ↓
  83. AlexO

    (83) именно это и пробовал — и в модуле формы, и в общем модуле:

         КоманднаяПанель = ЭлементыФормы.КоманднаяПанель2;
    КоманднаяПанель.ИсточникДействий = ЭлементыФормы.ТабличноеПоле1;
    КоманднаяПанель.Автозаполнение=Истина;

    — не работает…

    Сейчас вообще ругается — «Перменная не определена: ГраницаЭлементаУправления».

    В общем, веселая у меня база…

    Reply ↓
  84. bambr1975

    (84) AlexO, источник действий — существующий реквизит формы (он у Вас существует? Проверьте!)

    ГраницаЭлементаУправления — системное перечисление. Доступно в толстом клиенте. Вы в толстом клиенте работаете?

    Короче — разобраться можно… Если понимать, зачем Вам это…

    Reply ↓
  85. AlexO

    (85) bambr1975,

    источник действий — существующий реквизит формы

    мы же его (ТабличноеПоле) полностью программно создаем? или все-таки должно быть уже в реквизитах формы — реквизит табличное поле?

    . Доступно в толстом клиенте

    я знаю, что это системное перечисление. Как и «ТипКнопкиКоманднойПанели».

    Все работало, а потом — раз, и «не видит» перечислений…

    Работаю конечно в толстом. Все уже проверил (сама думал — вдруг слетело).

    Reply ↓
  86. AlexO

    (83) bambr1975,

    вот, кстати, мой идентичный неработающий код:

     КоманднаяПанель = ЭлементыФормы.Добавить(Тип(«КоманднаяПанель»),»кпПроект»,Истина,ЭлементыФормы.Панель1);
    УстановитьПоложениеЭлемента(КоманднаяПанель,10,25,6,380);
    КоманднаяПанель.ИсточникДействий = ЭлементыФормы.тпМенеджеры;
    КоманднаяПанель.УстановитьПривязку(ГраницаЭлементаУправления.Низ,КоманднаяПанель,ГраницаЭлементаУправления.Верх);
    КоманднаяПанель.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭтаФорма.Панель,ГраницаЭлементаУправления.Право);
    КоманднаяПанель.АвтоЗаполнение = Истина;
    

    тпМенеджеры — до этого программно созданное ТП.

    Reply ↓
  87. bambr1975

    Реквизиты формы должны находиться на закладке «Реквизиты» у формы. Их программно создавать у нас не получится (в этом и есть ограничение. А вот ЭЛЕМЕНТЫ ФОРМЫ, связать с реквизитами и назначить им свойства — пожалуйста.

    Reply ↓
  88. AlexO

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

    Системные кнопки тоже не видит. Вернее, их действия.

    Reply ↓
  89. bambr1975

    В Вашем неработающем коде, скорее всего для тпМенеджеры не установлено

    ЭлементыФормы.тпМенеджеры.Данные=»<строка реквизита формы, значение которого у вас должно выводиться в это тп>;

    Этот реквизит должен быть или табличной частью объекта, форму которого Вы разрабатываете или этот реквизит должен быть описан на закладке «Реквизиты» самой формы.

    Reply ↓
  90. bambr1975
    Системные кнопки тоже не видит. Вернее, их действия

    Ну… это смотря как эти действия задавать. У меня видит.

    Reply ↓
  91. AlexO

    (90) bambr1975,

    да ну как не установлено — установлено конечно же 🙂

    ТабличноеПоле = ЭлементыФормы.Добавить(Тип(«ТабличноеПоле»),»тпМенеджеры»,Истина,ЭлементыФормы.Панель1);
    УстановитьПоложениеЭлемента(ТабличноеПоле,40,173,6,380);
    ТабличноеПоле.Данные = «МенеджерыПроектов»;
    

    где МенеджерыПроектов — ТЧ объекта

    Reply ↓
  92. AlexO

    (91) bambr1975,

    ну например, вот так:

    кпПроектКнопки.Вставить(1,»Скопировать»,ТипКнопкиКоманднойПанели.Действие,»&Скопировать»,Новый Действие(«Скопировать»));

    хотел системную кнопку «Скопировать» заарканить.

    Reply ↓
  93. bambr1975

    (78) mtv:),

    1. В ФормеДокумента у ПоляВвода невозможно программно задать «Связь по владельцу».

    2. В ФормеСписка при программной вставке Колонки в ТабличноеПоле, в диалоге «Отбор и сортировка» отсутствует втавленная Колонка.

    Первая проблема вроде действительно не рещается.

    Вторая — решается простым добавлением в код программного добавления строк:

    ЭлементыФормы.ТабличноеПоле.НастройкаОтбора.РеквизитДобавленнойКолонки.Доступность=истина

    Reply ↓
  94. Feelthis

    Если сделать как написано в комментарии:(54) то все прекрасно работает, а так при анализе документа «Начисление по больничному листу» зацикливался в процедуре «ПеренестиПодчиненныеСтроки» модуля объекта и 1С в дамп вываливалась

    Reply ↓
  95. frc

    (78) mtv:),

    В ФормеДокумента у ПоляВвода невозможно программно задать «Связь по владельцу».

    это ограничение еще с 8.0 — запрещено программно устанавливать СвязьПоВладельцу.

    2. В ФормеСписка при программной вставке Колонки в ТабличноеПоле, в диалоге «Отбор и сортировка» отсутствует втавленная Колонка.

    По Сортировке нужно отдельно прописать установку флага

    ЭлементыФормы.ДокументСписок.НастройкаПорядка[«ИмяКолонкиТП»].Доступность = Истина;

    (111) bambr1975,

    ЭлементыФормы.ТабличноеПоле.НастройкаОтбора.РеквизитДобавленнойКолонки.Доступность=истина

    в Отбор вроде как попадает без этой строки сразу при создании.

    Reply ↓
  96. tchvlad

    (8) mamanelli,

    Уважаемый не полно оценил 🙂

    Какие еще кончики пальцев? Тупо кодить массу текста, когда можно автоматизировать?

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

    Reply ↓
  97. Cerberdm

    (54) bambr1975, Спасибо, помогло.

    Reply ↓
  98. Cerberdm

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

    Reply ↓
  99. wing

    Обработка не добавляет страницы на панели… а в остальном очень удобна с правками (54)

    Reply ↓

Leave a Comment

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