Асинхронная запись и чтение файла без использования модальных методов и временных файлов

Публикация № 812886 10.04.18

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

Файлы; работа с файлами; запись файла; передача файлов; потоки; ПотокВПамяти; асинхронные методы; помещение файла на сервер; передача файла с

В статье рассмотрено решение задачи формирования и записи файла на основе данных информационной базы. Формирование происходит на стороне сервера с помощью механизма потоков. Используются асинхронные методы передачи файлов между клиентом и сервером. Также рассмотрено решение обратной задачи - чтение файла и запись его данных в информационную базу. Статья ориентирована прежде всего на новичков, также приведенный код может использоваться в качестве шаблона.

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

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

	Диалог = новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	Если Диалог.Выбрать() Тогда   
		Запись = новый ЗаписьXML;
		Запись.ОткрытьФайл(Диалог.ПолноеИмяФайла);
		СериализаторXDTO.ЗаписатьXML(Запись, Ссылка.ПолучитьОбъект());
		Запись.Закрыть();	
	КонецЕсли; 

Здесь Ссылка - ссылка на элемент справочника, данные которого записываем в файл. СериализаторXDTO - специальный объект платформы, с помощью которого объект ИБ трансформируется в файл формата XML.

Все изменилось с появлением тонкого клиента и управляемых форм. Во-первых, на клиенте стала недоступна работа с объектами ИБ, а сервер, в свою очередь, ничего не знает о действиях пользователя, а во-вторых, использование веб-клиента породило необходимость отказаться от модальности и использовать асинхронные вызовы многих методов. Таким образом, решение приведенной выше задачи стало достаточно непростым.

Общая схема решения:

Рассмотрим каждый шаг более подробно.

1 шаг. Пользователь выбирает данные для файла (в данном случае - ссылку справочника) и хочет выбрать файл для записи. Использовать синхронные методы вроде Диалог.Выбрать() теперь стало нельзя. Вместо синхронных методов появились их асинхронные аналоги, в данном случае Диалог.Показать(Оповещение).

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

Ключевой особенностью асинхронных методов является то, что результат их работы мы можем получить не сразу после вызова метода в том же участке кода, а с помощью отдельного метода (callback, метод обратного вызова), который будет вызван платформой после завершения асинхронного метода. В данном случае методом обратного вызова является ОповещениеПослеВыбораФайлаДляЗаписи, описание которого указывается в параметрах открытия диалога. Он будет вызван автоматически после закрытия диалога выбора файла вне зависимости от результата выбора.

2а шаг.

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

После закрытия диалога выбора файла, и проверки, что пользователь действительно не отказался от выбора (в первом параметре метода будет находится массив выбранных файлов), мы можем продолжить процесс. И здесь программиста подстерегает возможность совершить трудноуловимую ошибку. Дело в том, что в веб-клиенте во время показа пользователю диалога выбора файла выполнение кода не останавливается! Существует вероятность, что за время между первым и вторым шагом изменятся данные, которые пользователь выбрал на первом шаге (в нашем примере - Ссылка). Чтобы этого избежать, данные надо где-то сохранить, а еще лучше - передать в качестве параметра при открытии диалога, так, чтобы этот параметр попал на второй шаг без изменений. В нашем примере это реализовано указанием ссылки в качестве третьего параметра при создании оповещения на первом шаге. Эта же ссылка будет получена вторым параметром метода ОповещениеПослеВыбораФайлаДляЗаписи. Итак мы имеем все необходимые данные (имя файла и ссылку) для записи. Напомню: пока все то, что происходит, происходит на стороне клиента. Но на стороне клиента недоступны данные ИБ, поэтому нам необходимо передать управление на сервер, вызвав серверный метод и передав в него ссылку.

3 шаг

На этом шаге нам необходимо сформировать содержимое файла и подготовить его для передачи на сторону клиента, поместив в специальную область - временное хранилище. Временное хранилище располагается на сервере, доступ к нему осуществляется с помощью специального адреса. Временное хранилище "живет" непродолжительное время, в нашем случае - пока живет форма, для этого при создании хранилища указывается идентификатор формы. В хранилище будем помещать ДвоичныеДанные - содержимое нашего будущего файла. Как правило, использование двоичных данных связано с формированием промежуточного временного файла, но в нашем случае мы можем обойтись без этого. В последних версиях платформы появились новые объекты - Поток, ПотокВПамяти, которые позволят нам обойтись без дополнительных файлов.

&НаСервереБезКонтекста 
Функция ФормированиеФайлаНаСервере(Ссылка, ИдентификаторФормы)	
	Запись = новый ЗаписьXML;
	Поток = новый ПотокВПамяти;
	Запись.ОткрытьПоток(Поток);
	СериализаторXDTO.ЗаписатьXML(Запись, Ссылка.ПолучитьОбъект());
	Запись.Закрыть();	
	ДвоичныеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
	АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы);	
	Возврат АдресХранилища;
КонецФункции 

В конечном итоге на этом шаге мы получим адрес хранилища, в котором находится содержимое нашего файла.

2б шаг

Вызов серверной функции на втором шаге был обычным, не асинхронным, поэтому после выполнения этого метода мы продолжаем выполнение второго шага. Итак, имеем: имя выбранного пользователем файла и адрес временного хранилища на сервере, где хранится его содержимое. Необходимо вызвать метод, который получит содержимое с сервера и запишет в файл на клиенте. Этот метод - НачатьПолучениеФайлов. Не буду останавливаться на подробном описании его параметров, скажу лишь, что в него передается имя файла и адрес временного хранилища. Метод НачатьПолучениеФайлов является асинхронным, окончание его работы запустит метод обратного вызова ОповещениеПослеПолученияФайла, в котором мы узнаем результат. Разумеется, описание метода ОповещениеПослеПолученияФайла мы должны указать при вызове НачатьПолучениеФайлов.

4 шаг

Этот шаг - завершающий. На этом шаге мы можем проанализировать результат получения файла.

&НаКлиенте
Процедура ОповещениеПослеПолученияФайла(ПолученныеФайлы, ДопПараметры)Экспорт
	Если ТипЗнч(ПолученныеФайлы) = Тип("Массив")	Тогда
		Сообщить("Файл " + ПолученныеФайлы[0].Имя + " записан"); 
	КонецЕсли; 	
КонецПроцедуры // 

 

Аналогичным образом можно решить обратную задачу: загрузить данные из файла в информационную базу

1 шаг. Открываем асинхронный диалог выбора файла, передав в него все необходимые клиентские данные (в нашем случае - Ссылка)

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

2 шаг. Если пользователь выбрал файл, то инициируем асинхронную передачу файла на сервер с помощью НачатьПомещениеФайлов. Платформа автоматически создаст на сервере временное хранилище и поместит в него содержимое файла.

&НаКлиенте
Процедура ОповещениеПослеВыбораФайлаДляЧтения(ВыбранныеФайлы, ДопПараметры)Экспорт
	Если ТипЗнч(ВыбранныеФайлы) = Тип("Массив")	Тогда
		ОписаниеФайла = новый ОписаниеПередаваемогоФайла();
		ОписаниеФайла.Имя = ВыбранныеФайлы[0];
		ПомещаемыеФайлы = новый Массив;
		ПомещаемыеФайлы.Добавить(ОписаниеФайла);
		Оповещение = новый ОписаниеОповещения("ОповещениеПомещениеФайла", ЭтотОбъект, ДопПараметры);		
		НачатьПомещениеФайлов(Оповещение, ПомещаемыеФайлы,, Ложь, ЭтаФорма.УникальныйИдентификатор);
	КонецЕсли;
КонецПроцедуры 

3а шаг. После завершения операции помещения файла платформа вызовет клиентскую процедуру, в которую будут переданы данные о помещенных на сервер файлах. Нас будет интересовать адрес хранилища ПомещенныеФайлы[0].Хранение, в которое записано содержимое файла. Для обработки этого содержимого вызовем серверную функцию, передав в нее этот адрес и данные, выбранные клиентом на первом шаге. Еще раз подчеркну, что эти клиентские данные (в нашем случае - Ссылка) передаются по цепочке оповещений, что гарантирует их неизменность во время асинхронного выполнения нескольких методов.

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

4 шаг. Получив на сервере адрес временного хранилища, прочитаем его содержимое в ДвоичныеДанные. Так же, как и в предыдущем примере, чтобы не создавать дополнительных временных файлов, воспользуемся потоками. С помощью СериализаторXDTO преобразуем данные (они представляют собой XML текст) в объект для дальнейшей обработки. 

&НаСервереБезКонтекста 
Функция ОбработкаПереданногоФайлаНаСервере(Знач АдресХранилища, Знач Ссылка)
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);	
	Поток = ДвоичныеДанные.ОткрытьПотокДляЧтения();	
	Чтение = новый ЧтениеXML;
	Чтение.ОткрытьПоток(Поток);
	Объект = СериализаторXDTO.ПрочитатьXML(Чтение);
	Если ЗначениеЗаполнено(Ссылка)  Тогда   
		ОбъектСсылки = Ссылка.ПолучитьОбъект();
		ЗаполнитьЗначенияСвойств(ОбъектСсылки, Объект, "Наименование");  //Заполняем нужные реквизиты
		ОбъектСсылки.Записать();  		
	Иначе
		Объект.Записать();	
		Ссылка = Объект.Ссылка;
	КонецЕсли; 	
	Чтение.Закрыть();	
	Поток.Закрыть();	
	Возврат Ссылка;
КонецФункции 

3б шаг. После завершения серверной функции, управление передается обратно в клиентский метод (вызов был не асинхронный), где мы можем выполнить все оставшиеся действия (в нашем случае - обновить интерфейс после загрузки данных)

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

Работа с файлами в тонком клиенте не ограничивается вышеприведенными примерами. Для загрузки файлов (например картинок) непосредственно в информационную базу рекомендую публикации //infostart.ru/public/195003///infostart.ru/public/396459/

Ниже прилагается внешняя обработка с примерами из статьи.

 

Скачать файлы

Наименование Файл Версия Размер
Примеры работы с файлами

.epf 9,75Kb
26
.epf 9,75Kb 26 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. palsergeich 10.04.18 11:37 Сейчас в теме
Есть один маленький и очень тонкий ньюанс:
При использовании временного хранилища с адресом УИД формы, если надо передать больше чем 1 файл, точнее передать потом еще раз передать, то в дело вступает механизм кеширования и результат будет следующий (не знаю починили ли в последних релизах):
Поместили Адрес = ПоместитьВоВременноеХранилище(Файл1,ЭтаФорма.УникальныйИдентификатор)
Метод ПолучитьИзВременногоХранилища(Адрес)
На сервере - Файл 1
На клиенте - Файл 1
следом Адрес = ПоместитьВоВременноеХранилище(Файл2,ЭтаФорма.УникальныйИдентификатор) Форма та же, без переоткрытия
Метод ПолучитьИзВременногоХранилища(Адрес)
На сервере Файл 2
На клиенте Файл 1
При этом где помещаем - клиент или сервер - не важно.
2. Alxby 939 10.04.18 13:38 Сейчас в теме
(1) На платформе 8.3.10.2699 провел несколько экспериментов:
&НаКлиенте   
Процедура Команда1(Команда)
	//1 эксперимент
	Адрес = ПоместитьВоВременноеХранилище("А", ЭтаФорма.УникальныйИдентификатор);
	Сообщить(ПолучитьИзВременногоХранилища(Адрес));
	ПоместитьВоВременноеХранилище("Б", Адрес);
	Сообщить(ПолучитьИзВременногоХранилища(Адрес));

	//2 эксперимент
	Адрес1 = ПоместитьВоВременноеХранилище("А", ЭтаФорма.УникальныйИдентификатор);
	Сообщить(ПолучитьИзВременногоХранилища(Адрес1));
	Адрес2 = ПоместитьВоВременноеХранилище("Б", ЭтаФорма.УникальныйИдентификатор);
	Сообщить(ПолучитьИзВременногоХранилища(Адрес2));
	
	//3 эксперимент
	Адрес = ПоместитьВоВременноеХранилище("А", ЭтаФорма.УникальныйИдентификатор);
	ПолучитьНаСервере(Адрес);
	ПоместитьВоВременноеХранилище("Б", Адрес);
	ПолучитьНаСервере(Адрес);

	//4 эксперимент
	Адрес1 = ПоместитьВоВременноеХранилище("А", ЭтаФорма.УникальныйИдентификатор);
	ПолучитьНаСервере(Адрес1);
	Адрес2 = ПоместитьВоВременноеХранилище("Б", ЭтаФорма.УникальныйИдентификатор);
	ПолучитьНаСервере(Адрес2);
	
КонецПроцедуры

&НаСервереБезКонтекста  
Процедура ПолучитьНаСервере(Адрес)
	Сообщить(ПолучитьИзВременногоХранилища(Адрес));
КонецПроцедуры
Показать


Результат получился вполне ожидаемый, т.е. правильный. Возможно в предыдущих релизах платформы действительно была ошибка, но сейчас она исправлена.
3. palsergeich 10.04.18 16:01 Сейчас в теме
(2)
УникальныйИдентификатор);
ПолучитьНаСервере(Адрес1);
Адрес2 = ПоместитьВоВременноеХранилище("Б", ЭтаФорма.УникальныйИдентификатор);
ПолучитьНаСервере(Адрес2);

Там суть моего посыла была в другом, но по факту да, проверил на текущих релизах, при получении из временного хранилища по адресу формы больше бага нет.
Но я уже привык не доверять этому механизму, ибо в свое время на этом очень сильно обжегся (изменение по одному адресу во временном хранилище)
5. rusmil 255 11.04.18 03:56 Сейчас в теме
(3)
изменение по одному адресу во временном хранилище
и как выкрутились с адресом во временном хранилище?
21. пользователь 15.04.18 05:21
Сообщение было скрыто модератором.
...
24. пользователь 17.05.18 05:55
Сообщение было скрыто модератором.
...
4. LexSeIch 209 11.04.18 03:25 Сейчас в теме
Интересная и полезная статья, особенно для тех, кто под "нажимом непреодолимой силы" вынужден менять привычные платформы и конфигурации... При переписывании обработок на управляемые формы вопрос корректной работы с файлами обязательно возникает...
LelikOFF; +1 Ответить
6. logos 205 11.04.18 10:51 Сейчас в теме
Давайте я немного наброшу на вентилятор. А как будет работать Ваша схема с файлами больше 4 Гб?
7. Alxby 939 11.04.18 11:45 Сейчас в теме
(6)
Я бы слегка перефразировал вопрос и разбил его на несколько:
1) Как работают с большими файлами платформенные механизмы передачи файлов между клиентом и сервером? Какие есть ограничения для тонкого и веб-клиента? Есть ли зависимость от браузера?
2) Как работают с большими объемами данных механизмы потоков?
Впрочем, мне кажется, что ответы на эти вопросы имеют скорее теоретическое значение, так как если система спроектирована таким образом, что передача больших файлов указанными средствами платформы - штатная функция системы, то это недосмотр проектировщика или архитектора. Все же подобные задачи лучше решать другими средствами, к примеру - FTP. А для "защиты от дурака" достаточно встроить проверку размера файла перед передачей. Да, конечно же не забываем, что на клиенте для этого необходимо использовать асинхронный НачатьПолучениеРазмера
8. logos 205 11.04.18 13:56 Сейчас в теме
(7)
1) Какая разница как они работают "под капотом"? Во временное хранилище нельзя положить больше 2^32 байт. Просто нельзя.
Если Вам сильно интересно, как, возьмите большой файл и посмотрите на дисковую активность в темпах, обещаю понравится.
2) А вот механизм потоков работает просто отлично, он может и небольшими порциями работать через ПотокВПамяти.
9. Alxby 939 11.04.18 14:20 Сейчас в теме
(8)
Ну вот вы и сами ответили на свой вопрос, попутно подтвердив мои слова, о том, что при проектировании системы, работающей с большими файлами, нельзя использовать механизмы передачи файлов через временное хранилище. Для этого необходимо использовать другие технологии.
10. androgin 12.04.18 01:01 Сейчас в теме
Я конечно не хочу казаться умником, но чем вас не устраивает метод НачатьПомещениеФайла / НачатьПомещениеФайлов ? У вас куча процедур расписана (на мой взгляд совершенно лишних)

я выбираю файлы таким образом:

&НаКлиенте
Процедура ВыбратьФайл(Команда)
    
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогавыборафайла.Открытие);
    Диалог.Заголовок = "Выберите файл...";
    Диалог.Фильтр = "Текстовый документ MS Office (*.doc;*.docx)|*.doc;*.docx";
    
    Оповещение = Новый ОписаниеОповещения("ЗакончитьПомещениеФайла", ЭтотОбъект);
    НачатьПомещениеФайлов(Оповещение, , Диалог, Истина, ЭтаФорма.УникальныйИдентификатор);
    
КонецПроцедуры 

&НаКлиенте
Процедура ЗакончитьПомещениеФайла(ПомещенныеФайлы, ДопПараметры) Экспорт

    Если ПомещенныеФайлы = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Хранение = ПомещенныеФайлы[0].Хранение;

КонецПроцедуры
Показать
11. Alxby 939 12.04.18 09:35 Сейчас в теме
(10) Основное отличие моего варианта от Вашего - возможность обработать выбранный пользователем файл до передачи на сервер или получения с сервера. Например: сообщить пользователю "Вы не можете загрузить на сервер файл 'Игра престолов (все сезоны).mkv'" или "Вы не можете перезаписать файл 'устав проекта.docx', выберите другой". Кроме того, в Вашем варианте все заканчивается после получения адреса загруженного файла, в моем - дополнительно описана процедура обработки содержимого с помощью механизма потоков, поэтому и методов в примере больше. Но конечно же, Ваш вариант проще, и может быть вполне применим в большинстве случаев.
12. androgin 12.04.18 13:48 Сейчас в теме
(11) при превышении объема файла над размером памяти - система сама выдаст ошибку. Вам останется лишь вывести ее в удобочитаемом виде.
14. Alxby 939 12.04.18 15:04 Сейчас в теме
(12)

12. Виктор Назаров (androgin) 12.04.18 13:48
(11) при превышении объема файла над размером памяти - система сама выдаст ошибку. Вам останется лишь вывести ее в удобочитаемом виде

А если нам надо ограничить размер файла своим значением, например 10Мб, исходя из своих целей? А если надо наложить условие: можно загружать все файлы, кроме определенных типов? В этих случаях как раз и надо проверить, что выбрал пользователь. Причем сделать это лучше ДО остальных действий по формированию и передаче файла.
13. androgin 12.04.18 13:52 Сейчас в теме
(11) еще можно создать диалог - выбрать и инициализировать файл и получить его размер. Если размер устраивает - передать Диалог дальше в метод получения файла.
15. Alxby 939 12.04.18 15:12 Сейчас в теме
(13) Именно такая схема, с отдельным диалогом, и приведена в статье. Я не стал вставлять дополнительные проверки, чтобы не загромождать пример. И, раз уж мы получили имя файла, его и надо передавать в метод передачи файла, а не Диалог.
16. androgin 13.04.18 20:07 Сейчас в теме
(15) ну вам виднее. Но я бы так не делал)
17. androgin 13.04.18 20:16 Сейчас в теме
(15) вы в своем коде все равно тащите все на сервер - в чем смысл?
вам в любом случае для получения размера сначала придется инициализировать файл, а до этого выбрать его диалогом. Все не удовлетворяющие файлы можно удалить из диалога и передать уже этот диалог в получение файлов.
Использование диалога позволяет применять фильтр!
НЕ?
18. Alxby 939 13.04.18 21:04 Сейчас в теме
(17)
Мне кажется в нашем споре каждый имеет в виду что-то свое. Я описываю решение следующей задачи: 1) дать возможность пользователю выбрать файл, 2) проверить, что он выбрал (проверки могут быть самые разные: размер, расширение, каталог), 3) и только если файл удовлетворяет заданным критериям, отправить его на сервер для дальнейшей обработки. В моем примере выбор файла - асинхронный вызов диалога, по его завершению мы получим имя файла, который после всех проверок будем использовать при передачи на сервер. Зачем при передаче на сервер еще раз указывать диалог? Чтобы пользователь два раза выбирал файл? Да, конечно же, можно использовать интерактивный режим вызова метода НачатьПомещениеФайлов без предварительного вызова диалога. Но при этом Вам просто негде будет вставить свои проверки. Единственное что Вы можете - это указать маску допустимых имен файла. Но и в этом случае Вы не сможете задать условие вида: 'выбрать все файлы, кроме *.exe, *.vbs'. Что касается задачи получения файла с сервера, там ситуация немного иная. Если, как в моем примере, файл не хранится в базе, а формируется каким либо образом - это формирование может занять какое-то время. Тогда, с точки зрения юзабилити, лучше дать возможность выбрать файл для записи, удостовериться что он его выбрал, и выбрал то, что надо, а только потом заниматься длительным формированием файла. При использовании Вашего подхода (т.е. использования диалога выбора при вызове метода передачи) мы сначала затратим время на формирование и сохранение файла во временном хранилище, а только потом будем спрашивать у пользователя куда он хочет его сохранить, и не передумал ли он, "потому что забыл дома флешку".
19. androgin 13.04.18 21:30 Сейчас в теме
(18) так вы сами же описываете то, что я и говорю: выбор файла и проверку его ( ваш второй пункт очень странный - расширение и каталог в диалоге выбирается! а размер можно получить после выбора файла или настроить вид диалога - показать там размер).
Это топтание на месте.
Мне вообще непонятно: зачем использовать сервер, если все на клиенте делается: и выбор файла и получение его размера. Только для того, чтобы поиграться с потоком?)))
Можно использовать и не_интерактивный метод выбора (признак такой имеется в методе) и это никак не мешает вставить свои проверки. Фильтр "выбрать все, кроме ххх, ххх" - ну это ж дурость! Создайте необходимые фильтры заранее и пусть пользователь сам выбирает, что ему нужно.
Когда вы тащите хранилище на сервер - вы уже получаете файл!
Вам вообще знакомы клиент-серверные работы с файлами?
Ваш метод, мало того, что получает файл и помещает в хранилище, так вы потом его еще на сервер тащите и там получаете из хранилища!!
Что за абсурд?
Все ваши манипуляции вполне себе на клиенте работают!
20. Alxby 939 13.04.18 22:19 Сейчас в теме
(19)
Несмотря на вашу горячность, я надеюсь, что Вы не троллите, а просто невнимательно читаете мои сообщения. Хорошо, давайте возьмем Ваш пример из (10). Добавьте в него возможность загружать любые файлы, кроме потенциально опасных, например *.exe. Нет, это не дурость, подобный функционал есть в системах, построенных на базе БСП, там есть что-то вроде "Запретить загрузку файлов с расширениями". В случае попытки выбрать такой файл добавьте сообщение об этом пользователю. Если у Вас найдется способ сделать это с помощью интерактивного режима метода НачатьПомещениеФайлов без дополнительного вызова диалога, поделитесь. Далее: в моем примере при выборе файла не используется сервер, и конечно же для получения размера файла сервер тоже не нужен. Безусловно, есть задачи, которые можно решить только на клиенте. Но я специально выбрал такую задачу, для которой нужен сервер. Я это подчеркнул в начале статьи. Вы и сами сможете привести примеры таких задач. Вы же согласитесь, что с объектами базы данных можно работать только на сервере? Вот и в моем примере используется запись и чтение объектов ИБ. Может Вы имеете в виду иное - хранение файла целиком в базе данных, в каком-либо реквизите? Это немного другая задача.
22. androgin 16.04.18 00:30 Сейчас в теме
(20) "кроме потенциально опасных" - вы вообще читали, что я писал?
вы программист - вам легко это проверить после выбора! Даже если вы не укажете опасное расширение - вы его можете проверить ПОСЛЕ выбора и вывести пользователю сообщение, что "ай-я-яй, такие файлы нельзя выбирать!" и удалить их из выбора. Сложно? НЕТ!
Далее: НачатьПомещениеФайлов с диалогом как раз и контролирует расширения, о чем я вам выше и писал!
"специально выбрал такую задачу, для которой нужен сервер" - именно это и является узким местом! вы тащите все на сервер! а это и есть "очень плохо".
Я же настаиваю, что все операции с проверками делать нужно на клиенте!
23. Alxby 939 16.04.18 10:04 Сейчас в теме
(22)
Вы все-таки невнимательно прочитали статью и мои комментарии. Поясню еще раз: на первом шаге мы вызываем диалог выбора файла. При вызове можно указать (как Вы верно говорите) свойства диалога: фильтр, начальный каталог, etc. Результат работы диалога обрабатывается в ОповещениеПослеВыбораФайлаДляЧтения . Здесь мы можем выполнить любые проверки - проверить расширение файла, путь к файлу и так далее. Я не стал загромождать пример, поэтому проверяю только то, что пользователь не отказался от выбора. Если вы посмотрите внимательно, то увидите директиву &НаКлиенте. Это означает, что эти операции будут выполнены на клиенте. С чего Вы взяли, что я делаю это на сервере? Если посмотрите внимательно, то увидите, что у меня ни в одной серверной процедуре нет проверок.
Вы разобрались что происходит в моих серверных методах? А там я делаю то, что можно сделать только на сервере: работаю с данными информационной базы. Для решения поставленной в начале статьи задачи, мне нужно содержимое файла. Вполне логично, что я его получаю из хранилища. Что значат Ваши слова:
"Ваш метод, мало того, что получает файл и помещает в хранилище, так вы потом его еще на сервер тащите и там получаете из хранилища!!
Что за абсурд?
Все ваши манипуляции вполне себе на клиенте работают! "? Как можно после помещения файла во временное хранилище, отдельно его "тащить" на сервер? Какая строчка моего кода заставила Вас так подумать? Как "манипуляции" по созданию объекта и записи его в ИБ "вполне себе на клиенте работают"? Или Вы считаете что таких задач не бывает? Что любые действия с содержимым файлов можно делать на клиенте, потому что на сервере это делать "есть "очень плохо"?
Давайте, чтобы не быть голословным, напишите свой вариант решения рассмотренной в статье задачи и покажите в чем он быстрее / лучше / пригодней для дальнейшей адаптации. Потому что иначе от меня ускользает смысл того, что Вы хотите доказать.
25. Xershi 991 09.06.19 18:38 Сейчас в теме
Уже не нужно использовать "СериализаторXDTO"
Наконец написал свою публикацию с блекджеком и ш...... Работа с файлами (обычная и управляемая форма) все структурировано и используется метод "ЧтениеДанных"!
26. пользователь 24.03.21 10:57
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

См. также

Сколько стоит слово Знач в клиент-серверных вызовах?

Механизмы платформы 1С HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Небольшое исследование влияния ключевого слова Знач в параметрах функций на производительность клиент-серверных вызовов.

1 стартмани

18.12.2022    1383    user1373370    2    

15

Гонка конфигураторов с помощью экзекутора

Инструментарий разработчика DevOps и автоматизация разработки Механизмы платформы 1С Платформа 1С v8.3 Абонемент ($m)

Выгружать конфигурацию в файлы в последнее время стало супер модно. Контроль версий, Git, CI/CD и вот это вот все. Исходники как тексты сегодня нужны всем. Но возникают вопросы: а каким методом лучше и быстрее выгружать конфигурацию в файлы, а какая версия платформы справляется с этой задачей оперативнее? Моя статья постарается ответить на эти вопросы. Как говорится, заставим попотеть ваши конфигураторы. С помощью 1С Исполнителя 2.0 мы выгрузим конфигурацию ЗУП, используя платформу пяти версий, от 8.3.18 до 8.3.22.

1 стартмани

16.11.2022    3267    infosoft-v    40    

44

Как передать Таблицу Значений в Динамический Список?

Механизмы платформы 1С Универсальные функции Платформа 1С v8.3 Абонемент ($m)

До версии 8.3.9 ответ однозначен - никак. Потом были добавлены временные таблицы для динамических списков, но официальный ответ остался неизменным - никак. Ну а если очень надо?

1 стартмани

17.10.2022    3142    Dementor    9    

20

Перечень множественных значений в ячейке динамического списка. Как стало и как было

Механизмы платформы 1С Платформа 1С v8.3 План видов характеристик Абонемент ($m)

В платформе версии 8.3.21 наконец-то появилась возможность указать, что характеристика может содержать более одного значения, и правильно отобразить этот перечень в динамическом списке. Настройка нового механизма, а также альтернативы, используемые ранее, описаны в статье.

1 стартмани

20.09.2022    2888    Alxby    9    

45

Что не так с таблицами формы?

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Почему при редактирования строки таблицы нельзя отказаться от изменений? Почему на верхнем уровне дерева можно ввести только один узел? Ответ на эти и другие вопросы один - потому что 1С :) Однако не все так плохо! Возможностей кастомизации в платформе 1С вполне достаточно, чтобы улучшить работу с этим элементом и снять некоторые ограничения.

1 стартмани

19.09.2022    1571    kalyaka    3    

22

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Программная работа с типовыми формами истории данных

Механизмы платформы 1С Платформа 1С v8.3 Абонемент ($m)

Попалась по работе интересная задачка - включить для регистра сведений историю изменений и сделать собственные кнопки открытия стандартных форм истории. Информации на эту тему особо не нашлось, поэтому решил зафиксировать этот кусочек в виде небольшой статьи.

1 стартмани

07.07.2022    1188    zeltyr    5    

19

Точка останова с условием. Приемы и хитрости использования

Механизмы платформы 1С Платформа 1С v8.3 Абонемент ($m)

“Точка останова с условием“ - применима в самых разнообразных ситуациях, и грамотное её применение экономит много времени разработчика 1С.

1 стартмани

10.06.2022    4474    Onwardv    8    

58

Использование HTML Редактора whizzywig в 1С 8.2 и 1С 8.3 платформах

Механизмы платформы 1С Платформа 1С v8.3 Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

В статье будут разобраны способы использования визуального HTML Редактора whizzywig в 1С 8.2 и 1С 8.3, который существенно меньше по размерам, чем TinyMCE, но при этом обладает большими возможностями. Показано достоинство этого редактора. Приведены обработки, которые работают как на компьютерной платформе, так и пример реализации обработки, которая предназначена для мобильной платформы. Решение испытывалось на платформах 1С 8.2.12 и 8.3.20, и мобильном клиенте 8.3.19.59.

2 стартмани

12.04.2022    965    user1206119    2    

3

Использование HTML Редактора NicEdit в 1С 8.2 и 1С 8.3 платформах

Механизмы платформы 1С Платформа 1С v8.3 Мобильная платформа Платформа 1C v8.2 Абонемент ($m)

В статье будут разобраны способы использования визуального HTML Редактора NicEdit в 1С 8.2 и 1С 8.3, который существенно меньше по размерам, чем TinyMCE. Показано достоинство этого редактора. Приведены обработки, которые работают как на компьютерной платформе, так и пример реализации обработки, которая предназначена для мобильной платформы. Решение испытывалось на платформах 1С 8.2.12 и 8.3.20, и мобильном клиенте 8.3.19.59.

2 стартмани

11.04.2022    1390    user1206119    7    

5

Семеро одного не ждут? Асинхронное исследование асинхронности

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Все уже, наверное, знают о появлении в новых версиях платформы асинхронных функций и конструкций Асинх/Ждать. Многие, возможно, уже их используют. Но что будет, если создать свои асинхронные функции, запустить и не дожидаться окончания их выполнения? Неужели можно запустить несколько процессов параллельно?

1 стартмани

08.06.2021    9503    Alxby    55    

58

1СПАРК РИСКИ. Сервис оценки благонадежности контрагентов. Промо

СПАРК помогает предотвратить мошенничество со стороны компаний и предпринимателей, благодаря актуальным сведениям о компаниях и системе выявления факторов риска.Сервис позволяет управлять налоговыми рисками и комплексно оценивать благонадежность контрагентов.

Загрузка, скачивание, удаление файлов с помощью НачатьПомещениеФайлаНаСервер() и НачатьПолучениеФайлаССервера()

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

В платформе 8.3.15 появились новые методы НачатьПомещениеФайлаНаСервер() и НачатьПолучениеФайлаССервера(). В данной статье рассмотрено готовое решение проверенное и прекрасно работающее на тонком и веб-клиенте.

1 стартмани

25.07.2020    24404    Flashill    16    

54

Отправка уведомлений с помощью командной строки, Оповещения с сервера на клиент с помощью командной строки

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Отправка уведомлений с помощью команды командной строки msg. Оповестить пользователей из серверного модуля или регламентного задания, с помощью командной строки msg.

1 стартмани

05.03.2020    10327    user5300    3    

42

Удаление записи из табличной части в режиме без использования модальности

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Всем привет! Появилась необходимость в написании кода удаления записи из табличной части с обратной связью в режиме без использования модальности. Но как правильно сделать нигде не нашел. Предлагаю свой вариант на растерзание.

1 стартмани

01.03.2020    3277    vaganovsergey    2    

0

Пауза на платформе 1С, очень нативная и очень бережная к ресурсам

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Иногда необходимо установить паузу при выполнении программных алгоритмов. К сожалению, платформа 1С не имеет решения на уровне глобального контекста, поэтому приходится разработчику придумывать "костыли и велосипеды". Решения, которые "общеприняты": либо используют внешние библиотеки (VBS, WS, ping и пр.), либо нещадно используют ресурсы (бесконечный цикл и т.п.). Хочу предложить еще одно решение, основанное на механизме управляемых блокировок платформы 1С. Итак, приступим:

1 стартмани

25.11.2019    6937    Sibars    65    

11

Описание формата внутреннего представления данных 1С в контексте обмена данными

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Фирма 1С не рекомендует использовать внутреннее представление данных для любых целей, которые отличны от обмена с 1С:Предприятием 7.7. Но сама возможность заглянуть на "внутреннюю кухню" платформы с помощью функций ЗначениеВСтрокуВнутр(), ЗначениеВФайл(), ЗначениеИзСтрокиВнутр() и ЗначениеИзФайла(), дала возможность сообществу программистов 1С разработать новые приемы разработки и анализа. Так, именно на использовании внутреннего представления был построен алгоритм "быстрого массива", который позволяет практически мгновенно создать массив в памяти на основании строки с разделителями. С помощью разбора внутреннего представления можно "на лету" программным кодом выполнить анализ обычной формы и даже сделать редактор графической схемы. Во внутреннем формате сохраняют свои данные между сеансами различные популярные внешние обработки. А еще это возможность сделать быстрый обмен с внешними системами.

1 стартмани

06.09.2019    25236    Dementor    32    

220

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

"Убер на складе": динамический расчет маршрутов с учетом реальных расстояний

Учет ТМЦ Механизмы платформы 1С Платформа 1С v8.3 Управленческий учет Абонемент ($m)

Представляю методику и инструмент для динамического расчета маршрутов отбора на высоконагруженных складах для максимального повышения эффективности склада, ускорения проходимости и, как следствие, экономии денег. Это методика и обработка для интеграции в WMS решения. Тестировалось на 1С 8.3.14.1565.

3 стартмани

24.06.2019    23920    informa1555    25    

76

Безопасная работа с транзакциями во встроенном языке

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Разбираемся с опасностями использования транзакций во встроенном языке 1С. Познаем ошибку "В данной транзакции уже происходили ошибки". Учимся защищаться от них.

1 стартмани

25.03.2019    59506    tormozit    63    

277

Асинхронная работа с текстовыми файлами в 1С 8.3

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

В этой статье я рассмотрю основные моменты работы с текстовым файлом в 1С 8.3. (загрузка - выгрузка) в режиме отключенной модальности (асинхронно).

1 стартмани

28.02.2019    13309    signum2009    7    

12

Баг или фича? Неожиданное поведение платформы

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Рассмотрим несколько случаев неожиданного поведения платформы 1С, а также что с этим можно cделать.

18.02.2019    26925    Infostart    90    

185

Динамическое изменение формы: кнопочная форма выбора справочника

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Динамическое изменение формы на примере кнопочного выбора из справочника.

1 стартмани

18.10.2018    10048    RocKeR_13    14    

38

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Жизненный цикл управляемой формы. Шпаргалка разработчика

Механизмы платформы 1С Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Прочитав когда-то давно книжку "Разработка управляемых форм", составил для себя такую схемку-напоминалку для обращения в процессе разработки. С тех пор не раз выручала и избавляла от необходимости лезть в гуглы.

1 стартмани

29.06.2018    47614    stas_ganiev    26    

317

Обманчивая ошибка "Данные были изменены или удалены другим пользователем"

Механизмы платформы 1С Платформа 1С v8.3 Абонемент ($m)

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

1 стартмани

25.03.2018    40811    rinat_alp2    7    

8

Отборы (поиск) в табличной части либо таблице значений (управляемые формы)

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Абонемент ($m)

В управляемых формах для нас доступен мощный ресурс работы с динамическими списками посредством СКД - отборы, сортировки и далее. Но вот табличная часть (таблица значений) на управляемой форме не позволяет работать так гибко. Мы можем научить пользователей пользоваться комбинацией клавиш "Ctrl+F", но давайте немного упростим жизнь и позволим нашим пользователям настраивать отборы (осуществлять поиск) по табличной части прямо в нашем окне.

1 стартмани

22.03.2018    97359    Kim1C    25    

59

Динамические колонки в таблице значений из разного числа строк (как в отчёте)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Как всегда, статья больше адресована себе, чтобы в нужный момент быстро найти. Предыстория... Как-то передо мной была поставлена задача сделать обработку, в которой по пользователям нужно было вывести загрузку по их активным проектам в настоящий момент. Она требовалась для руководителя, который для менее загруженного пользователя назначал бы новые проекты. По одному и тому же проекту чаще всего были задействованы разные пользователи, число и названия проектов также различались.

1 стартмани

16.02.2018    16236    perepetulichka    5    

15

План видов характеристик (ПВХ) - с чем его едят

Механизмы платформы 1С Платформа 1С v8.3 План видов характеристик Абонемент ($m)

План видов характеристик - эта фишка нужна Аналитикам. В данной статье мы рассмотрим пример создания сложного ПВХ по учебнику Хрусталевой/Радченко. А также создадим свой собственный механизм ПВХ с двумя видами отчетов-СКД на выходе.

1 стартмани

14.02.2018    80097    jan-pechka    17    

103

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Проверка таблицы на дублирование строк (ТаблицаЗначений, ТабличнаяЧасть) и получение массива таких строк

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Функция для проверки дублирования строк в ТаблицеЗначений или ТабличнойЧасти. Также, если необходимо, возвращает массив задублированных строк (можно обработать).

1 стартмани

05.02.2018    13784    uri1978    27    

12

Программное создание динамического списка на управляемой форме. (Динамическое создание динамического списка). Готовая процедура + обработка - демонстрационный пример

Механизмы платформы 1С Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Если у вас возникает необходимость на форму влиять динамически и создавать элементы управляемой формы программно, а особенно хотите вывести программно (динамически) динамический список, вам будет интересна эта процедура. Процедура включает также возможность формирования своей командной панели (а-ля снятие галочки "Автозаполнение" у стандартной командной панели списка).

1 стартмани

19.01.2018    85252    rpgshnik    38    

380

Система взаимодействия. Быстрый старт

Механизмы платформы 1С Платформа 1С v8.3 Россия Абонемент ($m)

В статье описано принципиальное взаимодействие клиентского сеанса с сервером взаимодействия.

1 стартмани

28.11.2017    51720    Goleff74    27    

93

Асинхронность в управляемом интерфейсе 1С

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

В статье доступно объясняется про новое модное явление асинхронности, добавленное в платформу 1С. Также приложен пример асинхронной обработки по поиску файлов.

1 стартмани

15.01.2017    28645    fixin    30    

38

Отличия в управляемом приложении при создании нового документа без сохранения объекта

Механизмы платформы 1С Платформа 1С v8.3 1С:Бухгалтерия 2.0 Абонемент ($m)

В обычном приложении «1С:Предприятие 8», если необходимо создать новый документ и без сохранения открыть его форму, мы просто создавали объект, наполняли его данными и открывали форму объекта. В управляемом приложении «1С:Предприятие 8» есть существенные отличия, которые я попытаюсь описать.

1 стартмани

05.05.2016    13895    sss123    4    

8

Работа с 1С:Аналитика Промо

Онлайн-курс предусматривает изучение возможностей системы “1С:Аналитика”, которая работает как составная часть платформы “1С:Предприятие” и обеспечивает оперативный просмотр и анализ необходимых данных.

4500 рублей

Трюки 1С 8 – Передача формы документа в форму выбора

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

В данной серии статей будут показаны несколько трюков, которые компенсируют отдельные слабости платформы 1С 8, в частности, в области разработки обычных форм.

1 стартмани

30.08.2013    14850    mbm    14    

25

Сравнение скорости получения имени класса через Метаданные.*.Содержит и через Метаданные().ПолноеИмя()

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Сравнение скорости двух методов определения класса объекта через его метаданные. Когда есть Объект, но неизвестно заранее, какой у него тип (например получен из реквизита типа ЛюбаяСсылка)

1 стартмани

08.08.2013    9924    taiba    9    

12

Методика оперативного проведения и управляемые блокировки

Механизмы платформы 1С Платформа 1С v8.3 Абонемент ($m)

Несмотря на то, что у меня уже есть статья посвященная механизму оперативного проведения, очень часто, нет не так, очень-очень-очень часто спрашивают, что это такое. Я подумал и решил написать ну очень-очень-очень подробную статью про методику оперативного проведения и управляемые блокировки. А без управляемых блокировок, собственно, методику использовать бессмысленно.

1 стартмани

25.07.2013    85071    GROOVY    176    

334

Распознавание и загрузка документов в 1С Промо

Универсальная программа-обработка для распознавания любых сканов или фото первичных документов в 1С (счета-фактуры, УПД, ТТН, акты и тд). Точность распознания до 98%.

от 11 рублей

ТипЗнч vs Метаданные()

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Сравнение скорости определения типа объекта через ТипЗнч и через Метаданные

1 стартмани

15.06.2013    25668    taiba    25    

20

Как узнать, является значение ссылочного типа «битой ссылкой» или нет?

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 Россия Абонемент ($m)

Для платформ 1С-7.7 и 1С-8.x описаны простые способы выяснения того, является ли ссылочное значение ссылкой на несуществующий объект. Для обеих платформ выложены примеры реализации функции IsEmpty(), возвращающей признак пустого значения и флаг «битой ссылки».

1 стартмани

28.02.2013    33223    yuraos    25    

18

XDTO - часть 3

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Мы продолжаем цикл статей по изучению подсистемы XDTO в 1С:Предприятие. Это третья часть, в которой мы будем работать непосредственно с подсистемой, рассмотрим главные строительные блоки подсистемы и рассмотрим небольшой пример кода.

3 стартмани

28.01.2013    221350    Evil Beaver    179    

477

Некоторая работа с данными через COM

Механизмы платформы 1С Платформа 1С v8.3 Абонемент ($m)

В статье приведены примеры работы с Платформой 8.X через COM (точнее, через объект COMConnector). Примеры кода были использованы при реализации прикладных задач в процессе трудовой деятельности.

2 стартмани

05.12.2012    62917    wowik    32    

179

74 полезности из комплексного курса по конфигурированию 1С 8.2

Механизмы платформы 1С Платформа 1С v8.3 Россия Абонемент ($m)

Курс прошел в октябре 2011 года. До этого уже была определенная подготовка (прочитал несколько книг, прошел несколько интернет-курсов и подготовился по вопросам к экзамену 1С: Профессионал по платформе 8.2). На этом курсе прошел обучение по 4 темам: основные объекты, оперативный учет, периодические расчеты и бухгалтерский учет. Хочу рассказать вам о том, что было не очевидно для меня. Надеюсь и вам пригодится.

1 стартмани

02.03.2012    13797    Flashill    65    

220