Ввод на основании любого объекта



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

Немного поискав в истории не нашел ничего похожего. Возможно плохо искал.

Это только идея. Ее можно развивать дальше. но я ограничился простым механизмом.

Для управляемых форм можно придумать более изящное решение.

Проблема:

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

Описание идеи:

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

Что решил сделать:

1 Я решил добавить свой справочник «Дополнительный ввод на основании».

2 Для него указываю на основании каких объектов он должен создаваться

3 Добавляю предопределенные значения в справочник. Они означают конкретный вид Ввода на основании

4 Для справочника добавил табличную часть «Объекты». В ней указывается перечень видов объекта для которых используется заполнение. Используется как ограничение.

 

Если НЕ Предопределенный Тогда

        Отказ = Истина;

        Возврат;

КонецЕсли;

 

5 В обработке заполнения написал:

5.1 Выборку заполнения для конкретного объекта

 

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ РАЗЛИЧНЫЕ

| AVA_ДополнительныйВводНаОснованииОбъекты.Ссылка,

| AVA_ДополнительныйВводНаОснованииОбъекты.Ссылка.Наименование КАК Наименование

|ИЗ

| Справочник.AVA_ДополнительныйВводНаОсновании.Объекты КАК AVA_ДополнительныйВводНаОснованииОбъекты

|ГДЕ

| ТИПЗНАЧЕНИЯ(AVA_ДополнительныйВводНаОснованииОбъекты.ПустаяСсылкаОбъекта) = ТИПЗНАЧЕНИЯ(&Объект)";

Запрос.УстановитьПараметр("Объект", ДанныеЗаполнения);

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда

Сообщить("Для данного вида объекта нет дополнительного ввода на основании", СтатусСообщения.Внимание);

Возврат;

КонецЕсли;

 

 5.2 Открыть форму выбора вида ввода на основании

 

Выборка = Результат.Выбрать();

спВвода = Новый СписокЗначений;

Пока Выборка.Следующий() Цикл

             спВвода.Добавить(Выборка.Ссылка, Выборка.Наименование);

КонецЦикла;

ВыборПунктаВводНаОсновании = спВвода.ВыбратьЭлемент("Что хотите ввести на основании?");

Если ВыборПунктаВводНаОсновании <> Неопределено Тогда

           ОсуществитьДополнительныйВводНаОсновании(ДанныеЗаполнения, ВыборПунктаВводНаОсновании.Значение);

КонецЕсли;

 

5.3 Ну и процедура обработки выбранного вида ввода на основании


Процедура ОсуществитьДополнительныйВводНаОсновании(ДанныеЗаполнения, ВидЗаполненияСсылка)


предСсылки = Справочники.AVA_ДополнительныйВводНаОсновании;

Если ВидЗаполненияСсылка = предСсылки.АС_ВременноЗамещающие Тогда

        ВременноЗамещающие_ВводНаОсновании(ДанныеЗаполнения);

КонецЕсли;


КонецПроцедуры


Процедура ВременноЗамещающие_ВводНаОсновании(ДанныеЗаполнения)


//Документ Кадровое пермещение

//Документ Прием на работу в организацию

//Документ Увольнение из организации

Форма = РегистрыСведений.АС_ВременноЗамещающие.ПолучитьФорму("ФормаГрупповогоДобавления");

Форма.Основание = ДанныеЗаполнения; Форма.Открыть();


КонецПроцедуры


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

— Чтение

— Добавление

а то не хватит прав


Тут возможные ошибки, к примеру: если заполнение будет с сервера, то ни о каком открытии формы не может быть речи.

Возможны и другие ошибки. Это только идея. Возможно, кому-нибудь пригодится.

 


14 Comments

  1. AlexO

    (0)

    Работают на обычных формах.

    Не знаю никого, кто бы работал в УПП на управялемых формах.

    Только тру-1сники на форумах 🙂

    Reply
  2. AlexO

    Или я не понял, или:

    вы сделали только ОБОЩАЮЩУЮ кнопку, которую также будете переносить из релиза в релиз вручную. А по кнопке вполне можно было вызывать обработку (внешнюю причем).

    И там — форму ввода на основании. А там — список, чего надо ввести.

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

    Так зачем тут нужен еще один справочник? 🙂

    Reply
  3. AlexO
    На основании документов необходимо вводить запись в регистре. Ну франч соответственно сделал кнопку в меню Ввод на основании.

    Проведение по регистру какое отношение имеет к вводу на основании? Что на основании чего вводится?

    Платформа сама заполняет этот пункт меню из объектов, в которых указано что они вводятся на основании

    Какой пункт и где заполняет платформа? Судя по цитате выше — у вас вводится на «основании документов — запись регистра».

    Reply
  4. BACbKA666

    (2) AlexO,

    вы сделали только ОБОЩАЮЩУЮ кнопку, которую также будете переносить из релиза в релиз вручную. А по кнопке вполне можно было вызывать обработку (внешнюю причем).

    И там — форму ввода на основании. А там — список, чего надо ввести.

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

    Так зачем тут нужен еще один справочник? 🙂

    Кнопка будет добавляться платформой, соответственно нет необходимости изменять типовую форму.

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

    А справочник нужен, чтобы появилась кнопка в меню «На основании»

    Проведение по регистру какое отношение имеет к вводу на основании? Что на основании чего вводится?

    Это приведен как пример. В конфигураторе для регистра сведений нельзя указать на основании какого документа может происходить заполнение записей.

    Какой пункт и где заполняет платформа? Судя по цитате выше — у вас вводится на «основании документов — запись регистра».

    Стандартный пункт меню на форме «Ввести на основании»

    Возможно написал не очень понятно. С изложением мыслей беда. 🙂

    Reply
  5. Антон Ширяев

    (0) Идея отличная.

    Думаю объединить в одном служебном справочнике с http://infostart.ru/public/155418/.

    Главное при обновлении у каждого объекта не появляются лишние различия.

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

    Reply
  6. AlexO

    Обломитесь, ребята 🙂

    Как и для аналогичных «плясок» с документами НаОсновании — если вы впихнете ВО ВСЕ ДОКУМЕНТЫ свой справочник как «основание для этого документа», то вторым концом «палки» будет то, что она «стукнет» по каждому вписанному доку и впишется ему в поле «на основании» в свойствах, что вызовет цепную реакцию и обновление свойств и всякой связанных структур у доков.

    Reply
  7. AlexO

    (4)

    Возможно написал не очень понятно. С изложением мыслей беда.

    Ну да 🙂

    Я теперь понял смысл работы — но, увы. 1С не обманешь 🙂

    Невозможно использовать платформенное «вписывание на основании» только с одного конца (в данном случае — с конца справочника).

    (платформенное — это под «синей стрелочкой» и в контекстном меню в списке).

    Работать-то работает, но так, как я описал выше — шило на мыло: здесь получаем, но и все доки переобновляются, т.е. нет отвязки от обновления. А потому — нет и смысла: обновлять так или эдак.

    Или я в форме впишу НаОсновании, или вот таким «типовым» образом.

    Reply
  8. AlexO

    А что такое вообще «Ввод н а основании» у справочников — я до сих не понимаю 🙂

    Оно вообще зачем там нужно? Да еще и конструктор есть…опупеть… на основании дока заполняешь реквизиты элемента справочника..

    Reply
  9. AlexO

    Сделал сравнение с конфой поставщика. Отличий не выявил по основанию.

    А вот почему не показывает сие отличие сравнение с конфой поставщика — это вопрос к 1С.

    ЗДЕСЬ не показывает.

    А при установке обновления — покажет. Здесь же свойства дока типового изменяются («второй конец палки» 🙂 ).

    Reply
  10. AlexO

    Ну и, как я и говорил всегда, Справочник — это недоделанная связка РегистрСведений+Документ.

    Видимо, оттуда и «перехала» вкладка ВводНаОсновании 🙂

    Reply
  11. BACbKA666

    AlexO, Именно я использовал данную возможность, чтобы избежать сравнение форм на отличие. Так как при обновление типовой конфигурации с изменениями львиная доля времени уходит на сравнение форм. А данная возможность позволяет вынести некоторые кнопки за рамки типовой формы.

    Reply
  12. AlexO

    (11)

    чтобы избежать сравнение форм на отличие

    Видимо, у вас ну огромное количество уникальных нетиповых вводов на основании 🙂

    Reply
  13. dyak84

    Интересная обработка. как раз то что искал. Как появятся день обязательно скачаю. автору спасибо так держать.

    Reply
  14. gerasimov

    Спасибо за идею, пригодилось

    Reply

Leave a Comment

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