<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Декомпиляция отдельных элементов формы и самой формы в общем, для формирования кода для динамического вывода реквизитов.
Перейти к публикации
Что с определением цветов и шрифтов из стиля? 🙂
Знаю только одну обработку в которой это реализовано.
(1) Нет, не реализовано. Мне пока это не нужно.
(2) Добавь в описание, только для обычных форм.
(3) Сделал.
(1) какая обработка это делает ?
(5) полное (ВЫПОЛНЯЕМОЕ) перобразование, позволяющее скопировать форму
Да, такую бы обработку для управляемых форм!
Всё здорово, помогает экономить время на динамическом добавлении элементов в форму.
Плюс однозначно 😉
(8) Нет, всё это знать не обязательно. Для этих целей есть СП, мануалы, шаблоны кода. Главное знать что искать и как искать.
(9) Ладно, не нападай 🙂 От шаблонов кода очень часто остаются куски причудливой формы 😀 Или я после НЕ тех программистов работал 😉
Понять не могу для чего она =) И чем полезна она будет))
(11)Мне кажется в описании все написано. Ну а если другими словами, то обработка, чтобы добавленные программистом реквизиты, колонки, кнопки в типовых конфигурациях выводить программно, дабы при обновлении все это не затерлось, да и просто чтобы процесс обновления был быстрее и менее сложен.
Да? Есть одна формочка стандартная суперпеределанная…. Надо проверить… Но суть не в этом) Идея (в моем случае) понравилась.
А привязки по форме в обычной форме тоже программно описывает?:)
(13) Да, привязки описывает. Это одно из самых важных, как же без них)
Спасибо, плюс.
Ждем когда управляемые формы достигнут подобного уровня программизма )
Не работает) Минус) В единственной сложной форме и то не пригодился))
1Ска виснет, нагрузка на комп возрастает до максимума, через продолжительное время вылетает.
Проблема в 573 строчке (Цикл) — то есть «зацикливание».
Ждем фикс) Или уже не ждем))
(16) У меня не возникало подобное.. А какие значения в «СтрИсточник» в зацикливаемой строке? И что за форма?
Бухгалтерия 2.0.29 СписниеСРасчетногоСчета.ФормаДокумента В СтрИсточник строка дерева =) Они там меняются эти деревья) Значения вроде адекватные, а что так долго — я не знаю. но в замере производительности оно зацикливается.
Форма Переделана в плане того что добавлена панелька с добавочной страницей, на эту панельку перенесена основная панелька, та самая с кучей страниц. Ну и пара полей добавлено )) Ну как то так)))
все делается намного проще.
копируется форма и меняется все что нужно, подключается паровозом к оснвоной.
а программно создавать — в любом случае никакие обработки не помогут.
Вообще, создание программно чего-либо и 1с — вещи несовместимые и чреваты ошибками и лажей.
Ну не предполагало 1с так делать, не предполагало….
(19) AlexO,
Идея программно добавлять нестандартные элементы намного проще чем постоянно отслеживать изменения в элементах формы. Что я и взял на вооружение. Правда перерисовывать то что у нас с этой формой — не представляю даже себе КАК))) Вернее… лениво даже представлять)
На счет паровозом к основной — Если документ не ахти какой, очень редко обновляется — то да, в какой то степени возможно. Дело в том что в этом случае сложно отслеживать изменения и гораздо чаще будут вылетать ошибки после обновления.
Самым правильным будет просто переносить свои кнопочки, поля и т.д. Ну и что, что это может занять продолжительное время — зато практически не возникают ошибок)
(21) +1
(20)
Ну не предполагало 1с так делать, не предполагало….
Да ты что) А у меня проект, где все добавленные реквизиты выводятся программно, благополучно уже сдан и работает.
Ну во-первых цель обработки не сделать вместо программиста, а облегчить, точнее ускорить добавление. Нужно понимание как программно выводить, тогда поможет.
копируется форма и меняется все что нужно, подключается паровозом к оснвоной.
Проще? Неожиданно) Это по сути значит, что форма будет отключена от обновлений, то есть само действие не имеет никакого смысла. Это тоже самое, что при обновлении у формы снимать флажок обновления. И рано или поздно возникнут проблемы, потому что что-либо добавлять нужно обычно в часто используемых объектах метаданных, обновления для которых приходят если не каждый релиз, то через релиз.
(22) Мне можно надеятся на испралвение ошибки «зацикливания», или забить?:)
(23) Да, исправлю. Единственное сейчас запар некоторый на работе, но до конца недели точно время найду.
Вот все-таки, для чего это может пригодиться? Неужели нельзя обойтись без генерации кучи кода? Что касается форм объектов — ну это понятно — создаются создаются доп. формы журналов (списков) в них отлавливается «ПриВыборе» и открывается «своя» форма объекта. Какая ситуация может потребовать использования такого подхода при доработке типовой конфигурации с возможностью сохранения обновлений?
(22) собственно, в (25) вам ответили. Там как один из вариантов подключения допформы.
Основная форма остается для обновлений, где-то (можно перед открытием основной формы — при обновлении обновлять спокойно с закрытыми глазами, только потом вставить строчку обратно переключения-ответвления на допформу) вставляется переключатель, допформа один-в-один с основной+изменения, какие надо было внести.
Пользователь открывает как обычно, получает «родную» по внешнему виду форму с доработкой, старая остается нетронутой и лежит, ждет последующих обновлений.
Допформу, кстати, не обязательно пихать в документ, а оставить отдельной обработкой в конфе (и затираться она не будет), а подключать её именно как форму, с сохранением всех остальных событий и процедур родного документа.
(25) такое может потребоваться как раз там, где нужно и обновления ставить «неглядя», и все-таки внести изменения в «типовую» форму. Т.е. совместить несовместимое.
Что и удается.
(22) а все программно выводимые реквизиты… механизм отслеживания изменений — отсутствует (кроме визуального восприятия), механизм проверки и контроля создаваемых программно элементов — отсутствует, набор инструментов для создания таких якобы «программных» элементов (на самом деле — это создание куцых «вроде поля»-элементов, как и все полууправляемые или совсем неуправляемые ЭУ в 1С) — отсутствует.
В конце концов, будет куча кода, который рухнет под собственной тяжестью.
«сдал проект».. Сдать — полдела, еще и сопровождать это надо. А от этого, я так понимаю, вы самоустранились.
Прекрасно понимая, что снова разгребать кучу кода от «программно создаваемых элементов» — занятие не для слабонервных.
(26)
Ну видимо как-то так, да — «совместить несовместимое». И склоняюсь к тому что эту стратегию можно рекомендовать для применения как раз в таком случае — «впихнуть невпихуемое», а в случае когда есть возможность создать доп. формы (обработки с дин. списками и etc.) все же следует создавать объекты, используя префиксы, общие модули и т.п.
—
Мнение мое и не обязательно правильное.
По-моему, предложенный автором метод — прекрасный вариант компромисса для вечно загруженного 1С-программера ! 🙂
Лично я обязательно начну постепенно использовать — задолбало каждый раз свои «кнопки» перегонять в новый билд…
Спорить можно бесконечно))
Всем известно что для решения задачи присутствует разновсяческое множество вариантов. От кривых до идеально правильных, оптимизированных и прям супер-пупер…
Для проектирования своего нововведения или «хотелок» пользователей нужно учитывать не только легкость обновлений, быстродействие, но и самым важным будет удобство пользователей в работе с энтим инструментом)) При этом учитывать эргономичность формы, и не потерять производительность работы.
Чем хороша данная обработка — посидел, потыкал кнопки, скопировал код, описал красиво комментариями и забыл до УФ))
С сопровождением кода проблем не будет никаких. Проблемы возникают только у тех фирм которые сопровождаются у фирм-франчайзи которые имеют штат неопытных сотрудников, либо фирм которые наняли «сопроводителя» «подешевле». Но это другая история))
(26) Идея: для обновлений оставить Основную форму (без визуальных изменений) а добавленные реквизиты хранить на форме _дополнительные — и добавлять при открытии обходом всех элементов этой формы.
:удобно тем что видно на глаз новые реквизиты и легко изменить их положение.
(28) vkr,
как раз нисколько не прекрсаный, вам предложен более простой и надежный, а главное — сопровождаемый метод.
Не понимаете — так и скажите.
(29) woozee,
>> Чем хороша данная обработка — посидел, потыкал кнопки, скопировал код, описал красиво комментариями и забыл до УФ))
С сопровождением кода проблем не будет никаких. Проблемы возникают только у тех фирм которые сопровождаются у фирм-франчайзи которые имеют штат неопытных сотрудников, либо фирм которые наняли «сопроводителя» «подешевле».
— ну что ж, остается вам пожелать получить срочное задание по доработке/исправлению вот после такого же программиста «а че тут непонятно, если не можешь разобрать программно <мной> созданные формы — ты дурак».
А 1С специально сделана, чтобы путать всех и вся. И не надейтесь, что вас кто-то пожалеет и будет писать «как вам удобно/известно». 1с-ники — в большинстве народ малограмотный.
(31) AlexO,
>> «а че тут непонятно, если не можешь разобрать программно <мной> созданные формы — ты дурак»
Самое интересное что есть доля правды))) Дело в том что есть некий стандарт разработки, предложения от 1С. Все эти материалы находятся на диске ИТС. Если хотя бы о них догадываться и если еще немного и почитывать, то разбираться в стандартных конфигурациях, и в коде тех программистов которые хотя бы примерно им придерживаются — проблем особых не возникает))
Показать
Чего сложного?:)
(30) Дело в том что бывает добавлена страница в панельке без отображения заголовков этих страниц. Либо забываешь привязать процедурку к стандартному реквизиту, например, ПриИзменении… ПриВыборе
(32) woozee,
1с сама же и нарушает везде и свюду свои «правила».
потому у 1с главное правило — никаких правил…
(31),(33) Вот уж никогда не придерживался «стандартов разработки» от 1С…
Могу посоветовать Вам прочесть прекрасную книгу :
Мифический человеко-месяц или Как создаются программные системы
(The mythical Man-Month: Essays on Software Engineering)
Автор: Фредерик П. Брукс
Издание 1975 или 2010 г.
Надеюсь, она Вам будет полезна…
(28) vkr,
а и не перегоняйте, сделайте, как я советую в (26) ))
и просто, и обновлять больше не надо.. разве что изменится сама «родная» форма-родитель, и вам захочется сделать «потомка» снова на неё похожим..
(30) i132,
что за форма «Дополнительные»? предлагаете создать новую форму, хранить на ней некие новые реквизиты, потом программно считывать их оттуда и вставлять программно же на старую форму?
а зачем вся эта длиннющая цепочка? а если «порвется» где-нить — как отследите, что перестало работать?
(34) vkr,
теория программирования, теории обработки БД, хранения данных, и 1с — несовместимы ))
это уже известно давно с выходом снежка…
(0) рано или поздно возникнут проблемы как в (18), т.к всегда «остаются куски причудливой формы», все эти программные изыски неуниверсальны в силу уже указанной причины — ребята, это не Си, а 1С, которая плевать хотела на все правила, стандарты и развитие программирования, а с выходом 8.2 — и вообще плевать на программиста..
хотя у меня есть идея, где все это «программное» чудо пригодится… как раз для «чистого» творчества нужно…
только боюсь, даже в условиях ограниченных требованиях, которые я предъявлю, программное формирование элементов от 1С не выйдет из своих жестких рамок..
А декомпилировать всю форму со всеми элементами из=за обновлений, чтобы добавить один-два новых элементов на форму..
А почему никто не попробовал сделать как предложено в (30) — добавлять только нужные, и привязками/размещением играть?
хотя сами элементы могут сместится на новой форме…. а это уже никак не отследишь программно — или писать целый механизм сравнений и корректировок..
короче, я вам способ подсказал, но можете все делать программно ))
а я попробую в том механизме, где это действительно нужно и очень важно…
слушай, Истур, а это ведь ты натолкнул меня на мысль со своей идеей дискретно декомпилировать.. хотя и так вроде было на поверхности, а вот поди ж ты… ))
надоть тебе плюсик за это поставить…
Так проблема из (18) поправлена?
если можно, пришли исправленный вариант по личке… а то тут с этими ограничениями замучаешься качать…
(35) Да, я с Вами согласен по поводу идеологической несовместимости 1С с нормальными принципами…
Хотя, по мере возможности, борюсь у себя с этой проблемой (пусть даже за счет некоторых потерь сил и нервов).
Спасибо за диалог! 🙂
(37) AlexO, странно, муза под конец рабочего дня приходит =)
(38) vkr,
с 1с бороться бесоплезно ))
примените стиль айкидо — уйти с линии удара и пусть валится…а как упадет — можно диктовать свои условия.. ))
(39) woozee,
что-то путное на 1с можно изобрести только абстрагировавшись от 1с ))
При добавлении колонки в ТабличноеПоле метод УстановитьДействие не прокатывает :-/
Было бы неплохо накидать справку в обработке, подобную той что вы здесь привели
(40) Спасибо, Вы очень точно сформулировали методику взаимоотношений с 1С… 🙂
Буду теперь знать, как это называется…
Только на диктовку им условий мне начхать — я работаю по-своему, клиенты довольны — это главное…
(7) vasiliy_b,
(44) что-то сомнительно… в тонком же это невозможно в принципе — так откуда «для управляемых форм»??
(45) Почему же невозможно? Программно добавлять элементы на форму можно?! Обходить все элементы формы можно?! так почему же это нереально?
(46) в УП нельзя. УФ формируются динамически, поэтому программно ничего добавить нельзя.
Только если в режиме толстого клиента.
(47) AlexO, А как же тогда реализован вывод реквизитов свойств объектов на формы? В типовых конфигурациях в управляемых формах? Прежде чем говорить посмотрите сначала УТ 11 например, в справочник номенклатур добавьте пару свойств…. и о чудо дядьки из 1с прибегут и добавят вам эти реквизиты к объекту, чтоб они динамически сформировались…. а потом еще будут прибегать когда вы будете обновления накатывать.
(47) AlexO,
Откуда такие сведения если не секрет? Религия не позволяет или Нуралиев запретил?
Ошибка: Берем ТЧ документа, добавляем новый реквизит(я добавлял типа число (15,3)) далее выводим эту колонку на форму привязываем событие «ПриИзменении», и добавляем изменение цвета при выводе строки.
Декомпилируем эту колонку и получаем следующие ошибки:
Было:
Колонка.УстановитьДействие(«ПриИзменении»,Новый Действие(«Товары_БруттоПриИзменении»));
Надо
Колонка.ЭлементУправления.УстановитьДействие(«ПриИзменении»,Новый Действие(«Товары_БруттоПриИзменении»));
…
Было
Колонка.ЭлементУправления.ТипЗначения = Новый ОписаниеТипов(«Число»,,,Новый КвалификаторыЧисла(15,3));
Это не нужно, ругается т.к. тип уже назначен. И еще нужно добавить:
Колонка.Имя = «_Брутто»
Иначе имя колонки добавляет «Колонка1»
(48) да, ошибся, извините.
Думал, только невизуальные реквизиты можно.
Посмотрел, добавлять можно, но что-то все через ж.. происходит с результатом..
Отличная обработка, спасибо! Пол года о ней мечтал. Ну теперь — держись, УПП =)
Есть проблема:
Для декомпиляции выбираю форму реализации товаров и услуг.
При работе через терминал (возможно это важно) подвисает на процедуре ДеревоЭлементовФормыПриПолученииДанных(Элемент, ОформленияСтрок)
За 5 секунд успевает выполнить эту процедуру 85 000 раз.
Пока отключаю процедуру и ориентируюсь по пустым строкам.
Можно ли при построении дерева сразу указать представление ячеек?
Возможно ли от программно созданной формы перейти к непрограммно ?
Шаг обратный декомпиляции, чтобы клиенту высылать стандартную, нединамическую ?
(55) kiruha,
нет, невозможно — механизма превращения кода 1с в «физический» объект с записью в конфигурацию (на диск) не существует.
Впрочем, в 1с8 в принципе нет выгрузки объектов интерфейса отдельно.
Даже просто создания махонького реквизита для хранения данных у объекта.
Это привет вам от Великого Отсутствия ООП в 1с ))
Если же вы про превращение УФ в обычную форму — тоже невозможно автоматически.
(22)
ну, и как обновляете модуль формы со всеми процедурами обработки таким образом созданных элементов?
(8) mamanelli,
ждем статью, где все, что надо будет знать программисту «на кончиках пальцев», будет описано и выложено в коде, набранном именно таким же методом — без справки по памяти ))
при попытке разобрать форму (устанавливаем курсор на форму элемента в дереве слева) в ЗУП релиз 47 (командировки организаций) падает сеанс 1С:Предприятие 8.2 (8.2.15.301)
(48) vasiliy_b,
ну и где же динамически добавленные «реквизиты»? уж не хранятся ли они в строго ограниченных регистрах свойств объектов?
вы или ваши дядьки из 1с сделате так, чтобы «программно созданный» реквизит хранил данные, а не просто использовался для подстановки предопределенных значений??
(59) rasswet,
это нормально
В УПП в справочнике Проекты при выборе ФормыЭлемента — вылет.
(61) ну..не совсем..другой парсер с этого сайта парсит без ошибки.
но мне нравится работать с тем, который тут. а он валится.
(63) rasswet, попробуйте слегка поправить код (как описано в (54)) — может, поможет 😉
(65) спасибо, завтра протестирую на той же форме.
(65) протестировал ваш файл.
теперь не виснет. но есть Ошибка
{ВнешняяОбработка.ДекомпиляцияИАнализФорм.МодульОбъекта(165)}: Поле объекта не обнаружено (Верх)
мТекст.ДобавитьСтроку(Таб + СтрокаПробелов + «УстановитьПоложениеЭлемента(» + ТекстЭлементДляРазмеров + «,» +
(65) уточню. ошибку выводит когда ставлю Флаг напротив «работники организации» табличное поле. и при полном анализе формы. на других элементах ошибку не выдает.
(67) rasswet,
я не знаю, что у вас за конфигурация, и что за объект «Работники организаций», в котором есть некое ТабличноеПоле.
Поэтому здесь не помогу ничем.
По поводу
— у распарсиваемого объекта нет свойства «Вверх», которое ищет обработка и пытается изменить.
(69) зуп конфигурация. немного измененная..
(68) rasswet,
если эти «Работники организаций» — это регистр сведений, то в типовой ЗУП ошибок нет.
Идея интересная. А вот бы обработку, которая из <неуправляемой> формы создавала <управляемую>
(71)это документ «командировки организаций», табличная часть его называется «работники организации»
(72) dandrontiy,
1c в принципе «не предусмотрела» таких конвертаций и механизмов для этого не вводила в платформу.
(73) rasswet,
ругается на поля ТП.
Поля «ОсвобождатьСтавку» и «НапомнитьПоЗавершении» — имеют тип булево (флажки), и, видимо, с этим и связано «непонимание» обработки. Остальные поля с дургими типами — отрабатывают.
(74) AlexO, Так я про это и говорю.
НО наверно можно собрав информацию о всех элементах формы попытаться создать кучу областей на управляемой форме, куда накидать такие же элементы. просто количество вложенных областей получится очень большим, и вручную такую работу проделать просто нереально.
(76) dandrontiy,
это вы про чисто механическую обработку визуальных элементов, которые и в 8.1, и в 8.2 — основаны у 1с на одних и тех же сишных бибилиотеках.
А с кодом-то что будете делать? или у вас форма будет работать и функционировать без кода формы? 🙂
(0) Наткнулся на ограничения программной генерации элементов формы:
1. В ФормеДокумента у ПоляВвода невозможно программно задать «Связь по владельцу».
2. В ФормеСписка при программной вставке Колонки в ТабличноеПоле, в диалоге «Отбор и сортировка» отсутствует втавленная Колонка.
Пока только это, возможно есть и другие ограничения.
Отличная обработка, нередко ей пользуюсь.
На днях столкнулся с такой проблемой: при попытке анализа формы обработки «ПанельФункций» из БП 2.0 словил ошибку:
{ВнешняяОбработка.ДекомпиляцияИАнализФорм.МодульОбъекта(490)}: Поле объекта не обнаружено (Имя) Если пФормаКопия.ЭлементыФормы.Найти(Стр1Уровня.Элемент.Имя)=Неопределено ТогдаВ отладчике видно следующее:
Стр1Уровня.Элемент = Панель (Тип Панель)
Стр1Уровня.Элемент.Имя = «Поле объекта не обнаружено (Имя)»
Стр1Уровня.ИмяЭлемента = «ПанельПериод»
Теперь вопросы 🙂 :
1. Кто-нибудь пробовал анализировать данную конкретную форму? Если да, то возникала ли такая ошибка?
2. Из кода видно, что вложенность панелей не учитывается. Правильно ли я понимаю, что это и послужило причиной ошибки?
P.S. Шибко ковыряться сейчас нет времени, поэтому буду благодарен за любую помощь.
Вот и пришло время начать говорить о том, что НЕЛЬЗЯ сделать программно.
Нельзя создавать стандартные кнопки — Добавить, Переместить, Сортировать и т.д.
Потому как нужно задавать действие, а его как такового не существует — пока не создана панель с кнопками. Т.е. в платформу не вшиты события стандартных кнопок, на которые можно было бы сослаться — они генерируются при создании элемента. Создаешь панель — создаются кнопки и события. Либо можно сослаться на уже созданные кнопки, но только если они есть. АвтоЗаполнение компанели, кстати, тоже не работает при программном создании.
Это ответ 1с — ООПу и наследованию классов.
И даже программное создание своих кнопок — требует, чтобы события обработки действий находились в модуле формы, иное не работает ни при каких обстоятельствах (ссылки на форму/другие формы — бесполезны).
В 8.2 на УФ данную проблему можно обойти (создавать стандартные кнопки в своих панелях), но там свои проблемы — с размещением кнопок и далеко не в каждой пользовательской панели их можно разместить.
Далее. Нельзя программно переместить элемент с одной вкладки на другую.
Все интереснее и чудесатее..
(28) vkr, (29) woozee,
вот и прошел мой пример испытание временем ))
Попробуйте программно создать вкладку, ТП на ней, компанель к ней…. на последнем пункте все и рушится.
Нельзя создать такую панель.
А работает единственный мой способ с подменой формы.
Так что программное создание элементов, мягко говоря, оченьо узкое и специализированное занятие.
(22)
значит, ничего серьезного не делали программно ))
Вот даже элементарную стандартную панель нельзя сделать ))
Upd:
Ниже разобрались, что можно сделать создание КП через общий модуль (но не глобальный), заработало автозаполнение (почему не работало — причина осталась неясна), и без хранения исходной КП с кнопками на родительской форме.
(82) AlexO, честно говоря, Вы производите впечатление человека неглупого, но какого-то ни во что не верящего и ужасно невнимательного.
Специально для Вас смоделирована ситуация с программным добавлением табличного поля и автозаполнением связанной с ним командной панели.
P.S. Ограничения в программном добавлении элементов на форму безусловно есть — но и ручную обработку поступающей информации тоже никто не отменял — просто можно же себе жизнь упростить…
(83) именно это и пробовал — и в модуле формы, и в общем модуле:
— не работает…
Сейчас вообще ругается — «Перменная не определена: ГраницаЭлементаУправления».
В общем, веселая у меня база…
(84) AlexO, источник действий — существующий реквизит формы (он у Вас существует? Проверьте!)
ГраницаЭлементаУправления — системное перечисление. Доступно в толстом клиенте. Вы в толстом клиенте работаете?
Короче — разобраться можно… Если понимать, зачем Вам это…
(85) bambr1975,
мы же его (ТабличноеПоле) полностью программно создаем? или все-таки должно быть уже в реквизитах формы — реквизит табличное поле?
я знаю, что это системное перечисление. Как и «ТипКнопкиКоманднойПанели».
Все работало, а потом — раз, и «не видит» перечислений…
Работаю конечно в толстом. Все уже проверил (сама думал — вдруг слетело).
(83) bambr1975,
вот, кстати, мой идентичный неработающий код:
тпМенеджеры — до этого программно созданное ТП.
Реквизиты формы должны находиться на закладке «Реквизиты» у формы. Их программно создавать у нас не получится (в этом и есть ограничение. А вот ЭЛЕМЕНТЫ ФОРМЫ, связать с реквизитами и назначить им свойства — пожалуйста.
Ненадежно оно как-то все. Автозаполнение сразу не заработало, перечисления — перестал видеть немного погодя.
Системные кнопки тоже не видит. Вернее, их действия.
В Вашем неработающем коде, скорее всего для тпМенеджеры не установлено
ЭлементыФормы.тпМенеджеры.Данные=»<строка реквизита формы, значение которого у вас должно выводиться в это тп>;
Этот реквизит должен быть или табличной частью объекта, форму которого Вы разрабатываете или этот реквизит должен быть описан на закладке «Реквизиты» самой формы.
Ну… это смотря как эти действия задавать. У меня видит.
(90) bambr1975,
да ну как не установлено — установлено конечно же 🙂
где МенеджерыПроектов — ТЧ объекта
(91) bambr1975,
ну например, вот так:
хотел системную кнопку «Скопировать» заарканить.
(78) mtv:),
2. В ФормеСписка при программной вставке Колонки в ТабличноеПоле, в диалоге «Отбор и сортировка» отсутствует втавленная Колонка.
Первая проблема вроде действительно не рещается.
Вторая — решается простым добавлением в код программного добавления строк:
ЭлементыФормы.ТабличноеПоле.НастройкаОтбора.РеквизитДобавленнойКолонки.Доступность=истина
Если сделать как написано в комментарии:(54) то все прекрасно работает, а так при анализе документа «Начисление по больничному листу» зацикливался в процедуре «ПеренестиПодчиненныеСтроки» модуля объекта и 1С в дамп вываливалась
(78) mtv:),
это ограничение еще с 8.0 — запрещено программно устанавливать СвязьПоВладельцу.
По Сортировке нужно отдельно прописать установку флага
(111) bambr1975,
в Отбор вроде как попадает без этой строки сразу при создании.
(8) mamanelli,
Уважаемый не полно оценил 🙂
Какие еще кончики пальцев? Тупо кодить массу текста, когда можно автоматизировать?
Я использую аналоги этой разработки — мои кончики пальцев и так не знают отдыха, многое умеют, а потому жирный плюс.
(54) bambr1975, Спасибо, помогло.
Автору огромная благодарность ) начал уже создавать свою обработку для этих же целей, хорошо вовремя на ссылку наткнулся, не так много времени убил. Плюсую без вопросов! Отличная работа) — особенно с учетом (54)
Обработка не добавляет страницы на панели… а в остальном очень удобна с правками (54)