Текущие данные 1с представляют из себя структуру данных текущей строки таблицы формы. Для доступа к ним используется свойство ТекущиеДанные.
Без обращения к серверу
Создадим форму списка у справочника Номенклатура не назначая ее основной. Добавим реквизит формы ПодобранныеНоменклатуры (тип ТаблицаЗначений) и разместим соответствующий элемент формы. Для полей динамического списка ЭтоГруппа и Ссылка установим флаг ИспользоватьВсегда. Чуть позже станет понятно, для чего.
Все действия выбора будут сводиться к добавлению строки в таблицу ПодобранныеНоменклатуры элементов динамического списка. Если элемент уже был добавлен в таблицу, то увеличиваем его количество. Код обработки выбора элемента списка номенклатуры:
&НаКлиентеПроцедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) // Проверка на наличие выбранной строки в динамическом списке ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; // Для групп номенклатуры подбор не производится. Именно для обращения // к свойству «ЭтоГруппа» был установлен флаг «Использовать всегда», иначе // при отсутствии колонки «Это группа» в списке вылетала бы ошибка // «Поле объекта не найдено» Если ТекущиеДанные.ЭтоГруппа Тогда Возврат; КонецЕсли; // Отключаем стандартную обработку СтандартнаяОбработка = Ложь; // Ищем товар в таблице ПодобранныеНоменклатуры. Если нет — добавляем // строку, иначе увеличиваем количество РезультатПоиска = ПодобранныеНоменклатуры.НайтиСтроки( Новый Структура(«Наименование», ТекущиеДанные.Ссылка) ); Если РезультатПоиска.Количество() = 0 Тогда Строка = ПодобранныеНоменклатуры.Добавить(); Строка.Наименование = ТекущиеДанные.Ссылка; Иначе Строка = РезультатПоиска[0]; КонецЕсли; Строка.Количество = Строка.Количество + 1;КонецПроцедуры
Форма подбора номенклатур вызывается из формы документа ПриходнаяНакладная по команде Подбор:
&НаКлиентеПроцедура Подбор(Команда) // Первый параметр — полное имя формы, третий параметр — элемент формы, // в который осуществляется подбор (владелец). Последним параметром // передается уникальный идентификатор формы. ОткрытьФорму( «Справочник.Номенклатура.Форма.ФормаПодбораИзДокумента», , Элементы.Состав, УникальныйИдентификатор );КонецПроцедуры
Когда в форме выбора необходимые номенклатуры подобраны, выполняется команда ПеренестиКлиент:
&НаКлиентеПроцедура ПеренестиКлиент(Команда) // Передаем данные выбора владельцу формы, т.е. документу ПриходнаяНакладная ОповеститьОВыборе(ПодобранныеНоменклатуры); КонецПроцедуры
Теперь подобранные номенклатуры доступны в обработчике ОбработкаВыбора элемента формы документа:
&НаКлиентеПроцедура СоставОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) // Заполняем таблицу документа подобранными номенклатурами Для Каждого Строка Из ВыбранноеЗначение Цикл РезультатПоиска = Объект.Состав.НайтиСтроки( Новый Структура(«Номенклатура», Строка.Наименование) ); Если РезультатПоиска.Количество() = 0 Тогда НоваяСтрока = Объект.Состав.Добавить(); НоваяСтрока.Номенклатура = Строка.Наименование; Иначе НоваяСтрока = РезультатПоиска[0]; КонецЕсли; НоваяСтрока.Количество = НоваяСтрока.Количество + Строка.Количество; КонецЦикла;КонецПроцедуры
Источник: http://tokmakov.msk.ru/blog/item/98
Варианты получения свойства Текущие данные 1С
В общем случае к свойству ТекущиеДанные можно обратиться через элемент формы к которому оно относится.
Элементы.<ИмяТаблицыФормы>.ТекущиеДанные
Например:
ТекущиеДанные = Элементы.ТаблицаНоменклатуры.ТекущиеДанные;
Но при обращении к текущим данным из обработчика события таблицы формы, можно воспользоваться параметром Элемент. В нем уже содержится таблица формы. В этом случае обращение к текущим данным будет выглядеть следующим образом:
Элемент.ТекущиеДанные
Например:
&НаКлиентеПроцедура ТаблицаНоменклатурыПриИзменении(Элемент) Если Элемент.ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; //Код обрабатывающий событие КонецПроцедуры
Такое обращение к текущим данным не получится реализовать в обработчиках событий колонок таблицы формы. Так как в параметр Элемент там передается ПолеФормы, относящееся к колонке.
Источник: http://1cguide.ru/programmirovanie-1s/tekushhie-dannye-1s.html
Метод асинхронной передачи файла на сервер
Обмен файлом между клиентом и сервером осуществляется через временное хранилище. Для помещения данных во временное хранилище правильно воспользоваться методом
НачатьПомещениеФайла(<ОписаниеОповещенияОЗавершении>, <Адрес>, <ПомещаемыйФайл>, <Интерактивно>, <УникальныйИдентификаторФормы>, <ОписаниеОповещенияПередНачаломПомещенияФайла>)
Метод работает в асинхронном режиме. Возможны два варианта выбора файла для передачи на сервер:
- интерактивной режим, при котором пользователю будет выдан диалог выбора файла;
- неинтерактивный режим, при котором уже известен путь к требуемому файлу на компьютере клиента. Такое возможно, например, когда пользователь в отдельном поле ввода выбрал путь к обрабатываемому файлу. Такой сценарий описан в этой статье.
Параметр ОписаниеОповещенияОЗавершении содержит описание процедуры (тип ОписаниеОповещения), которая будет вызвана после завершения помещения файла во временное хранилище. Эта процедура должна иметь ключевое слово Экспорт и 4 параметра:
- Результат — для интерактивного режима возвращает результат работы пользователя с окном выбора файла. Истина — пользователь выбрал файл; Ложь — пользователь отказался от выбора;
- Адрес — адрес временного хранилища;
- ПомещаемыйФайл — путь к файлу;
- ДополнительныеПараметры — значение, указанное при создании объекта ОписаниеОповещения.
Следует обратить внимание на параметр УникальныйИдентификаторФормы. В него рекомендуется передавать идентификатор текущей формы для сохранения данных во временном хранилище между несколькими серверными вызовами. При закрытии формы данные из временного хранилища будут автоматически удалены.
Источник: http://pro1c8.ru/peredacha-fajla-na-server/
Поставленная задача
В тестовой конфигурации есть документ «Продажа» с табличной частью «Товары». Для этого документа необходимо реализовать подбор товаров в табличную часть. Подбор товаров должен иметь возможность переносить в документ несколько товаров за раз. То есть сначала пользователь подбирает товары в определенную таблица, а затем по команде «Перенести в документ» данные из этой таблицы переносятся в табличную часть документа.
Подбор осуществлястя только по элементам справочника. При переносе в табличную часть, если товар уже в нее был добавлен, нужно увеличить количество в этой строке на значение, указанное в подборе.
Источник: http://rg-gaming.ru/kompjutery/dannyeformyjelementkollekcii-peredat-na-server
Одиночный подбор
При одиночном подборе форма справочника будет закрываться сразу после выбора элемента. Для выбора следующего элемента необходимо будет снова инициировать подбор.
Откроем форму документа ПриходнаяНакладная , создадим команду Подбор и назначим для нее обработчик:
В этой процедуре мы открываем форму выбора для справочника Номенклатура , указывая, что она подчинена таблице Материалы формы документа ПриходнаяНакладная ( Элементы.Материалы ). При выборе из формы выбора справочника выбранное значение будет передано в обработчик события ОбработкаВыбора таблицы формы Материалы , так как она является владельцем открытой формы выбора.
Поэтому откроем палитру свойств таблицы Материалы и создадим обработчик события ОбработкаВыбора :
В этой процедуре мы добавляем новую строку в таблицу Материалы и присваиваем колонке Материал в новой строке выбранное в форме выбора справочника значение. Это значение передается в обработчик события в параметре ВыбранноеЗначение .
Источник: http://rg-gaming.ru/kompjutery/dannyeformyjelementkollekcii-peredat-na-server
Множественный подбор
При множественном подборе форма справочника будет открыта до тех пор, пока пользователь не закроет ее интерактивно или не будет вызван метод формы Закрыть() .
Обработчик команды Подбор :
Обработчик события ОбработкаВыбора остается без изменений.
Источник: http://rg-gaming.ru/kompjutery/dannyeformyjelementkollekcii-peredat-na-server
Передача файла на сервер средствами БСП
В конфигурациях со встроенной Библиотекой стандартных подсистем для передачи файлов с клиента на сервер можно использовать процедуры
ЗагрузитьФайл(ОбработчикЗавершения, ПараметрыЗагрузки = Неопределено, ИмяФайла = «», АдресВоВременномХранилище = «») Экспорт
ЗагрузитьФайлы(ОбработчикЗавершения, ПараметрыЗагрузки = Неопределено, ЗагружаемыеФайлы = Неопределено) Экспорт
общего модуля ФайловаяСистемаКлиент или
ВыбратьИПередатьФайлНаСервер(ОповещениеЗавершения, Знач ПараметрыДиалога = Неопределено, Знач ИдентификаторФормы = Неопределено) Экспорт
общего модуля ОбменДаннымиКлиент.
Пример интерактивной загрузки файла на сервер средствами БСП:
&НаКлиенте
Процедура ЗагрузитьФайлИнтерактивно(Команда)ПараметрыДиалога = Новый Структура;
ПараметрыДиалога.Вставить(«Заголовок», НСтр(«ru = ‘Выберите файл XML’»));
ПараметрыДиалога.Вставить(«Фильтр», НСтр(«ru=’Файл XML (*.xml)|*.xml’»));Оповещение = Новый ОписаниеОповещения(«ЗагрузитьФайлЗавершение», ЭтотОбъект);
ОбменДаннымиКлиент.ВыбратьИПередатьФайлНаСервер(Оповещение, ПараметрыДиалога, УникальныйИдентификатор);КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьФайлЗавершение(Знач РезультатПомещенияФайлов, Знач ДополнительныеПараметры) ЭкспортАдрес = РезультатПомещенияФайлов.Хранение;
ТекстОшибки = РезультатПомещенияФайлов.ОписаниеОшибки;
ИмяВыбранногоФайла = РезультатПомещенияФайлов.Имя;Если ПустаяСтрока(ТекстОшибки) И ПустаяСтрока(Адрес) Тогда
ТекстОшибки = НСтр(«ru = ‘Ошибка передачи файла на сервер’»);
КонецЕсли;
Если НЕ ПустаяСтрока(ТекстОшибки) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
Возврат;КонецЕсли;
ВыполнитьЗагрузкуНаСервере(Адрес);
КонецПроцедуры
Остались вопросы?
Спросите в комментариях к статье.
Смотри также:
Как открыть форму внешней обработки или отчета программно
Как получить список открытых окон 1С
Программное получение системной информации о компьютере и конфигурации
Источник: http://pro1c8.ru/peredacha-fajla-na-server/
Использование метода ОповеститьОВыборе()
Метод формы ОповеститьОВыборе() используется в тех случаях, когда алгоритм формирования данных подбора сложен и кроме собственно выбора элемента справочника от пользователя требуется указание некоторой дополнительной информации. В этом случае метод ОповеститьОВыборе() вызывается тогда, когда вся необходимая информация подбора сформирована.
Метод ОповеститьОВыборе() посылает оповещение владельцу формы о выполнении выбора или подбора, передает ему выбранное значение и закрывает форму, если она открыта не в режиме множественного выбора.
Также метод ОповеститьОВыборе() может использоваться в тех случаях, когда требуется передать в форму документа не только выбранный элемент справочника (или массив элементов), а некоторую произвольную структуру данных.
Источник: http://rg-gaming.ru/kompjutery/dannyeformyjelementkollekcii-peredat-na-server
Справка
ТабличноеПоле.ДобавитьСтроку()
Добавляет строку в табличное поле, аналогично выполнению команды «Добавить».
- Если табличное поле связано с таблицей или деревом значений, метод добавляет строку в таблицу или дерево значений (аналогично соответствующим методам этих объектов).
- Если табличное поле связано со списком объектов, хранимых в базе данных, метод начинает редактирование нового объекта этого списка. (Например, список объектов в форме списка справочника, или документа).
- Если табличное поле связано с набором записей или табличной частью, то метод начинает редактирование новой записи. (Например, список записей в форме списка регистра сведений; табличная часть документа или справочника).
Доступность: Толстый клиент.
ДанныеФормыКоллекция.Добавить()
Добавляет элемент в конец коллекции и возвращает его в качестве результата метода. Возвращаемое значение: ДанныеФормыЭлементКоллекции .
Доступность: тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
В общем случае клиент и сервер 1С — это разные компьютеры с различной файловой системой. Рассмотрим как правильно передать файл с компьютера клиента на компьютер сервера.
Источник: http://rg-gaming.ru/kompjutery/dannyeformyjelementkollekcii-peredat-na-server