Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

21.03.24

Задачи пользователя - Адаптация типовых решений

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

Расскажу, как это можно сделать, если у вас конфигурация на БСП. Если что не так или можно проще, пишите комментарии - буду рад.

1. В расширение добавляем процедуру общего модуля СозданиеНаОснованииПереопределяемый и добавляем свой документ. 

&Перед("ПриОпределенииОбъектовСКомандамиСозданияНаОсновании")
Процедура Моя_ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты)
	//- Комментарий 28.02.2024
	Объекты.Добавить(Метаданные.Документы.Мой_НовыйДокумент);
	//	
КонецПроцедуры

2. В формах в командную панель добавляем подменю как на картинке (копируем из другого документа).

 

 

3. В модуле менеджера своего документа добавляем в процедуру все документы, которые вводятся на основании. Первым пунктом мы видим как раз добавление своей команды. Команда вызывает Общий модуль с галкой Клиент, а в нем процедуру "СоздатьЗаявкинаРасходДС".

Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт 
	//+ Комментарий 28.02.2024 13:07:11
	// добавляем возможность распределить заявку на конкретную партию номенклатуры
	Если ПравоДоступа("Добавление", Метаданные.Документы.ЗаявкаНаРасходованиеДенежныхСредств)  Тогда 
		КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
		КомандаСоздатьНаОсновании.Менеджер = Метаданные.ОбщиеМодули.МойКлиентскийМодуль.ПолноеИмя();
		КомандаСоздатьНаОсновании.Обработчик = "СоздатьЗаявкиНаРасходДС";   	
		КомандаСоздатьНаОсновании.Представление =  "Заявка на расходование ДС (с распределением)"; 
	КонецЕсли;
	
    //для документов из конфигурации этот код сработает
	Документы.ЗаказПоставщику.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
    // чтобы отработал код для своего документа нужно еще добавить в их модуль менеджера код из п.4
	Документы.МойДокумент.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
			
КонецПроцедуры	   

4. В модуле менеджера своих документов добавляем 

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

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

 

 

Что интересно, в форме документа у меня такой проблемы не было, а вот в форме списка проблема нарисовалась. Решить сумел только отключением галок в конфигураторе.

 

 

5. По умолчанию подменю отображается как картинка, но это неудобно для пользователей - метиться надо. Внизу как включить текст.

 

 

Тестировалось на платформе 8.3.23.2040. На конфигурации ERP.

Добавляем в избранное и читаем другие мои публикации.

Из той же серии:

1. Условное оформление строк и полей Таблицы значений и Дерева значений (готовый код)

2. Создание нового элемента из поля формы с заполнением реквизитов

3. Выполнение любой дополнительной обработки в фоне

4. Расшифровка отчета. Код, который я использую

5. Прикрепляем файл к новому документу (БСП). Простенькая шпаргалка.

6. Регламентное задание с настройками без нового регистра.

7. Форма выбора с отбором. Пять вариантов настройки отбора

ввод на основании новая кнопка команда два подменю создать на основании

См. также

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    6133    15    5    

24

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    4256    15    1    

33

Печатные формы Адаптация типовых решений Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с установленными именами. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3000 руб.

07.02.2023    6803    73    10    

30

БСП (Библиотека стандартных подсистем) Программист Платные (руб)

Синтакс-помощник БСП - cправочник по библиотеке стандартных подсистем. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП.

1800 руб.

21.11.2024    523    1    0    

3

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    4221    John_d    10    

52

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    5536    PROSTO-1C    12    

52
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dhurricane 02.03.24 10:08 Сейчас в теме
Продолжаете писать полную версию платформы и не указывать версию конфигурации, даже редакцию. :)

Применяемый в ERP механизм создания на основании использует БСП-шную подсистему Подключаемые команды. Он работает независимо от того, указали ли Вы в конфигураторе в карточке документа настройки ввода на основании или нет. Поэтому Вам проще было бы помимо встраивания подключаемых команд не дорабатывать форму списка документов, ее командную панель, а убрать вовсе платформенный ввод на основании для документа.
адуырщдв; EvgeniyOlxovskiy; Cmapnep; +3 Ответить
2. dimanich70 873 02.03.24 14:13 Сейчас в теме
(1) Номер релиза ЕРП? Сегодня он один завтра будет другой. У кого-то вообще не ЕРП, а тема окажется полезной и поможет сберечь кучу времени. Думаю не критично это.
Tatyana_012345; +1 Ответить
3. dhurricane 02.03.24 15:33 Сейчас в теме
(2) Я Вам в прошлый раз отвечал на это, но видимо, но убедил. :-)

Та проблема, с которой Вы столкнулись, происходит из-за отказа в Библиотеки стандартных подсистем от платформенного механизма ввода на основании в пользу генерации кнопок программно на базе подсистемы Подключаемых команд. Из-за этого то Вы и видите два подменю: один от БСП, другой от платформы. Соответственно, в конфигурациях на базе БСП, особенно при доработке типовых документов, следует пользоваться именно БСП-шным механизмом ввода на основании.

Сегодня БСП работает так, завтра по-другому, и Ваши рекомендации, какой код куда вставлять станут неактуальными. От того то и считается хорошим тоном указывать версию библиотеки, от которой реально и зависит реализация Вашей инструкции. И Вы правильно сказали, что это может быть и не ERP, а какая-нибудь другая конфигурация. Реализация зависит от версии БСП, а не от версии прикладной конфигурации. Но вот по версии конфигурации можно хотя бы понять, какая версия БСП используется. Поэтому информация о версии конфигурации лишней не будет.

А вот информация о версии платформы, тем более с точностью до сборки, как раз бесполезна. От платформы описанное Вами поведение с двумя менюшками никак не зависит совершенно.
user1804494; user1894438; адуырщдв; abasovit; user1107771; ixijixi; itmind; Sam13; EvgeniyOlxovskiy; +9 Ответить
4. dimanich70 873 02.03.24 20:43 Сейчас в теме
5. Sam13 347 04.03.24 10:01 Сейчас в теме
(3) Он был строг, но справедлив :)
6. dimanich70 873 04.03.24 10:07 Сейчас в теме
7. rmIvanT 71 11.04.24 18:49 Сейчас в теме
Статья хорошая, ещё бы пример ОбщиеМодули.МойКлиентскийМодуль.СоздатьЗаявкиНаРасходДС
этой процедуры, для полной картинки
8. rmIvanT 71 11.04.24 19:12 Сейчас в теме
нашёл:
Процедура СоздатьОбъектЭксплуатации(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт

    СтруктураДанных	= Новый Структура("Основание",			ПараметрКоманды);
    ПараметрыФормы 	= Новый Структура("ЗначенияЗаполнения", СтруктураДанных);
    
    ОткрытьФорму(	"Справочник.ОбъектыЭксплуатации.ФормаОбъекта", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник);

КонецПроцедуры
Показать


А потом открываем модуль объекта, находим процедуру «ОбработкаЗаполнения» и добавляем ее к нам в расширение с типом вызова «ВызватьПосле»
10. sidelev.s 03.12.24 17:55 Сейчас в теме
Если ПравоДоступа("Добавление", Метаданные.Документы.ЗаявкаНаРасходованиеДенежныхСредств)  Тогда 
		КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
		КомандаСоздатьНаОсновании.Менеджер = Метаданные.ОбщиеМодули.МойКлиентскийМодуль.ПолноеИмя();
		КомандаСоздатьНаОсновании.Обработчик = "СоздатьЗаявкиНаРасходДС";   	
		КомандаСоздатьНаОсновании.Представление =  "Заявка на расходование ДС (с распределением)"; 
	КонецЕсли;


Вот тут разве не ошибка?
КомандаСоздатьНаОсновании.Обработчик = "СоздатьЗаявкиНаРасходДС";

Должно же быть
КомандаСоздатьНаОсновании.Обработчик = "МойКлиентскийМодуль.СоздатьЗаявкиНаРасходДС";

Иначе Обработчик вызова будет выполняться на сервере
9. psa247 21 30.09.24 11:59 Сейчас в теме
Оставьте свое сообщение