Архив рубрики: 1C

Разработки на платформе 1С

После обновления 1С Бухгалтерии до 3.0.71.63, стала появляться ошибка «Ошибка выделения памяти»:

Лечение (один из методов должен помочь):

  1. Перезагрузка, сервера 1С предприятие и сервера MSSQL
  2. Установка 64битной версии платформы 1С
  3. Ограничение использования памяти MSSQL до реально установленных в сервер
  4. Обновить платформу

1C выбор из списка на управляемой форме

Задача: организовать на форме выбор из списка, с первоначальным заполнением из запроса

Решение:

1. Создаем на форме реквизит, с типом «Список значений» и обьектом — СправочникСсылка.Склады:

2. Создаем событие формы «При создании на сервере» и заполняем список:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	// Заполним по умолчанию часть складов, если таковые есть..
	сп=новый ТаблицаЗначений;
	сп.Колонки.Добавить("Склады");
	спстр=сп.Добавить();
	спстр.Склады=Справочники.Склады.НайтиПоНаименованию("Вологда Торговля");
	спстр=сп.Добавить();
	спстр.Склады=Справочники.Склады.НайтиПоНаименованию("Вологда Ремонт (Р)");
	
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |	Склады.Ссылка КАК Ссылка,
                   |	Склады.Представление КАК Представление
                   |ИЗ
                   |	Справочник.Склады КАК Склады
                   |ГДЕ
                   |	Склады.Ссылка В(&СписокСкладов)";
	Запрос.УстановитьПараметр("СписокСкладов", сп.ВыгрузитьКолонку("Склады"));	
    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл
        СписокСкладов.Добавить(Выборка.Ссылка,Выборка.Представление);
    КонецЦикла;	
КонецПроцедуры

Получаем результат вида:

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

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

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

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

 

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

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

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

1С сортировка структуры

Хотя в синтаксисе обьекта структуры в 1С нет функции сортировки, тем не менее иногда просто необходимо иметь остортированную структуру. Поможет следующая функция:

&НаСервере
Функция сортировкаструктуры(ОтчетСтруктура)
			//сортировка структуры
		ТЗ = Новый ТаблицаЗначений;
	    ТЗ.Колонки.Добавить("Ключ");
	    ТЗ.Колонки.Добавить("Значение");
	    Для каждого элемент из ОтчетСтруктура Цикл
	        новСтрока = ТЗ.Добавить();
	        новСтрока.Ключ = Элемент.Ключ;
	        новСтрока.Значение = Элемент.Значение;
	    КонецЦикла;
	    ТЗ.Сортировать("Значение Убыв");
	    ОтчетСтруктура.Очистить();
	    Для каждого строкаТЗ из ТЗ Цикл
	        ОтчетСтруктура.Вставить(строкаТЗ.Ключ,строкаТЗ.Значение);
	    КонецЦикла;		
		//

Возврат ОтчетСтруктура;
КонецФункции