1С:Предприятие 8 – Telegram
1С:Предприятие 8
864 subscribers
91 photos
202 videos
69 links
🔥 Разработка в 1С — просто и понятно! 🔥

Полезные фишки и лайфхаки для разработчиков
Объяснение сложных тем простыми словами
Готовые решения, сниппеты и примеры кода
Разбор ошибок и способов их устранения
Новости и тренды в мире 1С
Download Telegram
Передача файла с клиента на сервер в 1С 8.3


&НаКлиенте
Процедура ПередачаФайлаСКлиентаНаСервер(Команда)

ТекстФайл = Новый ЗаписьТекста("D:\Prostokvashino.txt");
ТекстФайл.ЗаписатьСтроку("Кот Матроскин");
ТекстФайл.ЗаписатьСтроку("Дядя Федор");
ТекстФайл.ЗаписатьСтроку("Шарик");
ТекстФайл.Закрыть();

Завершено = Новый ОписаниеОповещения("ПослеПередачи", ЭтотОбъект);

// Параметр УникальныйИдентификаторФормы - если не указывать - то файл будет удален после очередного запроса сервера
// если указать - то после удаления объекта формы
// Параметр Интерактивно (Истина) - дает пользователю выбрать файл самому
НачатьПомещениеФайла(Завершено, , "D:\Prostokvashino.txt", Ложь, ЭтаФорма.УникальныйИдентификатор);

КонецПроцедуры

&НаКлиенте
Процедура ПослеПередачи(Результат, ХранимыйАдрес, ВыбранноеИмяФайла, ДопПараметры) Экспорт

Если Результат Тогда
// Сохранение полученного адреса в реквизите формы (строка) - адрес файла в хранилище на сервере
АдресФайлаВХранилище = ХранимыйАдрес;
Сообщить("Файл " + ВыбранноеИмяФайла + " передан на сервер и сохранён во временном хранилище. Адрес: " + ХранимыйАдрес);
Иначе
Сообщить("Ошибка передачи файла на сервер!");
КонецЕсли;

КонецПроцедуры



👉@DevLab1C
👍2🔥2
Чтение файла на сервере из временного хранилища в 1С 8.3


&НаСервере
Процедура ЧтениеФайлаНаСервереИзВременногоХранилища()

Если ФайлВХранилище = "" Тогда
Сообщить("Сначала нужно передать файл с клиента на сервер!");
Возврат;
КонецЕсли;

ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлВХранилище);
Если ДвоичныеДанные = Неопределено Тогда
Сообщить("Файл уже был удалён из временного хранилища!");
Возврат;
КонецЕсли;

ДвоичныеДанные.Записать("D:\to_test.txt");

Текст = Новый ЧтениеТекста("D:\to_test.txt");
Пока Истина Цикл
Строка = Текст.ПрочитатьСтроку();
Если Строка = Неопределено Тогда
Прервать;
Иначе
Сообщить(Строка);
КонецЕсли;
КонецЦикла;

КонецПроцедуры


👉@DevLab1C
👍2🔥2
Передача файла с сервера на клиент в 1С 8.3


&НаКлиенте
Процедура ПередатьФайлССервераНаКлиент(Команда)

Если ФайлВХранилище = "" Тогда // Реквизит формы (строка): адрес файла в хранилище на сервере
Сообщить("Сначала нужно сохранить файл на сервере.");
Возврат;
КонецЕсли;

Завершено = Новый ОписаниеОповещения("ПослеПолучения", ЭтотОбъект);

МассивФайлов = Новый Массив;
МассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла("D:\from_test.txt", ФайлВХранилище));
НачатьПолучениеФайлов(Завершено, МассивФайлов,, Ложь);

КонецПроцедуры

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

Для Каждого ТекФайл Из Файлы Цикл
Сообщить(ТекФайл.Имя + " получен из " + ТекФайл.Хранение);
КонецЦикла;

КонецПроцедуры


👉@DevLab1C
2👍1🔥1
Узнать место на диске в 1С 8.3


Функция ПолучитьМестоНаДиске(Диск) Экспорт // Диск - строка - "d:\"

СистемнаяИнфо = Новый СистемнаяИнформация;
ТипПлатформы = СистемнаяИнфо.ТипПлатформы;

Если ТипПлатформы = ТипПлатформы.Windows_x86
Или ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда

СкриптФСО = Новый COMОбъект("Scripting.FileSystemObject");
МестоНаДиске = Окр(Число(СкриптФСО.getDrive(СкриптФСО.GetDriveName(Диск)).freeSpace())/1024/1024, 2);

Возврат МестоНаДиске;

Иначе

//Сообщить("Данная функция поддерживается только в ОС Windows");
Возврат Неопределено;

КонецЕсли;

КонецФункции


👉@DevLab1C
🔥2👍1
Получить каталог информационной базы данных в 1С 8.3


&НаКлиенте
Функция ПолучитьКаталогИБ()// аналог предопределенной КаталогИБ() в 1C 7.7

СтрокаИБ = СтрокаСоединенияИнформационнойБазы(); //File="D:\Base".
//Возвращает Строка соединения информационной базы, которую, например,
//можно использовать для запуска 1С:Предприятия средствами встроенного языка
ПутьИБ = Найти(Врег(СтрокаИБ), "FILE=");

Если ПутьИБ = 1 тогда // Файловая информационная база 1С:Предприятия 8 (.1CD)

Возврат Сред(СтрокаИБ,7,СтрДлина(СтрокаИБ)-8)+"\"; // Получим D:\Base

Иначе// Серверная - Используем КаталогВременныхФайлов()

ПозицияПоиска = Найти(Врег(СтрокаИБ), "SRVR=");
Если ПозицияПоиска <> 1 Тогда
Возврат Неопределено;
КонецЕсли;

ПозицияТЧК_ЗПТ = Найти(СтрокаИБ, ";");
ПозСтарт = 6 + 1;
ПозФиниш = ПозицияТЧК_ЗПТ - 2; //

ИмяСервера = Сред(СтрокаИБ, ПозСтарт, ПозФиниш - ПозСтарт + 1);
СтрокаИБ = Сред(СтрокаИБ, ПозицияТЧК_ЗПТ + 1);
ПутьИБ = Найти(Врег(СтрокаИБ), "REF=");// позиция имени сервера
Если ПутьИБ <> 1 Тогда
Возврат Неопределено;
КонецЕсли;

ПозСтарт = 6;
ПозицияТЧК_ЗПТ = Найти(СтрокаИБ, ";");
ПозФиниш = ПозицияТЧК_ЗПТ - 2;

ИмяИБНаСервере = Сред(СтрокаИБ, ПозСтарт, ПозФиниш - ПозСтарт + 1);
ПутьКБД = ИмяСервера + "/ " + ИмяИБНаСервере; //ServerName: Server1C / information_base_name: Buh3

Сообщить("ИБ в серверном режиме: "+ПутьКБД);
Сообщить("Серверная база данных! Используем каталог временных файлов ("+СокрЛП(КаталогВременныхФайлов())+") !");
Возврат КаталогВременныхФайлов();

КонецЕсли;

КонецФункции


👉@DevLab1C
🔥2👍1
Узнать размер папки в 1С 8.3


&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьРазмерКаталога(ПутьККаталогу)

СистемнаяИнфо = Новый СистемнаяИнформация;
ТипПлатформы = СистемнаяИнфо.ТипПлатформы;

Если ТипПлатформы = ТипПлатформы.Windows_x86
Или ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда

СкриптФСО = Новый COMОбъект("Scripting.FileSystemObject");
СвойстваКаталога = СкриптФСО.GetFolder(ПутьККаталогу);

Возврат СвойстваКаталога.Size;

Иначе

//Сообщить("Данная функция поддерживается только в ОС Windows");
Возврат Неопределено;

КонецЕсли;

КонецФункции


👉@DevLab1C
👍4
Копирование всех файлов из одного каталога в другой в 1С 8.3


Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)

Попытка
//Проверим и поправим окончания пути каталогов
Если Прав(КаталогИсточник, 1) <> "\" Тогда
КаталогИсточник = КаталогИсточник + "\";
КонецЕсли;
Если Прав(КаталогПриемник, 1) <> "\" Тогда
КаталогПриемник = КаталогПриемник + "\";
КонецЕсли;

//Создадим каталог приемник
СоздатьКаталог(КаталогПриемник);
МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);

Для Каждого Файл Из МассивФайлов Цикл
ПолноеИмяИсточник = Файл.ПолноеИмя;
ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");

Если ПустаяСтрока(Файл.Расширение) Тогда
СоздатьКаталог(ПолноеИмяПриемник);
Иначе
КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
КонецЕсли;
КонецЦикла;
Исключение
ИнфоОбОшибке = "Ошибка при копировании: " + ОписаниеОшибки()
+ " (из каталога: " + КаталогИсточник
+ "; в каталог: " + КаталогПриемник + ")";
Если ВыдаватьСообщения Тогда
Сообщить(ИнфоОбОшибке);
Иначе
Предупреждение(ИнфоОбОшибке);
КонецЕсли;

КонецПопытки;

КонецПроцедуры


👉@DevLab1C
🔥21👍1
Асинхронное копирование всех файлов из одного каталога в другой в 1С 8.3


Асинх Процедура СкопироватьФайлыАсинх(Знач КаталогИсточник, Знач КаталогПриемник)

КаталогПриемник = Новый Файл(КаталогПриемник);
Если Не Ждать КаталогПриемник.СуществуетАсинх() Тогда
Ждать СоздатьКаталогАсинх(КаталогПриемник.ПолноеИмя);
КонецЕсли;

МассивФайлов = Ждать НайтиФайлыАсинх(КаталогИсточник, "*.*", Ложь);
Для Каждого Файл Из МассивФайлов Цикл
ПолноеИмяПриемника = КаталогПриемник.ПолноеИмя + "\" + Файл.Имя;
Если Файл.ЭтоКаталог() Тогда
СкопироватьФайлы(Файл.ПолноеИмя, ПолноеИмяПриемника);
Иначе
Ждать КопироватьФайлАсинх(Файл.ПолноеИмя, ПолноеИмяПриемника);
КонецЕсли;
КонецЦикла;

КонецПроцедуры


👉@DevLab1C
🔥3👍1
Пример копирования (перемещения) файлов из одного каталога в другой в 1С 8.3


Процедура СкопироватьПереместитьКаталог(ИмяФайлаИсточник, ИмяФайлаПриемник, Переместить = Ложь)

Если Прав(ИмяФайлаИсточник, 1) <> "\" Тогда
ИмяФайлаИсточник = ИмяФайлаИсточник + "\";
КонецЕсли;

Файл = Новый Файл(ИмяФайлаПриемник);
ИмяФайлаИсточник = ИмяФайлаИсточник + Файл.Имя;

СоздатьКаталог(ИмяФайлаИсточник);
Если Прав(ИмяФайлаИсточник, 1) <> "\" Тогда
ИмяФайлаИсточник = ИмяФайлаИсточник + "\";
КонецЕсли;

Для Каждого Файлы Из НайтиФайлы(ИмяФайлаПриемник, "*.*", Истина) Цикл

Если Файлы.ЭтоКаталог() Тогда
СоздатьКаталог(СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
Продолжить;
Иначе
КаталогПереносимогоФайла = Новый Файл(СтрЗаменить(Файлы.Путь, ИмяФайлаПриемник, ИмяФайлаИсточник));
Если НЕ КаталогПереносимогоФайла.Существует() Тогда
СоздатьКаталог(КаталогПереносимогоФайла.ПолноеИмя);
КонецЕсли;

Если Переместить Тогда
ПереместитьФайл(Файлы.ПолноеИмя, СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
Иначе
КопироватьФайл(Файлы.ПолноеИмя, СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
КонецЕсли;
КонецЕсли;

КонецЦикла;

Если Переместить Тогда
УдалитьФайлы(ИмяФайлаПриемник);
КонецЕсли;

КонецПроцедуры


👉@DevLab1C
🔥2👍1
Видео для подготовки к Аттестации 1С:Специалист-Консультант по производству и ремонтам в 1С:ERP 2.5

Ключевые изменения в 1С:ERP 2.5.7 по производственному учету – за 15 минут
За что получают двойки на Аттестации по производству и ремонтам в 1C:ERP 2.5?
Как правильно реагировать на ошибки системы – на примере Аттестации Специалист-консультант по 1С:ERP
Ремонт оборудования заказчика в 1С:ERP 2.5 – схема учета для Аттестации и проектов за 20 минут
Объекты возникновения затрат (ОВЗ) в 1С:ERP 2.5.7 – разбираем новый функционал на практике

источник

👉@DevLab1C
👍3🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Циклы в 1C

Почему так отработал цикл? Как можно исправить?

источник

👉@DevLab1C
👍3🔥1
Ускорение и оптимизация 1С

5 примеров ошибок в коде, которые приводят к замедлению работы 1С
Почему документ с одной строкой проводится 7,5 секунд
Как исправить ошибку при запуске после внедрения подсистемы Оценка производительности из БСП
Как ускорить процесс реструктуризации и обновления 1С в разы
3 принципа работы блокировок, о которых стоит знать каждому программисту 1С
Как «поймать» медленные запросы

источник

👉@DevLab1C
🔥4👍1