b m

51
Рейтинг

mbm



  •   Регистрация: 08.09.2011 (12 лет назад)

  •   Был(а) на сайте: 01.07.2021

Подписчики 2

Группы

Профессиональный разработчик

Рейтинг 51

Трюки 1С 8 – Передача формы документа в форму выбора

Статья Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Windows Абонемент ($m) Архив с данными Механизмы платформы 1С

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

1 стартмани

30.08.2013    15331    5    mbm    14       

25

Комментарии

DevТрюки 1С 8 – Управление обычными формами из общего модуля#19 26.12.14 12:13
(15) alexqc, к сожалению, второе замечание неверно. Последовательность команд:

Действие = Новый Действие("АК_УниверсальныйОбработчик");
Элемент.УстановитьДействие(ИмяСобытия, Действие);

где процедура обработчика определена в форме как:

Процедура АК_УниверсальныйОбработчик(П1 = Неопределено, П2 = Неопределено, П3 = Неопределено, П4 = Неопределено)

приводит к ошибке:

Ошибка при вызове метода контекста (УстановитьДействие)
Элемент.УстановитьДействие(ИмяСобытия, Действие);
по причине:
Недопустимое значение параметра (параметр номер '2') (Процедура, указанная в качестве обработчика события, имеет неверное количество параметров)

Так что метод, описанный в статье, это максимально возможное продвижение для данной версии платформы (1С:Предприятие 8.2 (8.2.19.106)).
ОбменУдобная отладка внешних печатных форм#13 25.12.14 18:03
(2) Re:аниматор, можно проще: Процедура КнопкаВыполнитьНажатие(Кнопка) Печать().Показать() КонецПроцедуры
DevТрюки 1С 8 – Управление обычными формами из общего модуля#18 08.12.14 13:25
(16) alexqc, тоже только слышал, к сожалению. Пока нужды наших клиентов удовлетворяются обычными формами с использованием описанного механизма и нет большой необходимости пользоваться чем-то еще. "Если все работает и всех все удовлетворяет, ничего не меняем"
DevТрюки 1С 8 – Управление обычными формами из общего модуля#17 08.12.14 13:17
(15) alexqc, скорее всего в справке нужно поменять И на ИЛИ, то есть процедура должна быть экспортируемой ИЛИ находиться в модуле формы. Со вторым замечанием интересно будет повозиться, поскольку оно действительно, похоже, позволяет сильно упростить структуру универсальной вставки в код модуля формы.
DevПростая отладка внешних обработок#27 31.10.13 0:03
Добавлю свои пять копеек ...

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

//СсылкаНаОбъект = Документы.РеализацияТоваровУслуг.ПолучитьФормуВыбора().ОткрытьМодально();
//Печать().Показать();

Подчеркнутое - поменяйте на нужное.
Если нужно отладить - достаточно раскомментарить эти строки и запустить как обычную обработку.
DevТрюки 1С 8 – Управление обычными формами из общего модуля#13 10.09.13 8:03
(11) Abadonna, думаю, если бы это было легко осуществимо, то вряд ли бы не внедрили.
По себе знаю, иногда из-за какой-то, казалось бы, мелочи, не предусмотренной в начале разработки, приходится переписывать всю программу, которая не сравнима по сложности и человеко-часам, вложенным в платформу 1С.
С другой стороны, возможно, обычные формы доживают свой век и нет смысла вкладываться в дальнейшую разработку того, с чем и так работают.
DevТрюки 1С 8 – Управление обычными формами из общего модуля#10 09.09.13 17:54
(9) Aletar, так опубликуй - идея пока не запатентована :)
При обдумывании и дальнейшем обсуждении статьи могут прийти новые мысли.
У меня так произошло в предыдущей статье - смотри там мои комменты 12 и 13.
А ведь пользуюсь этими идеями не первый год - видимо, не было стимула для их
дальнейшей разработки, пока не решил вынести на публику.
DevТрюки 1С 8 – Передача формы документа в форму выбора#13 08.09.13 22:32
А теперь универсальнее - с сохранением текста подсказки:

Процедура ТоварыСерияНоменклатурыНачалоВыбора(Элемент, СтандартнаяОбработка)
Элемент.Подсказка = Формат(СтрДлина(Элемент.Подсказка), "ЧЦ=5; ЧН=00000; ЧВН=; ЧГ=0") +
Элемент.Подсказка + ЗначениеВСтрокуВнутр(Ссылка);
КонецПроцедуры

В форме выбора:

ТекстПодсказки = ЭлементУправления.Подсказка;
Если СтрДлина(ТекстПодсказки) >= 5 Тогда
ДлинаПодсказки = Число(Лев(ТекстПодсказки, 5));
ДокСсылка = ЗначениеИзСтрокиВнутр(Сред(ТекстПодсказки, ДлинаПодсказки + 6));
Склад = ДокСсылка.ПолучитьФорму().Склад;
ЭлементУправления.Подсказка = Сред(ТекстПодсказки, 6, ДлинаПодсказки);
КонецЕсли;
DevТрюки 1С 8 – Передача формы документа в форму выбора#12 08.09.13 20:06
(11) awk, в данном конкретном случае Ваш подход абсолютно верен. Но статья посвящена более общему вопросу - как через элемент управления получить содержащую его форму. Я привел частичное решение в случае, когда элемент управления является полем ввода. Частичное - потому что передаются только реквизиты, а не сама форма.
То что решение использует поле подсказки не является слабым местом, поскольку ее текст можно запоминать перед входом в форму выбора, а потом восстанавливать, а в самой форме выбора оно не используется.

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

Процедура ТоварыСерияНоменклатурыНачалоВыбора(Элемент, СтандартнаяОбработка)
Элемент.Подсказка = ЗначениеВСтрокуВнутр(Ссылка);
КонецПроцедуры

а в форме выбора:

ДокСсылка = ЗначениеИзСтрокиВнутр(ЭтаФорма.ВладелецФормы.Подсказка);
ФормаДокумента = ДокСсылка.ПолучитьФорму(); // в форме Склад уже может отличаться от того, что в документе
Склад = ФормаДокумента.Склад;

Ура, спасибо Вам за реплику!
DevТрюки 1С 8 – Передача формы документа в форму выбора#10 07.09.13 2:44
(9) awk, почему нельзя? :) Только в моем случае штатная связь остается задействованной и остальной код уже локализован в модуле формы выбора (там еще заодно и остатки с резервами по данной серии показываются для удобства выбора), а в Вашем варианте придется его вынести куда-нибудь в процедуру, ведь выбирать серию приходится во многих документах. Как говорится, на вкус и цвет ...