Как передать текущую строку табличной части управляемой формы с клиента на сервер
Перейти к содержимому

Как передать текущую строку табличной части управляемой формы с клиента на сервер

Изменить текущую строку на Управляемой форме

Часто после каких либо манипуляций на форме, или же на сервере, требуется передать измененное состояние на клиент. В одной из предыдущих своих статей я уже писал, про то как можно воспользовавшись методами РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы() изменять данные на сервере и передавать измененное состояние на клиент. Случаются также ситуации, когда нужно изменить данные текущей строки на форме. Табличная часть на форме имеет тип ДанныеФормыКоллекция, соответственно вся задача сводится, к тому, что бы получить по уникальному идентификатору, ЭлементДанныеФормыКоллеция и изменить непосредственно его значение на клиенте. Для того чтоб найти нужную строку нужно к искомой таблице применить метод НайтиСтроки(). Далее у найденной строки получаем Идентификатор. И при помощи идентификатора непосредственно получаем ТекущуюСтроку. Код довольно таки простой. Оставлю его здесь, для понимания. Я использовал изменение количества товара на +1, если такой товар уже есть в табличной части документа.

&Вместо("ВнешнееСобытие") &НаКлиенте Процедура Расш1_ВнешнееСобытие(Источник, Событие, Данные) Если ВводДоступен() Тогда Если Событие = "Штрихкод" И ЗначениеЗаполнено(Данные) Тогда СтруктураШК = ОбработатьДанныеПоШК(Данные); Если СтруктураШК.Свойство("ШтрихкодНеНайден") Тогда Сообщить("Штрихкод не присвоен ни одному товару"); КонецЕсли; Если СтруктураШК.Свойство("НетНаОстатке") Тогда Сообщить("Товара нет на остатке либо ему не назначена цена"); КонецЕсли; Если СтруктураШК.Свойство("ТаблицаТоваров") Тогда ОткрытьФорму("Документ.ПеремещениеТоваров.Форма.Расш1_ФормаВыбораПартии", СтруктураШК, ЭтаФорма); КонецЕсли; Если СтруктураШК.Свойство("ТолькоОдинТовар") Тогда ВыбранноеЗначение = СтруктураШК.ТолькоОдинТовар[0]; //Сначала пробуем найти строку в таблице товаров ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Номенклатура", ВыбранноеЗначение[0]); ПараметрыОтбора.Вставить("Характеристика", ВыбранноеЗначение[1]); НайденнаяСтрока = Объект.Товары.НайтиСтроки(ПараметрыОтбора); Если ЗначениеЗаполнено(НайденнаяСтрока) Тогда Идент = НайденнаяСтрока[0].ПолучитьИдентификатор(); СтрокаТЧ = Объект.Товары.НайтиПоИдентификатору(Идент); СтрокаТЧ.Количество = СтрокаТЧ.Количество + 1; СтрокаТЧ.КоличествоУпаковок = СтрокаТЧ.КоличествоУпаковок + 1; //Устанавливаем фокус на текущей строке Элементы.Товары.ТекущаяСтрока = Идент; ТекущийЭлемент = Элементы.ТоварыКоличествоУпаковок; Иначе стр = Объект.Товары.Добавить(); стр.Номенклатура = ВыбранноеЗначение[0]; стр.Характеристика = ВыбранноеЗначение[1]; стр.Упаковка = ПредопределенноеЗначение("Справочник.УпаковкиНоменклатуры.ПустаяСсылка"); стр.Цена = ВыбранноеЗначение[3]; Если ВыбранноеЗначение[3] > 0 Тогда стр.ЦенаРозничная = РассчитатьРозничнуюЦену(ВыбранноеЗначение[3]); КонецЕсли; стр.Количество = 1; стр.КоличествоУпаковок = 1; стр.Сумма = Стр.Цена; Идент = стр.ПолучитьИдентификатор(); ЗаполнитьРозничныеЦеныДокумента(); //Устанавливаем фокус на текущей строке Элементы.Товары.ТекущаяСтрока = Идент; ТекущийЭлемент = Элементы.ТоварыКоличествоУпаковок; КонецЕсли; КонецЕсли; Иначе Сообщить("Неверные данные по штрихкоду"); КонецЕсли; //ПодключаемоеОборудованиеРТКлиент.ВнешнееСобытиеОборудования(ЭтотОбъект, Источник, Событие, Данные); КонецЕсли; КонецПроцедуры

Текущие данные на сервере

Прошу помощи))) Мучаюсь 4 час. Я новичок в 1С. Имеется Документ посещение в нем табличная часть дополнительные покупки и там реквизиты Товар(ссылка на Справочник Товары), СтоимостьТовара, Количество Сумма. Есть справочник Товары с реквизитом Стоимость.
Хочется когда выбираешь Товар автоматически подставляется стоимость из справочника к тому или иному товару. А после выставления количества товара в сумме автоматически подсчитывалась итоговая стоимость. А потом хочу чтобы к итого ещё эта сумма прибавлялась, но это я наверное буду мучатся сама.

11. user1789970 26.05.22 21:09 Сейчас в теме
Вот некоторые скрины
Прикрепленные файлы:
12. Sashares 34 26.05.22 22:00 Сейчас в теме

(11)Найдите книгу М.Г. Радченко, Е.Ю. Хрусталева

1С:Предприятие 8.3. Практическое пособие разработчика
Примеры и типовые приемы

Изучайте по ней, там все есть.

13. user1789970 27.05.22 00:08 Сейчас в теме
1С:Предприятие 8.3. Практическое пособие разработчика

Спасибо за совет, но думаю если бы я не сидела 4 часа, то не написала бы) если скинете ссылочку на учебник буду признательна

Управляемые формы 1С¶

Для этого следует воспользоваться методом Удалить() того объекта, который является источником данных для табличной части документа. Например, для документа «ПриходнаяНакладная» с табличной частью «Товары» это будет объект ДокументТабличнаяЧасть.ПриходнаяНакладная.Товары. В модуле формы этого документа удаление текущей строки табличной части будет выглядеть следующим образом:

ДокументОбъект.Товары.Удалить(ЭлементыФормы.Товары.ТекущаяСтрока);

В качестве параметра метода Удалить() передается текущая строка табличной части.

Обратите внимание, что для удаления (как и для добавления) строк табличной части документа следует использовать методы табличной части (ДокументОбъект.Товары), а не методы табличного поля, отображающего эту табличную часть (ЭлементыФормы.Товары).
http://its.1c.ru/db/metod8dev/content/2481/hdoc

2. Замена «Сообщить()»¶

ПоказатьОповещениеПользователя( НСтр("ru = 'Изменения не зарегистрированы.'") . БиблиотекаКартинок.Информация32);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю( "Ошибка получения курса", Объект.Ссылка, "СТП_КурсВалютыЗаказа", // Поле "Объект", );
Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "В строке 11 табличной части ""Номенклатура"" не хватает "; Сообщение.Поле = "Номенклатура"; // Привязка объекта к реквизиту формы произойдет за счет // установленного выше по стеку соответствия методом // УстановитьСоответствиеОбъектаИРеквизитаФормы Сообщение.УстановитьДанные(ОбъектДанных); // Теперь у сообщения заполнено поле ПутьКДанным (установлено имя реквизита формы, до этого была пустая строка), // и свойство КлючДанных (установлена ссылка на документ, до этого было Неопределено) // Сообщение выводится пользователю Сообщение.Сообщить();

3. Открытие управляемой формы не записанного документа в 1С 8.2/8.3¶

&НаКлиенте Процедура КомандаОткрытьФорму(Команда) Форма = ПолучитьФорму("Справочник.Пользователи.ФормаОбъекта"); ДанныеФормы = Форма.Объект; ЗаполнитьНаСервере(ДанныеФормы); КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); Форма.Открыть(); КонецПроцедуры &НаСервереБезКонтекста Процедура ЗаполнитьНаСервере(НовыйОбъект); НовыйОбъект.Наименование = "Новый элемент"; Для К=1 По 100 Цикл НоваяСтрока = НовыйОбъект.ТЧ.Добавить(); НоваяСтрока.РеквизитТЧ = К; КонецЦикла; КонецПроцедуры

5. Открытие управляемой формы объекта в 1С 8.2/8.3¶

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

5. Передача параметров в управляемых формах¶

Параметры передаются в виде структуры:

Параметры = Новый Структура("ТекущееЗначение",ПоследнийЭлемент); ФормаВыбора = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",Параметры); НайденыйЭлемент = ФормаВыбора.ОткрытьМодально();

Также у управляемой формы появились «расширения формы» (объект, справочник, документ, отчет). В зависимости от типа объекта определяется состав доступных параметров. Например, если в форме выбора справочника нужно позиционироваться на определенном элементе, то используется параметр «ТекущееЗначение». Большим плюсом является, что в самой форме не требуется писать обработчиков для предопределенных параметров, сокращает количество кода.

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

Для передачи специфического параметра манипуляций требуется сделать немного больше:

1. Определить в управляемой форме параметр.

В обработчике ПриСозданииНаСервере определить обработку данного параметра (обращение к переданным параметрам через свойство «Параметры», имеющее тип ДанныеФормыСтруктура)

1. Описать получение формы и передать значение нового параметра в параметрах функции ПолучитьФорму.

Таким образом код будет иметь вид:

В месте получения формы

Параметры = Новый Структура("НовыйПараметр",ПоследнийЭлемент); ФормаВыбора = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",Параметры);

В модуле управляемой формы

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

4. Отбор в таблице значений, расположенной на форме¶

Например, отбор строк в подчиненной таблице при смене «Владельца» в основной таблице

&НаКлиенте Процедура ИсходнаяНоменклатураПриАктивизацииСтроки(Элемент) Структура = Новый Структура("ИсходнаяНоменклатура", Элементы["ИсходнаяНоменклатура"].ТекущиеДанные.Номенклатура); НовыйОтбор = Новый ФиксированнаяСтруктура(Структура); Элементы["НоваяНоменклатура"].ОтборСтрок=НовыйОтбор; КонецПроцедуры

Вопрос в управляемых формах¶

Замена функции «Вопрос(. )»

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

Подключение внешней компоненты из макета внешней обработки¶

Стандартное подключение макета из встроенной обработки:

ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ВстроеннаяОбработка.Макет.КомпонентаПечатиШтрихкодовLinux64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);

Подключение внешней компоненты из макета внешней обработки

ПодключениеВыполнено = ПодключитьВнешнююКомпоненту(ПоместитьВоВременноеХранилище(ПолучитьМакет("КомпонентаПечатиШтрихкодовLinux64")), "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);

Методы ПоместитьВоВременноеХранилище и ПолучитьИзВременногоХранилища¶

Временное хранилище – секретное оружие

При работе с управляемыми формами быстро становится ясно, что ограничения клиент-серверного взаимодействия очень сильно сужают возможности разработчика. Поэтому, платформа 1С предоставляет хитрый секретный ход под названием «ВременноеХранилище». Эта сущность позволяет сохранить на сервере некоторое состояние между двумя серверными вызовами. Я слышу возгласы: «А кто сказал, что состояние нельзя хранить!» Справедливое замечание, состояние хранить все-таки можно, но недолго.

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

Для работы со временным хранилищем используются методы ПоместитьВоВременноеХранилище и ПолучитьИзВременногоХранилища.

С методом «Получить» все просто, он по заданному адресу возвращает значение, которое лежит в хранилище.

С методом «Поместить» несколько сложнее. Дело в том, что помещать можно в 2 разных хранилища – простое и хранилище формы. Хранилище формы живет на сервере столько, сколько живет сама форма. Простое хранилище живет ровно 2 серверных вызова. В синтакс-помощнике об этом написано целых несколько умных строк. Я никогда не понимал, что они означают. Опытным путем было установлено, что срок жизни – 2 серверных вызова.

Первый – мы помещаем что-то в хранилище и возвращаем адрес на клиента. 
Клиент делает второй вызов и по этому адресу может получить данные.
В третьем вызове по этому адресу уже ничего не будет. Платформа очистит хранилище

С хранилищем формы ситуация более интересная. Если вторым параметром метода «ПоместитьВоВременноеХранилище» передать идентификатор формы (ЭтаФорма.УникальныйИдентификатор), то данные в хранилище будут привязаны к сроку жизни формы и не будут удалятся ни в первых, ни во вторых, ни во всех прочих вызовах сервера.

Таким образом, временное хранилище, это еще одно место, в котором (помимо реквизитов формы) можно сохранять состояние на сервере. Причем, в хранилище можно хранить даже данные, которые на клиенте недоступны, а стало быть, в реквизитах формы их разместить нельзя.

Динамический список. Обработка выделенных строк¶

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

Динамический список. Отбор в динамическом списке при открытии.¶

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

Выделение строк в таблице на форме¶

Для каждого стр из ФормаДокумента.Объект.ОбеспечениеМатериаламиИРаботами Цикл ФормаДокумента.Элементы.ОбеспечениеМатериаламиИРаботами.ВыделенныеСтроки.Добавить(стр.Получитьидентификатор()); КонецЦикла;

Как при открытии формы определить, что создается новый элемент?¶

Проверять можно в обработчике события ОбработкаЗаполнения. Это событие возникает только при создании новых объектов.

Или в ПриСозданииНаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Ключ.Пустая() Тогда Сообщить("Создается новый объект"); КонецЕсли; КонецПроцедуры

Как выполнить экспортируемую процедуру объекта, находясь в его форме¶

&НаКлиенте Процедура ПересчитатьЦеныДокумента(Команда) ПересчитатьЦеныНаСервере(); КонецПроцедуры &НаСервере Процедура ПересчитатьЦеныНаСервере() ОбъектДокумента = РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.Накладная")); ОбъектДокумента.НачислитьСкидку(10); ЗначениеВРеквизитФормы(ОбъектДокумента, "Объект"); КонецПроцедуры

Переход на следующую строку в той же колонке при нажатии Enter¶

&НаКлиенте Процедура ОсновныеЯчейкиЯчейкаПриИзменении(Элемент) ТекущиеДанные = Элементы.ОсновныеЯчейки.ТекущиеДанные; ОбработатьНазначениеОсновнойЯчейки(ТекущиеДанные.Номенклатура, ТекущиеДанные.Склад, ТекущиеДанные.Ячейка, Ложь); Стр=Элементы.ОсновныеЯчейки.ТекущиеДанные; Если Стр<>Неопределено Тогда Если Элементы.ОсновныеЯчейки.ТекущийЭлемент.Имя="ОсновныеЯчейкиЯчейка" Тогда НС=Объект.ОсновныеЯчейки.НайтиСтроки(Новый Структура("НомерСтроки",Стр.НомерСтроки+1)); Если НС.Количество()>0 Тогда Элементы.ОсновныеЯчейки.ТекущаяСтрока=НС[0].ПолучитьИдентификатор(); Элементы.ОсновныеЯчейки.ТекущийЭлемент =Элементы.ОсновныеЯчейки.ПодчиненныеЭлементы.ОсновныеЯчейкиЯчейка; ПодключитьОбработчикОжидания("ИзменитьСтрокуОжидание", 0.1, Истина); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ИзменитьСтрокуОжидание() Экспорт Элементы.ОсновныеЯчейки.ИзменитьСтроку(); КонецПроцедуры

Проблема обновления реквизитов документа в другой сессии (кэш 1С)¶

В динамическом списке изменения отображаются при обновлении формы. В ТЧ документа — нет.
Требуется принудительно обновлять на клиенте. Например:

ОповеститьОбИзменении(Тип("СправочникСсылка.СерииНоменклатуры")); Элементы.СПисок.Обновить();

Программное создание реквизита (поле выбора) формы¶

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

Программное создание реквизитов (флаг) формы и расположение на форме¶

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

Программное создание кнопки на форме¶

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

Программный ввод на основании¶

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

Реализация ввода на основании в расширении¶

1. Создать общую команду, например:
«СоздатьПеремещениеСырьяНаОснованииСборкиТоваров»
Группа = Командная панель формы.Создать на основании
ТипПараметраКоманды = ДокументСсылка.СборкаТоваров

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

Из модуля документа Перемещение добавляем в расширение процедуру

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

Обработка проверки заполнения¶

  • Обработка проверки заполнения на сервере (ОбработкаПроверкиЗаполненияНаСервере) – можно обработать в модуле формы. Предназначено для проверки заполнения реквизитов формы, не объекта. Для документов вызов зависит от того, установлено ли у формы документа проведение при записи. Если установлено, то вызов при проведении, иначе при записи
  • Обработка проверки заполнения (ОбработкаПроверкиЗаполнения) – можно обработать в модуле прикладного объекта.

Форма выбора. Как из формы списка сделать форму выбора?¶

Варианты:
1. Использовать сгенерированную платформой форму и не указывать в реквизите форму для выбора.
2. В форме списка списку назначаем РежимВыбора, на событие вешаем оповещение о выборе.

Процедура ФормаСпискаВыбораПриСозданииНаСервере(Знач Список, Знач ЭлементФормыСписок, Знач Параметры, Знач АвтоматическоеСохранениеПользовательскихНастроек = Ложь) Экспорт // Элементы.Список - основной реквизит с динамическим списком ЭлементФормыСписок.РежимВыбора = Параметры.РежимВыбора; Если Параметры.МножественныйВыбор <> Неопределено Тогда ЭлементФормыСписок.МножественныйВыбор = Параметры.МножественныйВыбор; КонецЕсли; // обход автоматического сохранения пользовательских настроек для разных режимов Если Параметры.РежимВыбора И Не ЗначениеЗаполнено(Параметры.КлючПользовательскихНастроек) Тогда Параметры.КлючПользовательскихНастроек = "РежимВыбора"; Список.АвтоматическоеСохранениеПользовательскихНастроек = АвтоматическоеСохранениеПользовательскихНастроек; КонецЕсли; КонецПроцедуры

Программная установка параметров выбора в 1C¶

//3185. Добавляем параметры отбора НовыйМассив = Новый Массив(); НовыйМассив.Добавить(Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляТоваров); НовыйМассив.Добавить(Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаСерииНоменклатуры); НовыеЗначения = Новый ФиксированныйМассив(НовыйМассив); НовыйПараметр = Новый ПараметрВыбора("Отбор.Назначение", НовыеЗначения); НовыйМассив = Новый Массив(); НовыйМассив.Добавить(НовыйПараметр); НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив); Элементы.ШаблонЭтикетки.ПараметрыВыбора = НовыеПараметры;

Как обратиться к текущим данным табличной части на сервере?

evilfrog

Как обратиться к текущим данным табличной части на сервере?

Поделиться сообщением
Ссылка на сообщение
Поделиться на другие сайты

Поделиться

1 ответ на этот вопрос

  • Сортировать по голосам
  • Сортировать по дате

Рекомендуемые сообщения

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Добавить комментарий

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