Версия для печати темы (https://pro1c.org.ua/index.php?s=a01272fc7137348e76390da8abd2ecac&showtopic=54517)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Программное создание кнопки для всех документов в формах объекта

Автор: Gigi 07.10.19, 13:34

Всем опять привет!
Вообще на данном сайте как то кем то было сказано про мысли в слух ))
Но чем пожалуй решил поделиться, это уже не "мысли в слух, а мысли в крик smile.gif
Хотите знать, чем вообще занимаюсь, и на что трачу кучу времени...
ДОДЕЛЫВАЮ ТО ЧТО ПРОИЗВОДИТЕЛИ СИСТЕМЫ 1С НЕ ДОРАБОТАЛИ. Вот чем.
Просто создал пустую голую тестовую базу и пишу кучу функций к ней, которые максимально универсальны, и поэтому гораздо удобнее чем встроенные функции.
И кроме того, вообще улучшаю возможности конфигурации в целом. Добавляя туда кучу тех возможностей которых не хватает.
Тех возможностей, которые уже должны были быть в системе 1С во встроенном готовом виде. Что бы программисту меньше было работы.
И все это элементарно для того что бы подготовить почву для возможных заказов. Что бы делать их быстро и эффективно. А не заниматься разной ерундой, и тратить на это время. Той ерундой, которой вынуждает заниматься платформа своими многочисленными недоработками.
Вот чем я занимаюсь!
Ну согласитесь... занимаюсь тем чем НЕ ДОЛЖЕН ЗАНИМАТЬСЯ!
Так что, без всего этого караул.
Ладно ... перейду к вопросу:
Вот код:

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

Думаю тут все понимают назначение примера данного кода. Но вопрос в чем:
Как сделать то что делает код, для любой ФормаОбъекта... ЛЮБОЙ! На пример по любому объекту документа.
Как известно есть подпись на событие: "ОбработкаПолученияФормы".
И поэтому вот процедура по стандарту:
Процедура ДокументПолученияФормыОбработкаПолученияФормы(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт
Если ВидФормы="ФормаОбъекта" Тогда
// И как тут ... или это не подходит и так не получиться для указанной цели..
//НоваяКоманда = Источник.Команды.Добавить("ДанныеАвтозаполнения_Сохранить");        
КонецЕсли;

Короче хотел по быстрому получить ответ возможно ли это. Или великий и могучий 1С опять не позволяет сделать разумнее.
Если да то как?
Буду признателен!

Автор: sava1 07.10.19, 14:28

При добавлении команды формы обработчик (по-моему) тоже должен быть в форме.

ОбщаяКоманда - не подходит ?

Автор: Gigi 07.10.19, 15:35

sava1 @ Сегодня, 15:28 * ,

Цитата(sava1 @ 07.10.19, 15:28) *
При добавлении команды формы обработчик (по-моему) тоже должен быть в форме.

ОбщаяКоманда - не подходит ?

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

Gigi @ Сегодня, 15:42 * ,
Короче уважаемые … позвольте все объясню для чего это нужно. Для большего понимания.
И не обессудьте за не довольство. На которое имею право.
Дело в том, что просто хочется платформе придать для человека более удобоваримый вид.
А так согласен ... в 1С есть куча встроенных функций и это круто. Но, тем не менее для до конца удобной работы очень много чего не хватает.
На пример как в вопросе указанного выше пример кода.
Знаете для чего это нужно?
Цель следующая:
Во всех формах объекта по документам должна быть кнопка. И нажав на эту кнопку выходит список всех реквизитов по объекту с галочками.
После чего как только пользователь выбирает реквизиты и нажимал на Ок, он сохраняет значения по выделенным реквизитам не для одного пользователя, с которыми могут работать несколько. А только для себя индивидуально. Т.е. не под пользователя, а под IP.
И это для того, что бы он один раз указал данные для авто-заполнения и сохранил их. А после при создании нового объекта сохраненные значения отображались по выбранным им же реквизитам.
И это что бы каждый раз по каждому новому документу ему не пришлось указывать одно и тоже.
На пример каждый документ имеет реквизиты: "год-месяц". И он их постоянно должен указывать или выбирать по каждому документу. Т.е. кнопка стандарта "ввод на основании" тоже тут не поможет.
Что бы он этого не делал, хочу сделать, как говорил.
Т.е. что бы он всего один раз указал год и месяц отчетного месяца на самой форме, а потом выбрал реквизиты для сохранения в регистр сведений под измерением: "IP".
И вот таким Макаром легко и просто сохранил авто-заполнение. Без лишнего гема.
Именно поэтому эту важную кнопку нужно отобразить на все формы объекта.
Вот что нужно.
Ну, согласитесь это уже должно было быть в 1С в готовом виде. А раз ее нет то можно ли добавить ее и сделать ну не знаю… более удобно.
Буду признателен!


Gigi @ Сегодня, 15:48 * ,
Знаете еще, что самое смешное … раз уж так разоткровенничался по поводу своих мук smile.gif
Я вначале хотел вставить кнопку в контекстные меню каждого реквизита формы.
И озаглавить ее так: «Назначить авто-заполнения по реквизиту»
А после нажатия прописать вопрос Да/Нет: «Назначить текущий реквизит для авто-заполнения указанным значением?»
Но как только так решил, платформа тут же на меня навалила кучу проблем и препятствий.
Во-первых, что бы разместить кнопку в каждой форме это, как вижу, уже проблема. Не говоря уже о том, что бы отобразить ее в контекстное меню каждого реквизита на форме.
Во-вторых, в самой форме нет события активации поля, что бы машина поняла какой реквизит, выбрал пользователь для авто-заполнения. По крайней мере не нашел.
В-третьих, нужная для обозначения выбранного пользователем реквизита, команда: «Элемент.ПутьКДанным» на клиенте не работает, а работает только так:
&НаСервере
Функция ЭлементФормыПутьКДанным(ТекЭлемент)
Возврат ЭтаФорма.Элементы[ТекЭлемент].ПутьКДанным;
КонецФункции

При чем, этот код не понятно как перенести из формы в общий модуль. И тем самым приспособить его работу, для любой открытой пользователем формы объекта.
На клиентском модуле не сработает. А для серверного модуле, как помню «Элементы» не доступны.
Короче никак не получилось таким путем.
Поэтому и был вынужден через только одну кнопку с вызовом списка реквизитов для авто-заполнения.
Ну, вот видите уважаемые какие проблемы возникают, когда что-то охота сделать поудобнее. И какие проблемы, часто наваливает платформа на программиста в таких случаях…
Гуууу… просто устал от этих проблем.
Ладно! Если кто подскажет пути решения буду признателен, а на сегодня думаю пока!

Автор: sava1 07.10.19, 15:52

Цитата(Gigi @ 07.10.19, 16:35) *
Пользователь ее должен нажать в другом одном месте, а нужно что бы он нажимал на самой форме.


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

Автор: Gigi 07.10.19, 16:21

Цитата(sava1 @ 07.10.19, 16:52) *
Уважаемый, Вы хреново осведомлены об Общих Командах. Возьмите типовую бухию и посмотрите, как показываются проводки документа.

Я не бухгалтер и в проводках не очень...
Но по общим командам ... да смотрел я ... правда не в типовую, а в СП. И не только это, но еще и пользовался общими командами.
Цитата
Плохо осведомлен?

Да на то и спрашиваю, что может на самом деле не достает знаний. Ведь не ради самой критики как таковой выражаю мнение. А потому, на самом деле надоели эти проблемы.
И если дело было бы только в этой кнопке... куча и других проблем.
Но ладно... посмотрю smile.gif ... Пошарю в типовой.
И там и узнаю возможности 1С ... великого и могучего smile.gifsmile.gif А не буду наоборот разочарован.
И если будут вопросы опять выйду.
Ладно! Извините за негодование и спасибо!
Пока все!





Автор: twilight_dream 07.10.19, 23:41

Ничего не понял. Но уже 13 лет как в 8.х программирую, ни разу ничего такого не понадобилось.

Автор: Gigi 08.10.19, 9:48

twilight_dream @ Сегодня, 0:41 * ,

Цитата(twilight_dream @ 08.10.19, 0:41) *
Ничего не понял. Но уже 13 лет как в 8.х программирую, ни разу ничего такого не понадобилось.

Ну Вы меня удивляете smile.gif ... тем более 13 лет. Тогда как, сам в 1С всего два годика.
Честно говорю я вообще не только это никак даже объяснить не могу. Но еще и многие двурогие вещи, которые производители 1С не учли.
И единственное как могу это "понять", это вспомнить один случай их практики. Когда вначале разработку сделал коллега для работы. Правда, пользователей было не так уж и много, около 8-ми человек.
Но все таки работая с этой разработкой эти самые служащие каждый раз указывали отчетный месяц по каждому новому документу, которых нужно было оформить не мало за месяц. Около 2000.
И представьте себе, что они это делали smile.gif.\ Не понимая что так сделано для глупцов. И не у одного из них даже в голову не приходило, что можно было сделать иначе. Без ввода одних и тех же данных по всем документам. Лично я это никак не могу объяснить. Как такое может быть вообще. Потому, что для меня это просто нонсенс.... Вводить одни и те же значения .... И это в 21-ом то веке?
Поэтому не понимаю, что тут непонятного.
Короче еще раз объясняю уже на примитивном языке. Когда вы на ПК открываете любой файл ... ворда, эксель, да хоть обычный блокнот. И нажимаете на сохранить то место дислокации любого сохранения это жесткий диск вашего ПК. А при клиент-серверной схеме, как на пример в 1С, место дислокация сохраняемых данных это СЕРВЕР. Который предназначен не для одного а нескольких.
И задача тут в то, как сохранить данные на том же самом сервере, не для самого сервера т.е. общего доступа, а только для конкретного ПК.
Решить данную проблематику смог уже ... Ибо слава богу 1С позволяет решить ее через регистр сведений. Так что, смог решить, путем сохранения данных под конкретный IP за которым сидит пользователь. И о том можно ли было ее решить иначе это может спрошу в другой уже новой теме. Так что, с этим нормально... И все уже ГОТОВО и работает нормально.
Осталось только ОДНО ЕДИНСТВЕННОЕ:
ОТОБРАЗИТЬ ВСЕГО ЛИШЬ ДВЕ КНОПКИ ПО ВСЕМ ФОРМАМ ОБЪЕКТОВ ДОКУМЕНТОВ.
Две простые кнопки с заглавием одной: "Назначить реквизиты авто-заполнения" и "Очистить данные авто-заполнения" второй.
Вот что осталось, все остальное уже сделано.
Поэтому по поводу :
Цитата(sava1 @ 07.10.19, 16:52) *
Уважаемый, Вы хреново осведомлены об Общих Командах.

О Господи ... я вроде специально подробно все объяснил для чего нужно.
Да смотрел я в эти общие команды ... И ничего того, о чем не знал до этого не увидел.
Во-первых там в свойствах: "Командная панель формы.Важное" или "Командная панель формы.Создать на основании", возможно указать только конкретный документ. А указать все документы 1С естественно не позволяет. Это во-первых.
Во-вторых ...Общие команды? smile.gifsmile.gif Ладно нет проблем.. вот пример общей команды . Вернее два примера
С этим вариантом все нормально ...
&
НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
знIP=Config_PC_OS_серв.Получить_IP();
КонецПроцедуры

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

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
знIP=Config_PC_OS_серв.Получить_IP();
// ТекОбъектСсылка=  и вот тут как определить ссылку на объект, для того что бы вызвать процедуру требующую контекста самой формы?
Форма=ПолучитьФорму("Документ.Документ1.ФормаОбъекта", Новый Структура("Ключ",ТекОбъектСсылка));
ОбщийМодуль_PrideSettingsFill_кл.НазначитьАвтозаполнение(знIP,Форма.Объект);
КонецПроцедуры

Со вторым вариантом как сделаете? smile.gif Да никак не правда ли?
И это часть проблем. которые возникают с общей командой.
Так что ну вот видите, опять то же самое ... миссия опять не выполнима. И это в вопросе того, что по всем формам объекта нужно отобразить всего две кнопки. А ведь кнопка на то и кнопка что она должна работать. А иначе для чего она нужна smile.gif
Короче никак нельзя это в 1С. И общие команды тут ничем не помогут.
Поэтому придется каждую форму создавать и туда вставлять данный код.
Поэтому придется каждую форму создавать и туда вставлять данный код.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//=============================    
    ВставитьКнопки();
//=============================
КонецПроцедуры

&НаСервере
Процедура ВставитьКнопки()
//=============================    
    Команда_АвтоЗапЗапись = ЭтаФорма.Команды.Добавить("ДанныеАвтозаполнения_Сохранить"); // //Имя команды
    Команда_АвтоЗапЗапись.Действие = "ДанныеАвтозаполнения_Сохранить"; // Свойство "Действие" содержит имя связанной процедуры-обработчика команды
    Команда_АвтоЗапЗапись.Заголовок = "Назначить реквизиты авто-заполнения";
    Команда_АвтоЗапЗапись.Подсказка = "Назначить реквизиты автозаполнения по указанным значениям формы";
    Команда_АвтоЗапЗапись.Картинка = БиблиотекаКартинок.СоздатьНачальныйОбраз;
    //Команда_АвтоЗапЗапись.Отображение = КартинкаИТекст;
    КнопкаФормы_АвтоЗапЗапись  = Элементы.Добавить("КомандаДанныеАвтозаполнения_Сохранить", Тип("КнопкаФормы"),КоманднаяПанель); // Имя кнопки / Тип, всегда КнопкаФормы /Контейнер для кнопки (Форма, Группа, Командная панель)
    КнопкаФормы_АвтоЗапЗапись.ИмяКоманды = "ДанныеАвтозаполнения_Сохранить";    // Присваиваем команду для созданной кнопке //Связь с командой по имени
    //КнопкаФормы_АвтоЗапЗапись.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
//=============================
    Команда_АвтоЗапОчистка = ЭтаФорма.Команды.Добавить("ДанныеАвтозаполнения_Очистить"); // //Имя команды
    Команда_АвтоЗапОчистка.Действие = "ДанныеАвтозаполнения_Очистить"; // Свойство "Действие" содержит имя связанной процедуры-обработчика команды
    Команда_АвтоЗапОчистка.Заголовок = "Очистить данные авто-заполнения";
    Команда_АвтоЗапОчистка.Подсказка = "Очистить данные авто-заполнения";
    Команда_АвтоЗапОчистка.Картинка = БиблиотекаКартинок.Очистить;
    //Команда_АвтоЗапОчистка.Отображение = КартинкаИТекст;
    КнопкаФормы_АвтоЗапОчистка  = Элементы.Добавить("КомандаДанныеАвтозаполнения_Очистить", Тип("КнопкаФормы"),КоманднаяПанель); // Имя кнопки / Тип, всегда КнопкаФормы /Контейнер для кнопки (Форма, Группа, Командная панель)
    КнопкаФормы_АвтоЗапОчистка.ИмяКоманды = "ДанныеАвтозаполнения_Очистить";    // Присваиваем команду для созданной кнопке //Связь с командой по имени
    //КнопкаФормы_АвтоЗапОчистка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
//=============================
КонецПроцедуры


И это придется делать по каждой форме объекта.
А прописать код один раз для всех форм это как вижу НИКАК ...
Ладно ... Все это для хорошего понимания вопроса
И если будут варианты предложений буду признателен!

Автор: sava1 08.10.19, 11:27

чем не нравится Важное ?

Цитата(Gigi @ 08.10.19, 10:48) *
возможно указать только конкретный документ. А указать все документы 1С естественно не позволяет. Это во-первых.


ТипПараметра = составной тип - и ставите "птисы" на чем хочите.

Цитата(Gigi @ 08.10.19, 10:48) *
пределить ссылку на объект, для того что бы вызвать процедуру требующую контекста самой формы?


в модуле команды -

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

//ПараметрКоманды и есть Ссылка на объект



Цитата(Gigi @ 08.10.19, 10:48) *
вызвать процедуру требующую контекста самой формы


интересно, что Вы в формах храните ?

Автор: Gigi 08.10.19, 11:52

Цитата(sava1 @ 08.10.19, 12:27) *
ТипПараметра = составной тип - и ставите "птисы" на чем хочите.

А разве так можно? smile.gif Ща проверю ...
Цитата(sava1 @ 08.10.19, 12:27) *
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
//ПараметрКоманды и есть Ссылка на объект

Тоже проверю ...

Gigi @ Сегодня, 12:32 * ,
Эврика smile.gif по этой части все нормально... СПАСИБО
//ПараметрКоманды и есть Ссылка на объект

Поэтому уже теперь выглядит так
//Команда общего модуля со свойством: "Командная панель формы.Важное"
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
знIP=Config_PC_OS_серв.Получить_IP();//Функция получения IP
МетаданныеПолноеИмя=Config_МетаДанные.ОбъектМетаданных(ПараметрКоманды,"ПолноеИмяЕд");//Функция опреденения метаданных по ссылке.
Форма=ПолучитьФорму(МетаданныеПолноеИмя+".ФормаОбъекта", Новый Структура("Ключ",ПараметрКоманды)); // Туи все ясно ... объяснять не надо... потому что встроенная функция.
Config_PrideSettingsFill_кл.НазначитьАвтозаполнение(Форма.Объект);//И наконец вызов процедуры по контексту данных самого объекта.
КонецПроцедуры

Отлично! Работает... если не считать одну проблему, которая возникает с общей командой., которую коснусь позже.
Но что касается составного типа ... не "птисы" не "икарусы" че то не проходят.
В типе параметра команды указываю составной, но платформа все равно требует конкретного указания документа. А ведь нужны все на все доки.
А по поводу ...
Цитата(sava1 @ 08.10.19, 12:27) *
интересно, что Вы в формах храните ?

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

Автор: Vofka 08.10.19, 11:54

Цитата(Gigi @ 08.10.19, 12:52) *
А ведь нужны все на все доки.

Отметьте тип ДокументСсылка, вместо ДокументСсылка.МойДокумент

Автор: sava1 08.10.19, 11:58

оффтоп -

Цитата(Gigi @ 08.10.19, 10:48) *
сам в 1С всего два годика.


это типа - знаю, что такое циклы - и для меня достаточно....

по-аналогии - первый раз увидел авто с коробкой-автоматом -- "Как на ней можно ехать - здесь сцепления нет !!!!"

Автор: Gigi 08.10.19, 12:35

Gigi @ Сегодня, 12:52 * ,
https://pro1c.org.ua/redirect.php?https://dropmefiles.com/4UAos
Там всего два справочника: «PrideSettings» и «Справочник1»
Один документ: «документ1», и
один регистр сведений: «IP».
«Справочник1» и «Документ1», созданы для ТЕСТОВОГО авто-заполнения от справочника к документу.
Справочник: «PrideSettings» для сохранения значений авто-заполнения любого типа. Ну, или почти любого.
А регистр сведений: «IP» для сохранения и запроса данных по IP.
Который имеет одно измерение: «IP». И ресурс с типом любая ссылка.
А остальное, думаю сами поймете.
Для теста в режиме 1С предприятие нужно пройти в список «Документ1», и открыть любой созданный документ. А после на форме нажать на кнопку с пояснением: "Назначить реквизиты авто-заполнения по указанным значениям формы". И закрыть.
После чего открыть новый объект по «Документ1» и увидеть те поля которые автоматический заполнились. Вот и все дела. Так же можно поступить и с кнопкой с пояснением: «Очистить данные авто-заполнения». И открыв новый объект понять что все поля на форме уже без значений. И что они пусты.
Проблема только в одном вопросе с общей командой? О чем выше говорил что коснусь позже. Т.е. сейчас. В том, что происходит когда на кнопку «Назначить авто-заполнение» нажимаешь не на форме уже сохраненного объекта, а на форме нового.
И поэтому поводу буду признателен, если уберете эту проблему.
Вот собственно пока все!
Гуу… опять не получилось в двух словах.
Ладно! Всем спасибо!
Но по поводу решения указанной проблемы опять буду признателен!

Автор: sava1 08.10.19, 12:41

Цитата(Gigi @ 08.10.19, 13:35) *
что происходит когда на кнопку «Назначить авто-заполнение» нажимаешь не на форме уже сохраненного объекта, а на форме нового.


а сами как думаете ?
если параметром команды идет ссылка на объект, а ссылка пустая ? по-идее Вы должны разрулить эту ситуевину.

Автор: Gigi 08.10.19, 13:01

Цитата(sava1 @ 08.10.19, 13:41) *
а сами как думаете ?
если параметром команды идет ссылка на объект, а ссылка пустая ? по-идее Вы должны разрулить эту ситуевину.

Ну да ... конечно ... именно поэтому в общей команде думал прописать так ..
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Если ПараметрКоманды.Пустая() Тогда Отказ=Истина; Возврат; КонецЕсли;
МетаданныеПолноеИмя=Config_МетаДанные.ОбъектМетаданных(ПараметрКоманды,"ПолноеИмяЕд");
//Если МетаданныеПолноеИмя="" Тогда Предупреждение("Авто-заполнение назначить не возможно!");Возврат;КонецЕсли;
Форма=ПолучитьФорму(МетаданныеПолноеИмя+".ФормаОбъекта", Новый Структура("Ключ",ПараметрКоманды));
Config_PrideSettingsFill_кл.НазначитьАвтозаполнение(Форма.Объект);
КонецПроцедуры

Но все равно выходит вопрос сохранять или нет...
Короче че то голова уже запарилась .. не соображаю ...
Пожалуйста подскажите как сделать? smile.gif
Буду признателен!

Цитата(sava1 @ 08.10.19, 12:58) *
это типа - знаю, что такое циклы - и для меня достаточно....

)))) smile.gif Нет уважаемый знаю не только цилььь, smile.gif но и кое что многое другое. А иначе в 1С делать было бы нечего!
Ладно ... хорош прикалываться... лучше подскажите как устранить возникающий диалог вопроса при нажатии на кнопку в новом объекте
Буду признателен!

Автор: sava1 08.10.19, 13:27

Копипаст из бухии

Кнопки = Новый СписокЗначений;
        Кнопки.Вставить(0, КодВозвратаДиалога.Да, "Провести");
        Кнопки.Вставить(1, КодВозвратаДиалога.Нет, "Отмена");
        ДополнительныеПараметры = Новый Структура;
        ДополнительныеПараметры.Вставить("ПараметрыВыполненияКоманды", ПараметрыВыполненияКоманды);
        ДополнительныеПараметры.Вставить("ПараметрКоманды", ПараметрКоманды);
        
        Оповещение = Новый ОписаниеОповещения("ВопросПередПросмотромСледуетПровестиЗавершение", ЭтотОбъект, ДополнительныеПараметры);
        ПоказатьВопрос(Оповещение, НСтр("ru='Перед просмотром проводок документ следует провести';uk='Перед переглядом проводок документ слід провести'"), Кнопки,, КодВозвратаДиалога.Да);


и собственно обработка ответа

Если Ответ <> КодВозвратаДиалога.Да Тогда
        Возврат;
    КонецЕсли;
    
    ПараметрКоманды = ДополнительныеПараметры.ПараметрКоманды;
    ПараметрыВыполненияКоманды = ДополнительныеПараметры.ПараметрыВыполненияКоманды;
    
    ДокументПроведен = ПровестиДокумент(ПараметрКоманды);
    Если ДокументПроведен Тогда
        ОповеститьОбИзменении(ПараметрКоманды);
        Оповестить("ВыполненаЗаписьДокумента", Новый Структура("ДокументСсылка", ПараметрКоманды));
    Иначе
        Сообщить(НСтр("ru='Не удалось провести документ';uk='Не вдалося провести документ'"), СтатусСообщения.Важное);
        Возврат;
    КонецЕсли;


а дальше Ваши идеи

Автор: Gigi 08.10.19, 13:48

sava1 @ Сегодня, 14:27 * ,
Огромное Вам спасибо ... блин ... так задоблался с этим авто-заполнением, что уже сил не было на что то еще другое... искать самому..
Спасибо!
Правда думал одной строкой можно просто отказать выполнение, но это что то слишком много для всего лишь отказа выполнять при пустом значении ссылки на объект...
Поэтому не понимаю при чем вопросы Да/Нет. Ведь нужно что бы ничего не всплывало ... даже сам диалог не появлялся. Или вообще спрятать эти кнопки когда новый объект.

Автор: sava1 08.10.19, 14:02

Если не надо вопроса про запись - тупо отказ и все.

Выше вариант, когда надо спросить человека - "Объект то новый. может Вы хочите его записать ?"

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

Автор: Gigi 08.10.19, 14:11

Цитата(sava1 @ 08.10.19, 15:02) *
Если не надо вопроса про запись - тупо отказ и все.

Ну я так и сделал ... ведь вначале общей команды прописал:
Если ПараметрКоманды.Пустая() Тогда Отказ=Истина; Возврат; КонецЕсли;

Но в том и дело, что не помогает ... диалог все равно выходит.

Автор: sava1 08.10.19, 14:39

1. Парамет Пустая или что-то другое. Отладчик есть или скачать ?
2.код в студию

Отказ = Истина не надо - это обычная команда

Автор: Gigi 08.10.19, 15:05

sava1 @ Сегодня, 15:39 * ,
По точке остановки

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды,Отказ)
Если ПараметрКоманды.Пустая() Тогда Отказ=Истина; Возврат; КонецЕсли; // Точка остановки

В таблице: "вычислить выражение":
в отладчике в столбце свойство: "ПараметрКоманды"
В столбце "значение": новый документ т.е. пока не сохраненный ...
Поэтому нужно наверно с условием если это новый документ тогда возврат.
Так что ли?
Короче ладно ... если че то никак ...

Автор: Gigi 09.10.19, 9:56

sava1 @ Вчера, 15:39 * ,
Опять привет ...
Вы знаете ...
Проблема диалогового окна Да/Нет в общей команды не решаема.
Да ... именно так... С этим ничего не сделаешь..
Короче НИКАК!
И дело в том, что в общей команде со свойствами по группе: "Командная панель формы.Важное" или "Командная панель формы.Создать на основании", диалог вопроса появляется на уровне самой платформы. Т.е. и вовсе до того как сработает эта строка.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды,Отказ)
Если ПараметрКоманды.Пустая() Тогда Возврат; КонецЕсли; // Точка остановки
КонецПроцедуры

Ибо это вообще команда глобального типа. И такие глобальные команды обязательно требуют ссылку на объект в качестве параметра команды (ну, или массив ссылок).
В любом случае, перед использованием такой команды объект должен быть записан.
Гууу... а еще меня тут уверяли, что та цель которую ставил достижима. А на деле получается иначе .... приходиться использовать возможности платформы не по назначению.
Видимо эта хваленная команда не предназначена для той поставленной цели. Поэтому это наверно опять недоработки производителя 1С.
Ведь проблему было бы легко решить если в 1С событие: "ПриСозданииНаСервере" существовала бы в глобальном контексте. Тогда никаких проблем не возникало бы. И на самом деле, вот где собака зарыта.
И именно потому, что нет такого события именно поэтому и приходиться извиваться и заниматься разным извратом. Используя возможности платформы не по назначению. И это в хваленной системе 1С.
Ай разработчики, разработчики ... вы и ваши грехи... от которых уже устал.
Короче ничего с этим не сделаешь... И опять и тут миссия НЕ ВЫПОЛНИМА!
Уже устал клянусь... итак тяжело на духу... аж застрелиться охота..
Так что, можете сами подумать как, при создании нового объекта устранить эту проблему по общей команде, ... и как убрать этот диалог вопроса сохранять-Да/Нет, или вовсе спрятать эти кнопки.
А я уже устал.

Автор: daveal 09.10.19, 13:22

Насколько я помню, при вызове из формы объекта в ПараметрыВыполненияКоманды есть источник - это и будет форма объекта. А там уже можно обратится к Объект

Автор: Gigi 09.10.19, 13:54

Цитата(daveal @ 09.10.19, 14:22) *
Насколько я помню, при вызове из формы объекта в ПараметрыВыполненияКоманды есть источник - это и будет форма объекта. А там уже можно обратится к Объект

Да нет ... это не поможет smile.gif
Какая разница в таком виде:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды,Отказ)
        //Сообщить(ПараметрКоманды);Отказ=Истина; //Если ПараметрКоманды.Пустая() Тогда Отказ=Истина; Возврат; КонецЕсли;    
МетаданныеПолноеИмя=Config_МетаДанные.ОбъектМетаданных(ПараметрКоманды,"ПолноеИмяЕд"); // Функция определения метаданных по ссылке
Форма=ПолучитьФорму(МетаданныеПолноеИмя+".ФормаОбъекта", Новый Структура("Ключ",ПараметрКоманды));
Config_PrideSettingsFill_кл.НазначитьАвтозаполнение(Форма.Объект);
КонецПроцедуры

Или в еще более просто и коротком, в том что Вы имеете ввиду. Т.е. в таком:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды,Отказ)
Config_PrideSettingsFill_кл.НазначитьАвтозаполнение(ПараметрыВыполненияКоманды.Источник.Объект);
КонецПроцедуры

Это не решает проблему ... ибо диалоговое окно Да/Нет всплывает на уровне платформы и до вызова этой процедуры.
Если в глобальном смысле было бы событие "ПриСозданииНаСервере", то кнопки при новом объекте можно было бы просто скрыть.
Гуу .... нет настроения уже просто ... не на что ..

Автор: Gigi 10.10.19, 10:34

Gigi @ Вчера, 14:54 * ,
И все таки решил не сдаваться ... без боя smile.gif
Поэтому решил продолжить другой новой темой
https://pro1c.org.ua/index.php?showtopic=54576&st=0#entry156397


Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua