Использование синхронных методов на клиенте запрещено Адаптировала обработку под интерфейс Такси Бухгалтерии 3, и получила ошибку:
Ошибка при вызове метода контекста (Выбрать)
Если ДиалогОткрытияФайла.Выбрать() Тогда
по причине:
Использование синхронных методов на клиенте запрещено!
Это вызвано тем, что Использование модальных окон запрещено!
Решение:
Нужно использовать создание объекта «ОписанияОповещения » и вызов другого метода диалога Показать()
Вот пример кода с ошибкой:
Код 1C v 8.2 УП &НаКлиенте
Процедура Выгрузить(Команда)
Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
Диалог. Заголовок = "Сохранить в файл" ;
Диалог. Фильтр = "Файл ТЧ документа (*.ftd)|*.ftd|Все файлы (*.*)|*.*" ;
Диалог. ПолноеИмяФайла = "Выгрузка_" + Строка( Документ. Номер) ;
Если Диалог. Выбрать( ) Тогда
ЗначениеВФайл( Диалог. ПолноеИмяФайла, ТПТЧ) ;
КонецЕсли ;
КонецПроцедуры
Исправленный код:
Код 1C v 8.3 &НаКлиенте
Процедура Выгрузить(Команда)
Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
Диалог. Заголовок = "Сохранить в файл" ;
Диалог. Фильтр = "Файл ТЧ документа (*.ftd)|*.ftd|Все файлы (*.*)|*.*" ;
Диалог. ПолноеИмяФайла = "Выгрузка_" + Строка( ВернутьНомерОснования( Объект. Основание) ) ;
Диалог. Показать( Новый ОписаниеОповещения( "ВыгрузитьЗавершение" , ЭтаФорма, Новый Структура( "Диалог" , Диалог) ) ) ;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Диалог = ДополнительныеПараметры. Диалог;
Если ( ВыбранныеФайлы < > Неопределено ) Тогда
ВыгрузитьСервер( Диалог. ПолноеИмяФайла) ;
КонецЕсли ;
КонецПроцедуры
&НаСервере
Процедура ВыгрузитьСервер(ПолнИмяФайла)
ЗначениеВФайл( ПолнИмяФайла, ЭтаФорма. ТЗ. Выгрузить( ) ) ;
КонецПроцедуры
Категория:
Системные Ошибки Как выгрузить все дополнительные обработки и отчеты в каталог? Выгрузить все дополнительные обработки и отчеты в каталог всего за пару кликов. Простейшая обработка в один реквизит и команду.
Набросайте элементы на форму и вставьте код в модуль формы обработки. И без всякого скачивания.
Работоспособность проверена на БП 3.0, Документооборот 1.4-2.0, платформы 1С 8.3.7, 8.3.8
Код 1C v 8.3 #Область ВыборКаталогаДляВыгрузки
&НаКлиенте
Процедура КаталогВыгрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДопПараметры = новый Структура;
ДопПараметры. Вставить( "ИмяЭлемента" , "КаталогВыгрузки" ) ;
ОписаниеОповещения = Новый ОписаниеОповещения( "ОбработатьВыборКаталога" , ЭтаФорма, ДопПараметры) ;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. ВыборКаталога) ;
ДиалогОткрытияФайла. МножественныйВыбор = Ложь ;
Если ЗначениеЗаполнено( Объект. КаталогВыгрузки) Тогда
ДиалогОткрытияФайла. Каталог = Объект. КаталогВыгрузки;
КонецЕсли ;
ДиалогОткрытияФайла. Показать( ОписаниеОповещения) ;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборКаталога(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат ;
КонецЕсли ;
Объект[ДополнительныеПараметры. ИмяЭлемента] = ВыбранныеФайлы[0 ];
КонецПроцедуры
#КонецОбласти
#Область НажатиеНаКнопку
&НаКлиенте
Процедура Выгрузить(Команда)
ОчиститьСообщения( ) ;
Если НЕ ЗначениеЗаполнено( Объект. КаталогВыгрузки) Тогда
Сообщить( "Укажите каталог для выгрузки" ) ;
Возврат ;
КонецЕсли ;
Каталог = Новый Файл( Объект. КаталогВыгрузки) ;
Если НЕ Каталог. Существует( ) Тогда
Сообщить( "Указанный каталог не существует" ) ;
Возврат ;
КонецЕсли ;
МассивФайлов = НайтиФайлы( Объект. КаталогВыгрузки, "*.*" ) ;
Если МассивФайлов. Количество( ) > 0 Тогда
ОписаниеОповещения = новый ОписаниеОповещения( "ПодвержденияЗамещения" , ЭтаФорма) ;
ПоказатьВопрос( ОписаниеОповещения, "В каталоге есть файлы. При выгрузке будет выполнение замещение существующих." + Символы. ПС+ "Начать выгрузку?" , РежимДиалогаВопрос. ДаНет) ;
Возврат ;
КонецЕсли ;
ВыгрузкаНачнись( ) ;
КонецПроцедуры
&НаКлиенте
Процедура ПодвержденияЗамещения(ЧтоОтветилПользователь, Параметры) Экспорт
Если ЧтоОтветилПользователь = КодВозвратаДиалога. Да Тогда
ВыгрузкаНачнись( ) ;
Иначе
Возврат ;
КонецЕсли ;
КонецПроцедуры
#КонецОбласти
#Область СамаВыгрузка
&НаКлиенте
Процедура ВыгрузкаНачнись()
ПолучаемыеФайлы = ПодготовимФайлыНаСервере( ЭтаФорма. УникальныйИдентификатор) ;
Обработчик = Новый ОписаниеОповещения( "ОбработкаРезультатаВыгрузки" , ЭтотОбъект) ;
НачатьПолучениеФайлов( Обработчик, ПолучаемыеФайлы, Объект. КаталогВыгрузки, Ложь ) ;
КонецПроцедуры
&НаСервере
Функция ПодготовимФайлыНаСервере(ИдентификаторФормы)
Массив = Новый Массив;
Выборка = Справочники. ДополнительныеОтчетыИОбработки. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
Если ТипЗнч( Выборка. ХранилищеОбработки) = Тип( "ХранилищеЗначения" ) Тогда
Адрес = ПоместитьВоВременноеХранилище( Выборка. ХранилищеОбработки. Получить( ) , ИдентификаторФормы) ;
Массив. Добавить( Новый ОписаниеПередаваемогоФайла( Выборка. ИмяФайла, Адрес) ) ;
КонецЕсли ;
КонецЦикла ;
Возврат Массив;
КонецФункции
&НаКлиенте
Процедура ОбработкаРезультатаВыгрузки(ПолученныеФайлы, ДополнительныеПараметры) Экспорт
ПоказатьПредупреждение( , "Выгрузка в каталог завершена" , 10 ) ;
КонецПроцедуры
#КонецОбласти
Автор: Михали Задорнов (MZadornov)
Категория:
Внешние печатные формы, отчеты и обработк�… Как отсканировать штрихкод на мобильном устройстве Источник mobile-1s.ru
//не забываем в свойствах конфигурации установить Требуемые разрешения "Мультимедиа"
Код 1C v 8.3
&НаКлиенте
Процедура ЗапуститьСканирование()
#Если МобильноеПриложениеКлиент Тогда
Если НЕ СредстваМультимедиа. ПоддерживаетсяСканированиеШтрихКодов( ) Тогда
ВызватьИсключение НСтр( "ru='Сканирование штрихкодов не поддерживается';en='Barcode scanning is not supported'" ) ;
Возврат ;
КонецЕсли ;
ОбработчикСканирования = Новый ОписаниеОповещения( "ОбработкаСканирования" , ЭтаФорма) ;
ОбработчикЗакрытия = Новый ОписаниеОповещения( "ОбработкаЗакрытияИнтерфейса" , ЭтаФорма) ;
СредстваМультимедиа. ПоказатьСканированиеШтрихКодов( НСтр( "ru='Наведите камеру на штрихкод';en='Aim the camera at an barcode'" ) , ОбработчикСканирования, ОбработчикЗакрытия, ТипШтрихКода. Линейный) ;
#конецесли
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаСканирования(Штрихкод, Результат, Сообщение, ДополнительныеПараметры) Экспорт
пТовар = "" ;
Если Результат Тогда
Структура = ОбщегоНазначенияСервер. ПоискПоШтрихкодуОбъекта( ШтрихКод) ;
Если Структура = Неопределено Тогда
пТовар = Неопределено ;
Сообщение = "Не найден объект по штрихкоду " + Штрихкод;
Иначе
пТовар = Структура. Наименование;
Сообщение = сокрЛП( пТовар) + Символы. ПС + Штрихкод;
ДобавитьТоварВТаблицу( пТовар) ;
КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаЗакрытияИнтерфейса(ДополнительныеПараметры) Экспорт
КонецПроцедуры
Категория:
Мобильное приложение Как вывести список на печать с учетом установленных отборов? Этот код аналог функции Вывести список - вывод списка элементов справочника или списка документов:
Код 1C v 8.х Процедура ДействияФормыПечать(Кнопка)
Список = ЭтаФорма. ТабличноеПолеДокументов;
ТабДок = Новый ТабличныйДокумент;
ТабДок. АвтоМасштаб = Истина ;
ТабДок. ТолькоПросмотр = Ложь ;
ТабДок. ОтображатьСетку = Ложь ;
Макет = Документы. Заказ. ПолучитьМакет( "МакетСписок" ) ;
ОбластьШапка = Макет. ПолучитьОбласть( "Шапка" ) ;
ОбластьСтрока = Макет. ПолучитьОбласть( "Строка" ) ;
ТабДок. Вывести( ОбластьШапка) ;
Построитель = Новый ПостроительОтчета;
Построитель. ИсточникДанных = Новый ОписаниеИсточникаДанных( Список) ;
Выборка = Построитель. Результат. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
ОбработкаПрерыванияПользователя( ) ;
ОбластьСтрока. Параметры. Заполнить( Выборка) ;
ТабДок. Вывести( ОбластьСтрока) ;
КонецЦикла ;
ТабДок. Показать( ) ;
КонецПроцедуры
Категория:
Список Справочника, Документов, Регистров Как вывести текст в поле надписи 1С 8.2 обычное приложение Доброго дня! Вопрос простой. Или с виду простой. Хочу вывести сообщение в поле надписи на форме. Чтоб при вводе неверных данных появлялась соответствующая надпись. Как мне это сделать?
пробую так:
а = "неверный пин";
ЭтаФорма.ЭлементыФормы.СообщитьНеверныйВвод = а;
ругается:
{ОбщаяФорма.ФормаАвторизации.Форма(80)}: Поле объекта недоступно для записи (сообщить) ЭтаФорма.ЭлементыФормы.СообщитьНеверныйВвод = а;
если так напямую ошибки нет, но и на форме ничего нет
СообщитьНеверныйВвод = "Неверный пин!!!";
Категория:
1С Общие вопросы - Обычные формы Динамический отчет на СКД с разными вариантами На днях делал несколько однотипных отчетов на СКД.
Общий принцип: формируются все варианты отчета, указанные в настройках схемы и каждый вариант выводится на отдельной вкладке.
Потом возникла мысль попробовать объединить все схемы в один отчет, чтобы не плодить лишних объектов в конфигурации. При этом количество вариантов в этих схемах заранее неизвестно. Ok, challenge accepted.
В тестовой конфигурации создаю для отчета две схемы компоновки, "Склад" и "Заявки".
Запросы наборов данных приводить не буду, для каждой схемы в настройках добавляю несколько вариантов отчетов.
Теперь переходим к созданию формы. Практически все реквизиты формы будут создаваться при выборе необходимого макета отчета.
Код 1C v 8.2 УП &НаСервере
Процедура СоздатьПереченьОтчетов()
Для Каждого Макет Из РеквизитФормыВЗначение( "Отчет" ) . Метаданные( ) . Макеты Цикл
Элементы. МакетОтчета. СписокВыбора. Добавить( Макет. Имя, Макет. Синоним) ;
КонецЦикла ;
КонецПроцедуры
&НаСервере
Процедура ОбработатьВыборМакета()
Макет = РеквизитФормыВЗначение( "Отчет" ) . ПолучитьМакет( МакетОтчета) ;
мУдалить = ? ( ПустаяСтрока( РеквизитыКУдалению) , Новый Массив, ПолучитьИзВременногоХранилища( РеквизитыКУдалению) ) ;
мДобавить = Новый Массив;
кУдалению = Новый Массив;
Для Каждого Вариант Из Макет. ВариантыНастроек Цикл
ИмяРеквизита = "ТабДок_" + Вариант. Имя;
тРеквизит = Новый РеквизитФормы( ИмяРеквизита, Новый ОписаниеТипов( "ТабличныйДокумент" ) ) ;
мДобавить. Добавить( тРеквизит) ;
кУдалению. Добавить( ИмяРеквизита) ;
КонецЦикла ;
ИзменитьРеквизиты( мДобавить, мУдалить) ;
Пока Элементы. СтраницыОтчета. ПодчиненныеЭлементы. Количество( ) Цикл
Элементы. Удалить( Элементы. СтраницыОтчета. ПодчиненныеЭлементы[0 ]) ;
КонецЦикла ;
Для Каждого Вариант Из Макет. ВариантыНастроек Цикл
Страница = Элементы. Добавить( "Страница_" + Вариант. Имя, Тип( "ГруппаФормы" ) , Элементы. СтраницыОтчета) ;
Страница. Вид = ВидГруппыФормы. Страница;
Страница. Заголовок = Вариант. Представление;
ИмяРеквизита = "ТабДок_" + Вариант. Имя;
ТабДок = Элементы. Добавить( ИмяРеквизита, Тип( "ПолеФормы" ) , Страница) ;
ТабДок. Вид = ВидПоляФормы. ПолеТабличногоДокумента;
ТабДок. ПутьКДанным = ИмяРеквизита;
ТабДок. ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы. Нет;
ЭтаФорма[ИмяРеквизита]. Очистить( ) ;
КонецЦикла ;
РеквизитыКУдалению = ПоместитьВоВременноеХранилище( кУдалению, УникальныйИдентификатор) ;
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчеты()
Схема = РеквизитФормыВЗначение( "Отчет" ) . ПолучитьМакет( МакетОтчета) ;
Для Каждого Вариант Из Схема. ВариантыНастроек Цикл
Отчет. КомпоновщикНастроек. ЗагрузитьНастройки( Вариант. Настройки) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета. Выполнить( Схема, Отчет. КомпоновщикНастроек. ПолучитьНастройки( ) ) ;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки. Инициализировать( Макет) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ЭтаФорма["ТабДок_" + Вариант. Имя]) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновки) ;
КонецЦикла ;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СоздатьПереченьОтчетов( ) ;
КонецПроцедуры
&НаКлиенте
Процедура МакетОтчетаПриИзменении(Элемент)
ОбработатьВыборМакета( ) ;
КонецПроцедуры
&НаКлиенте
Процедура Сформировать(Команда)
СформироватьОтчеты( ) ;
КонецПроцедуры
Смотрим, что получилось.
Выгрузка базы 1Cv8skd.rar
Источник
Категория:
Схема Компоновки Данных Как установить цену из РегистраСведений на дату создания документа Код 1C v 8.3
&НаКлиенте
Процедура ТоварНоменклатураПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭтаФорма. ТекущийЭлемент. ТекущиеДанные;
Номенклатура = СтрокаТабличнойЧасти. Номенклатура;
ТипЦен = ЭтаФорма. ТипЦен;
ТекДата = Объект. Дата;
СтрокаТабличнойЧасти. Цена = ПолучитьЦену( Номенклатура, ТипЦен, ТекДата) ;
КонецПроцедуры
&НаСервере
Функция ПолучитьЦену(Номенклатура, ТипЦен, ТекДата) Экспорт
Отбор = Новый Структура;
Отбор. Вставить( "Номенклатура" , Номенклатура) ;
Отбор. Вставить( "ТипЦены" , ТипЦен) ;
ЦенаТовара = РегистрыСведений. ЦеныНоменклатуры. ПолучитьПоследнее( ТекДата, Отбор) ;
Возврат ЦенаТовара. Цена;
КонецФункции
Категория:
Регистры сведений Пример хранения изображений в базе (отдельный справочник), в интерфейсе Такси и без модальности Часто разрабатывая некую конфигурацию, пользователи хотят прикреплять к элементу справочника фото и чтобы они хранились в базе данных.
В этой статье я расскажу как к справочнику объекты строительства подключить хранилище фотографий в виде справочника Хранилище файлов.
Основные элементы конфигурации с которыми нам работать :
1. Справочник Объекты строительства - основной справочник в котором хранится инфо и к каждому элементу нужно подгружать фото
2. Справочник Хранилище Фалов, он подчинен справочнику Объекты строительства и в нем есть реквизит ДанныеХЗ - хранилище значений в котором мы будем хранить фото
Форма элемента Объекты строительства , добавим кнопку загрузить фото для списка Файлы (динамический список, в котором запросом отбирается по владельцу приложенные файлы)
Код команды Добавить Файлы (Код для отключенного режима модальности):
Код 1C v 8.3 &НаКлиенте
Процедура ДобавитьФайлы()
Если ЗначениеЗаполнено( Объект. Ссылка) Тогда
Оповещение = Новый ОписаниеОповещения( "ОбработатьВыборФайла" , ЭтотОбъект) ;
НачатьПомещениеФайла( Оповещение, , , Истина , УникальныйИдентификатор) ;
Иначе
Оповещение = Новый ОписаниеОповещения( "ОтветНаВопросЗаписать" , ЭтотОбъект) ;
ТекстВопроса = "Элемент не записан, Записать?" ;
ПоказатьВопрос( Оповещение, ТекстВопроса, РежимДиалогаВопрос. ДаНет) ;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура ОтветНаВопросЗаписать(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога. Да Тогда
ЭтотОбъект. Записать( ) ;
ДобавитьФайлы( ) ;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат ;
КонецЕсли ;
ОписаниеФайла = Новый Файл( ВыбранноеИмяФайла) ;
СохранитьФайлВХранилище( Адрес, Объект. Ссылка, ОписаниеФайла. ИмяБезРасширения) ;
Элементы. Файлы. Обновить( ) ;
ЭтаФорма. ОбновитьОтображениеДанных( ) ;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СохранитьФайлВХранилище(Адрес,Владелец,Имя)
НовФайл = Справочники. ХранилищеФайлов. СоздатьЭлемент( ) ;
НовФайл. Владелец = Владелец;
НовФайл. Наименование = Имя;
НовФайл. ДанныеТекущаяДата = ТекущаяДата( ) ;
НовФайл. ДанныеХЗ = Новый ХранилищеЗначения( ПолучитьИзВременногоХранилища( Адрес) ) ;
НовФайл. Записать( ) ;
КонецПроцедуры
файлы записаны, далее если файлов много, то пользователь может перемещаться по списку файлов и ему должны показываться файлы
Добавим для списка файлы Событие ФайлыПриАктивизацииСтроки
Код 1C v 8.3 &НаКлиенте
Процедура ФайлыПриАктивизацииСтроки(Элемент)
Попытка
ТекКартинка = ФайлыПриАктивизацииСтрокиНаСервере( Элемент. ТекущиеДанные. Ссылка) ;
Исключение
КонецПопытки ;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ФайлыПриАктивизацииСтрокиНаСервере(ЭлементС)
Возврат ПолучитьНавигационнуюСсылку( ЭлементС, "ДанныеХЗ" ) ;
КонецФункции
+ чуть не забыл, т.к. файлы это динамический список с установленным запросом и параметром - необходимо при открытии задать параметр:
Установим параметр при открытии:
Код 1C v 8.3 &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Файлы. Параметры. УстановитьЗначениеПараметра( "Владелец" , Объект. Ссылка) ;
КонецПроцедуры
Результат:
Скачать DT с примером : Foto_V_BD.7z
Если у Вас есть вопросы или комментарии - пишите ниже, обсудим
Категория:
1С Общие вопросы - Управляемые формы и Такс… Как обновить форму списка из формы элемента? Есть форма со списком элементов справочника. При нажатии на список открывается форма с элементом из списка, но при сохранении элемента первая форма не обновляется.
Как программно обновить форму списка?
В форме элемента необходимо написать код:
Код 1C v 8.3 &НаКлиенте
Процедура ПослеЗаписи (ПараметрыЗаписи)
Оповестить( "ОбновитьФормуСписка" ) ;
КонецПроцедуры
а, в форме списка добавить событие:
Код 1C v 8.3 &НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия,Параметр, Источник)
Если ИмяСобытия= "ОбновитьФормуСписка" Тогда
ЭтаФорма. ОбновитьОтображениеДанных( ) ;
КонецЕсли ;
КонецПроцедуры
Категория:
Работа с Формой (Диалог) и её элементами Как обновить динамический список или реквизит на форме клиента? Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закрыть форму и открыть снова - все обновится
НО если нужно обновить сразу в открытой форме , то используйте код:
Код 1C v 8.3 &НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат ;
КонецЕсли ;
Элементы. Файлы. Обновить( ) ;
ЭтаФорма. Прочитать( ) ;
ЭтаФорма. ОбновитьОтображениеДанных( ) ;
КонецПроцедуры
Обновить() - Обновляет данные в таблице.
Прочитать() - Обновляет объект управляемой формы.
ОбновитьОтображениеДанных() - В принудительном порядке обновляет содержание элементов управления. Полезен при изменении значений реквизитов формы вне формы, в тот момент, когда форма отображается на экране.
Категория:
Работа с Формой (Диалог) и её элементами Как программно создать документ копированием? При доработке какого-либо процесса, бывает необходимо программно создать документ копированием по ссылке уже созданного в базе.
Код позволяющий создать документ копированием:
Код 1C v 8.х Процедура ДействияФормыДобавитьКопированием(Кнопка)
колдок = 5 ;
Если ВвестиЧисло( колдок, "Сколько создать?" ) Тогда
Для н= 1 по колдок Цикл
ДокументКопия = ЭтаФорма. ЭлементыФормы. Список. ТекущаяСтрока. Скопировать( ) ;
ДокументКопия. Дата = РабочаяДата;
ДокументКопия. Записать( ) ;
КонецЦикла ;
КонецЕсли ;
КонецПроцедуры
Категория:
Документы Как передать таблицу значений с сервера на клиент? Многие спрашиваю, как передать тз с сервера на клиент - ниже несколько вариантов как это можно реализовать:
Через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр
Код 1C v 8.3 &НаКлиенте
Процедура ПолучитьТаблицу НаСервер(Команд а)
ТЗВСтроке = ПолучитьТЗНаСер вере( ) ;
ТЗ = ЗначениеИзСтрокиВнутр( ТЗВСтрок е) ;
КонецПроцедуры
&НаСервере
Функция ПолучитьТЗНаСер вере()
ТЗ = ЗаполнитьТЗДанными( ) ;
Возврат ЗначениеВСтрокуВнутр( ТЗ) ;
КонецФункции
Через реквизит Формы
Код 1C v 8.3
&НаСервере
Функция ПолучитьТЧ(ОбъектСсылка,ИмяТЧ)
ЗначениеОбъекта = ОбъектСсылка. ПолучитьОбъект( ) ;
ТабРез = ЗначениеОбъекта[ИмяТЧ]. выгрузить( ) ;
МассивДобавляемыхРеквизитов = Новый Массив;
МассивУдаляемыхРеквизитов = Новый Массив;
МассивКолонок = Новый Массив;
ИдКоллекции= "ВремТабЗнач" ;
КоллФормы= РеквизитФормыВЗначение( ИдКоллекции) ;
Для каждого ТекКол из КоллФормы. Колонки Цикл
МассивУдаляемыхРеквизитов. Добавить( ИдКоллекции+ "." + ТекКол. Имя) ;
КонецЦикла ;
Для каждого ТекКол из ТабРез. Колонки Цикл
МассивДобавляемыхРеквизитов. Добавить(
Новый РеквизитФормы( ТекКол. Имя, ТекКол. ТипЗначения, ИдКоллекции) ) ;
МассивКолонок. Добавить( ТекКол. Имя) ;
КонецЦикла ;
ЭтаФорма. ИзменитьРеквизиты( МассивДобавляемыхРеквизитов, МассивУдаляемыхРеквизитов) ;
ЗначениеВРеквизитФормы( ТабРез, ИдКоллекции) ;
Возврат МассивКолонок;
КонецФункции
Через Временное хранилище
Код 1C v 8.3
АдресХранилища = ПоместитьВоВременноеХранилище( МассивДанных, ЭтаФорма. УникальныйИдентификатор) ;
ПротоколПереноса = ПолучитьИзВременногоХранилища( АдресХранилища) ;
Через обычный возврат
Код 1C v 8.2 УП &НаКлиенте
Процедура ПолучитьТаблицуНаСервер(Команда)
ТЗ = ЗаполнитьТЗДанными( ) ;
КонецПроцедуры
&НаСервере
Функция ЗаполнитьТЗДанными()
ТЗ = Новый ТаблицаЗначений;
ТЗ. Колонки. Добавить( "Поле1" ) ;
ТЗ. Колонки. Добавить( "Поле2" ) ;
ТЗ. Колонки. Добавить( "Поле3" ) ;
ТЗ. Колонки. Добавить( "Поле4" ) ;
ТЗ. Колонки. Добавить( "Поле5" ) ;
Для i = 1 По 3 Цикл
НоваяСтр = ТЗ. Добавить( ) ;
НоваяСтр. Поле1 = i;
НоваяСтр. Поле2 = 2 * i;
НоваяСтр. Поле3 = 3 * i;
НоваяСтр. Поле4 = 4 * i;
НоваяСтр. Поле5 = 5 * i;
КонецЦикла ;
Возврат ТЗ;
КонецФункции
Пробуйте и пишите в комментариях как делаете это Вы
Категория:
Управляемое приложение, Тонкий клиент Как запретить создание документа копированием? Бывает, нужно программно запретить копирование документа , в данной статье несколько способов реализации этого:
Код 1C v 8.2 УП Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если НЕ Параметры. ЗначениеКопирования. Пустая( ) Тогда
Отказ = Истина ; СтандартнаяОбработка = Ложь ;
КонецЕсли ;
КонецПроцедуры
В перед открытием
Код 1C v 8.х Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Если ЭтоНовый( ) Тогда
Если ЗначениеЗаполнено( ПараметрОбъектКопирования) Тогда
Если ПараметрОбъектКопирования. Дата < Дата( "20100101000000" ) Тогда
Отказ = Истина ;
Сообщить( "Копирование документов заданного периода запрещено. Операция прервана" ) ;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Если ЭтаФорма. ПараметрОбъектКопирования = Неопределено Тогда
Иначе
Отказ = Истина ;
КонецЕсли ;
КонецПроцедуры
запретить в форме Списка или Журнала в событии "перед началом добавления".
Код 1C v 8.х Процедура ДокументСписокПередНачаломДобавления(Элемент, Отказ, Копирование)
Если копирование = истина тогда
отказ = Истина .
КонецЕсли ;
КонецПроцедуры
Категория:
Документы Табличная часть ~ Как настроить отбор строк? Часто возникает задача показать только нужные строки в табличной части документа или справочника (или другого объекта). Для этого можно использовать замечательное свойство:
в обычном приложении параметр для ОтборСтрок - Отбор...
в управляемом приложении - ФиксированнаяСтруктура
ОтборСтрок , которое входит в расширение табличного поля, связанного с табличной частью.
Управляемые формы Код 1C v 8.3 СписокЗаказовНаФорме. ОтборСтрок = Новый ФиксированнаяСтруктура( "Клиент" , СписокЗаказовНаФорме. ТекущиеДанные. Клиент) ;
пример:
Код 1C v 8.3 СписокЗаказовНаФорме = ЭтаФорма. Элементы. СписокЗаказов;
ТекНомер = Неопределено ;
Для НомерСтроки = 0 По СписокЗаказов. Количество( ) - 1 Цикл
Сообщение = Новый СообщениеПользователю;
Если СписокЗаказовНаФорме. ПроверитьСтроку( НомерСтроки) Тогда
СписокЗаказовНаФорме. ТекущаяСтрока = НомерСтроки;
Если ТекНомер = Неопределено Тогда
Если ЗначениеЗаполнено( СписокЗаказовНаФорме. ТекущиеДанные. Машина) Тогда
ТекНомер = СписокЗаказовНаФорме. ТекущиеДанные. Машина;
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение. Текст = "Установите нужный номер автомобиля в первой строке списка" ;
Сообщение. Поле = "СписокЗаказов[" + НомерСтроки + "].Машина" ;
Сообщение. Сообщить( ) ;
СписокЗаказовНаФорме. ОтборСтрок = Новый ФиксированнаяСтруктура( "Клиент" , СписокЗаказовНаФорме. ТекущиеДанные. Клиент) ;
Возврат ;
КонецЕсли ;
Иначе
СписокЗаказовНаФорме. ТекущиеДанные. Машина = ТекНомер;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
или такой динамический отбор
Код 1C v 8.3 ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИмяПоляОтбора");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ПравоеЗначение = ЗначениеПоляОтбора;
//очистка отбора (подставьте свои элементы)
&НаКлиенте
Процедура ОчиститьОтбор(Команда)
этаформа .Список.Отбор.Элементы.Очистить();
КонецПроцедуры
Обычные формы Использовать его очень просто:
Код 1C v 8.х
ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . Установить( ЗначениеОтбора) ;
ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . Установить( , Ложь ) ;
или 2-й вариант:
Код 1C v 8.х ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . Использование = Истина ;
ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . ВидСравнения = ВидСравнения. Равно;
ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . Значение = ЗначениеОтбора;
А теперь конкретные примеры:
Код 1C v 8.х
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. Установить( 100 ) ;
- - - - - - - -
ЭлементыФормы. тпТовары. ОтборСтрок. Валюта. Установить( ВалютаУпр) ;
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. Установить( 200 ) ;
- - - - - - - -
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. Использование = Истина ;
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. ВидСравнения = ВидСравнения. БольшеИлиРавно;
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. Значение = 100 ;
- - - - - - - -
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. Использование = Истина ;
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. ВидСравнения = ВидСравнения. Интервал;
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. ЗначениеС = 100 ;
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. ЗначениеПо = 200 ;
- - - - - - - -
ЭлементыФормы. тпТовары. ОтборСтрок. Товар. Использование = Истина ;
ЭлементыФормы. тпТовары. ОтборСтрок. Товар. ВидСравнения = ВидСравнения. ВСписке;
ЭлементыФормы. тпТовары. ОтборСтрок. Товар. Значение. Добавить( Товар1 ) ;
ЭлементыФормы. тпТовары. ОтборСтрок. Товар. Значение. Добавить( Товар2 ) ;
Подчиненные табличные части в 8.х
С помощью свойства ОтборСтрок можно реализовать подчиненные (связанные) табличные части. При смене текущей строки в первой табличной части вторая табличная часть показывает только связанную информаци. Например, таким образом можно реализовать работу с комплектами: 1-я таб. часть - комплекты, вторая - состав комплекта.
Во второй табличной части должна быть колонка - идентификационный признак, связывающий ее с первой табличной частью. Таких колонок может быть несколько (составной ключ);
В событии ПриАктивизацииСтроки для первого табличного поля пишем:
Код 1C v 8.х ЭлементыФормы. СоставКомплекта. ОтборСтрок. Комплект. Установить( Комплект) ;
При добавлении новой строки во вторую табличную часть, нужно следить за тем, чтобы идентификационная колонка была установлена.
Обращаю ваше внимание, что при таком отборе не используются индексы и для больших табличных частей возможно замедление работы.
Еще раз напомню, что ОтборСтрок входит в расширение табличного поля табличной части, т.е. табличное поле должно быть связано с табличной частью. Если же оно связано с динамическим списком типа СправочникСписок, то здесь нужно использовать свойство Отбор для объекта типа СправочникСписок.
Если понадобилось перебрать строки, вошедшие в отбор, то это можно сделать, только заново перебрав все строки и проверив условие отбора для каждой строки. Перебрать строки табличного поля, которые сейчас на экране - невозможно.
Категория:
Работа с Формой (Диалог) и её элементами Как открыть форму внешней обработки Код 1C v 8.х &НаКлиентеПроцедура ОткрытьФормуВнешнейОбработки(Команда)ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтаФорма);НачатьПомещениеФайла(ОписаниеОповещения,, "", Ложь, ЭтаФорма.УникальныйИдентификатор);КонецПроцедуры&НаКлиентеПроцедура ПослеПомещенияФайла(Результат, АдресИлиРезультатВыбора, ВыбранноеИмяФайла, ДополнительныеПараметры) ЭкспортЕсли НЕ Результат ТогдаВозврат;КонецЕсли;ИмяОбработки = ПодключитьВнешнююОбработку(Новый Структура("Адрес", АдресИлиРезультатВыбора));ОткрытьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма.ИмяФормыВнешнейОбработки",,,Истина);КонецПроцедуры&НаСервереФункция ПодключитьВнешнююОбработку(АдресХранилища)Возврат ВнешниеОбработки.Подключить(АдресХранилища.Адрес);КонецФункции
Категория:
Обработки