Архив метки: 1с

1С: передача файла с клиента на сервер, управляемое приложение

Ситуация: пользователь на клиенте выбирает файл, и его нужно обработать. Удобнее всего это сделать на сервере, т.к. на клиенте многие функции и процедуры не доступны. Реализовать это возможно помещение данных во временное хранилище, а далее из него, при вызове серверной процедуры, «обратное» изьятие. Например реализовать это можно как-то вот так:

&НаКлиенте
Процедура ЗагрузитьSonex()
	
	БинарныйФайл = Новый ДвоичныеДанные(Объект.ИмяФайла);
	сообщить("-помещаем во временное хранилище");
	АдресВХ = ПоместитьВоВременноеХранилище(БинарныйФайл,ЭтаФорма.УникальныйИдентификатор);	
	ОбработатьНодХМЛНаСервере(АдресВХ,объект.ГруппаЗагрузки);
	
	сообщить("-ок");
	
КонецПроцедуры

&НаСервере
Процедура ОбработатьНодХМЛНаСервере(АдресВХ,владелец);
	сообщить(АдресВХ);
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВХ);
	
	тПуть = "c:\temp\pricesonix.xml"; //для примера...
	ДвоичныеДанные.Записать(тПуть);	
	
	ЧтениеХ=Новый ЧтениеXML;
	ЧтениеХ.ОткрытьФайл(тПуть);	
КонецПроцедуры

 

Аналог case..swith в 1С

Вот такую конструкцию в 1С можно считать аналогом  операторов case…swith в других языках:

если ст.Параметр="Изготовитель" тогда
										обсп.Брэнд=ст.Значение;
									ИначеЕсли ст.Параметр="Страна" тогда
										обсп.Страна=ст.Значение;
									иначе	
										нс=обсп.Характеристики.Добавить();
										нс.Наименование=ст.Параметр;
										нс.Значение=ст.Значение;									
									конецесли;

Именованный массив в 1С

Ну собственно его нет в 1с. Есть некий «аналог», понятие «Структура».

Инициализируется например вот так:

ОтчетСтруктура=Новый Структура;
ОтчетСтруктура.Вставить("НаТранспорте",0);

Причем ключ не должен содержать пробелов и цифр в начале.

К проинициализированной структуре можно обращаться по ключу например так:

ОтчетСтруктура["НаТранспорте"]=ОтчетСтруктура["НаТранспорте"]+1;

Проверка наличия ключа осуществляется так:

если ОтчетСтруктура.Свойство("ключ") тогда
конецесли

Но я в своей практике, немножко по другому поступил, когда мне была не известна заведомо структура:

&НаСервере
Функция ЗаменитьПробелы(_стр)
	стр=СтрЗаменить(_стр, " ", "_");
Возврат стр;
КонецФункции

// цикл 1, заполняем структуру

		ВыборкаДетальныеЗаписи = Результат.Выбрать();
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл				
			если ВыборкаДетальныеЗаписи.Другое<>"" тогда				
				ОтчетСтруктура.Вставить(ЗаменитьПробелы(ВыборкаДетальныеЗаписи.Другое),0);
			конецесли;	
конеццикла;		


// цикл 2, приращиваем счетчики
		ВыборкаДетальныеЗаписи = Результат.Выбрать();			
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
если ВыборкаДетальныеЗаписи.Другое<>"" тогда							
					ОтчетСтруктура[ЗаменитьПробелы(ВыборкаДетальныеЗаписи.Другое)]=ОтчетСтруктура[ЗаменитьПробелы(ВыборкаДетальныеЗаписи.Другое)]+1;
			конецесли;								
			
		конеццикла;

 

Изменяем функционал документа 1С без изменения конфигурации (Расширением)

В очередной раз понадобилась доработка одного из документов 1С, а именно, чтобы при проведении документа, выводилось некое модальное окно, с вопросами менеджеру который этот документ проводит. А так как я противник какого либо изменения стандартной конфигурации (кушано достаточно с обновлениями) не по делу, то решил попробовать вариант с «расширениями».

Итак, сначала создаем регистр сведений, куда собственно будем заносить информацию которую будет заполнять менеджер. Привязка — к документу реализации:

Далее создадим расширение, через меню Конфигруация — Расширения конфигурации:

Переносим форму документа «Реализация товаров» в раширения:

В появившемся редакторе расширений, видим форму, с не заполненными действиями в командах формы. Если мы попробуем создать действие, выведется вопрос:

, когда вызывать данное действие, ДО, ПОСЛЕ ил ВМЕСТО. В моем случае, я выбрал ДО, и вписал в обработчик следующий код:

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

При нажатии кнопки «Провести» теперь выскакивает окно:

Ну и соответственно пишет в регистр информацию для размышления:

1С: «Ограничение прав доступа» при удаление объекта справочника

Долго сегодня пришлось искать, почему пользователь с обычными правами не может удалить запись из справочника, который никак и ни с чем не связан. Наконец догадался глянуть в журнал регистрации:

После того как дал права на этот регистр, всё заработало…