- Работа с временным хранилищем
- Программирование 1С 8.х для начинающих
- Общие вопросы
- Временное хранилище в 1С 8.2
- Передача файла с клиента на сервер и обратно.
- Помещение в хранилище
- Чтение из хранилища
- Сохрание таблицы (дерева) значений в ХранилищеЗначения/восстановление из ХранилищеЗначения c возможностью произвольной обработки данных
- Скачать файлы
- См. также
- Системы контроля версий для 1С-разработчиков.
- Jenkins на службе 1С
- Приемы быстрой работы в EDT/Git
- Получаем статистику по git-репозиторию в разрезе разработчиков
- Формула успешного внедрения DevOps и Agile в 1С: от неудачи к неудаче без потери энтузиазма
- Кровь, пот и GIT
- Прокси хранилища 1С (IIS, OneScript)
- Что, если Continuous Integration – это прежде всего практика, а не набор инструментов?
Работа с временным хранилищем
Добрый день. Есть обработка. ее смысл получить выборку лицевых счетов, заполнить квитанции и сохранить их в файлы в соответствии с адресом.
Если я записываю таб док в цикле то по каждому лицевому счету происходит перезапись файла, это неправильно и занимает много времени. Я решил что нужно поместить таб док в хранилище и так же в соответствие, и потом его циклом обработать и сохранить.
В соответствие все попадает как нужно вернее, соответствие правильного адреса и уникального адреса хранилища, но при попытке сохранить все это в файл, сохраняются только последние данные.
Надеюсь понятно объяснил, в чем может быть ошибка?
Для Каждого ЭлементСписка Из ПараметрыОтчета.ТаблицаОбъектов Цикл Если АдресПервойКвитанции = Адрес ИЛИ АдресПервойКвитанции = НЕОПРЕДЕЛЕНО Тогда // АдресПервойКвитанции в самом начале всегда неопределено Если АдресПервойКвитанции = НЕОПРЕДЕЛЕНО Тогда УникальныйИдентификатор = Новый УникальныйИдентификатор; СоответствиеАдресов = Новый Соответствие; КонецЕсли; СформироватьТекущуюКвитанциюФорма12(СтруктураОбщихТаблиц, ЭлементСписка.ЛицевойСчет, тмДокумент, тмОбщийДок, ДокументРезультат, ДокументРезультатВывод, ТекНомерВыводимой, ПараметрыОтчета, ОбщиеДанные, ЭтоПервая); АдресПервойКвитанции = Адрес; АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ДокументРезультатВывод, УникальныйИдентификатор); СоответствиеАдресов.Вставить(ИмяФайла, АдресВременногоХранилища); Иначе // Если у нас изменился адрес ЛС то создаем новый адрес хранилища. УникальныйИдентификатор = Новый УникальныйИдентификатор; ДокументРезультатВывод.Очистить(); СформироватьТекущуюКвитанциюФорма12(СтруктураОбщихТаблиц, ЭлементСписка.ЛицевойСчет, тмДокумент, тмОбщийДок, ДокументРезультат,ДокументРезультатВывод, ТекНомерВыводимой, ПараметрыОтчета, ОбщиеДанные, ЭтоПервая); АдресПервойКвитанции = Адрес; АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ДокументРезультатВывод, УникальныйИдентификатор); СоответствиеАдресов.Вставить(ИмяФайла, АдресВременногоХранилища); КонецЕсли; КонецЦикла; Для Каждого Элемент Из СоответствиеАдресов Цикл ТабДокЛС = ПолучитьИзВременногоХранилища(Элемент.Значение); ТабДокЛС.Записать(КаталогФайла + Элемент.Ключ + ".pdf", ТипФайлаТабличногоДокумента.PDF); //ТабДокЛС.Очистить(); КонецЦикла;
Источник
Программирование 1С 8.х для начинающих
- Вы здесь:
- Главная
- Статьи
- Общие вопросы
- Проект
- Временное хранилище в 1С 8.2
Общие вопросы
Временное хранилище в 1С 8.2
Передача файла с клиента на сервер и обратно.
В связи с новым подходом в программировании на платформе 8.2 возникла необходимость передачи данных между клиентом и сервером при этом прямая передача в виде параметров имеет ряд ограничений. И тогда был введен объект «Временное хранилище».
Чем полезно временное хранилище:
- Не надо создавать объекты в конфигурации
- Доступно и с сервера и с клиента
- Можно записать любой объект
- Ускорение работы 1С
Временное хранилище это не объект конфигурации, а объект платформы поэтому для разработчика он выглядит как черный ящик. Можно туда положить что-то получив псевдоним(адрес) и получить из него что-то указав псевдоним(адрес). Но узнать что находится во временном хранилище и сколько нельзя. В ниже рассмотренных примерах помещение в хранилище происходит на клиенте, а чтение на сервере. Хотя можно передавать данные и в обратном направлении.
Синтаксис работы с хранилищем простой:
Передав параметром, данные которые хотим поместить(Посылка) и УникальныйИдентификатор получаем Адрес, по которому потом можно будет обратиться. Причем передаваемый идентификатор не является получаемым в последствии адресом. Вместо идентификатора можно передать строку Адреса, по которому и будет помещено наше значение, но это не любая строка! Строка Адреса выглядит примерно вот так «e1cib/tempstorage/ae5c5472-0266-4892-9073-20392dd5a6a6» .
УникальныйИдентификатор = Новый УникальныйИдентификатор; Адрес = ПоместитьВоВременноеХранилище(Посылка, УникальныйИдентификатор);
УникальныйИдентификатор может быть как новый так и существующей формы, в последнем случае значение в хранилище будет храниться пока существует форма. Если не передать уникальный идентификатор, то при следующем серверном вызове значение уже будет удалено.
Адрес = ПоместитьВоВременноеХранилище(Посылка); ПрочитатьНаСервере(Адрес); // процедура на сервере которая читает из хранилища с помощью метода ПолучитьИзВременногоХранилища() ПрочитатьНаСервере(Адрес); // при этом вызове серверной процедуры значения в хранилище уже не будет.
Чтобы получить из хранилища нужно только указать адрес:
Посылка = ПолучитьИзВременногоХранилища(Адрес);
Также можно удалить помещенный объект, используя адрес
УдалитьИзВременногоХранилища(Адрес);
Если помещаемые данные не являются объектами конфигурации, то для того чтобы их поместить нужно перевести в доступный тип — «ДвоичныеДанные»
Помещение в хранилище
ДвоичДанные = Новый ДвоичныеДанные(ПутьКФайлу); Адрес = ПоместитьВоВременноеХранилище(ДвоичДанные, УникальныйИдентификатор);
Здесь мы сначала преобразуем файл в формат двоичных данных и только потом помещаем их в хранилище
Чтение из хранилища
В интернете есть множество примеров как на сервере записать полученные данные в базу, поэтому ниже приводится другой пример, когда файл полученный на сервере открывается для работы. В качестве такого файла используется XML.
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес); ИмяВременногоФайлаXML = ПолучитьИмяВременногоФайла("xml"); // например был помещен XML ДвоичныеДанные.Записать(ИмяВременногоФайлаXML); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ИмяВременногоФайлаXML); ЧтениеXML.Прочитать(); // Дальше стандартная работа с XML
Если мы имеем дело с файлами, то может оказаться удобным метод ПоместитьФайл. Он преобразует файл в двоичные данные и записывает их во ВременноеХранилище. При этом параметром можно настроить открытие диалогового окна для выбора файла. Сделаю оговорку, этот метод нельзя использовать на сервере.
ПоместитьФайл(Адрес. Истина,ЭтаФорма.УникальныйИдентификатор);
В параметре Адрес, можно указать Адрес в который нужно записать файл, если нужен новый адрес, то нужно передать пустую строку.
Адрес = ""; ПоместитьФайл(Адрес. Истина,ЭтаФорма.УникальныйИдентификатор);
Истина – открывает окно для выбора папки и имени файла, при значении Истина есть возможность открыть файл.»КопияФайла.xml» – Имя файла под которым будет сохранен файл.Адрес – это адрес в хранилище,ПолучитьФайл(Адрес,»Копияфайла.xml» , Истина);Чтобы сохранить файл из временного хранилища на Клиенте можно использовать метод
Для получения файла используется метод
ПолучитьФайл(Адрес,"Копияфайла.xml" , Истина);
Источник
Сохрание таблицы (дерева) значений в ХранилищеЗначения/восстановление из ХранилищеЗначения c возможностью произвольной обработки данных
Таблица (дерево) значений — это не сохраняемый в базе данных объект. Но иногда возникает необходимость сохранить ТЗ или ДЗ между сеансами работы. Можно воспользоваться функцией ЗначениеВФайл() (сохраняет любое сериализуемое значение в файл). Чтоб сохранить несколько ТЗ или ДЗ в хранилищезначения необходимо добавить их в массив.
Процедура ВыгрузитьНажати е ( Элемент )
пер = ЭлементыФормы . Т абличноеПоле1 . Значение . Скопировать ();
хранилище = Новый ХранилищеЗначени я ( масив , Новый СжатиеДанных ( 9 ));
Процедура ЗагрузитьНажати е ( Элемент )
если хранилище <> Неопределено тогда
зна = хранилище . П олучить ();
ЭлементыФормы . Т абличноеПоле2 . Значение = зна [ 0 ];
ЭлементыФормы . Т абличноеПоле2 . СоздатьКолонки ();
сообщит ь( » ХранилищеЗначения не заполнено» );
строкатч = ЭлементыФормы . Т абличноеПоле1 . Значение . Добавить ();
Не рекомендуется хранить в реквизитах типа ХранилищеЗначения ссылки на другие объекты базы данных.
В системе не поддерживается ссылочная целостность по объектам, сохраненным в базе данных в полях типа ХранилищеЗначения. Это означает, что при попытке удаления, например, элементов справочников система не контролирует ссылки на эти элементы, сохраненные в ХранилищеЗначения.
Скачать файлы
См. также
Системы контроля версий для 1С-разработчиков.
Основы командной разработки на 1С. Использование систем контроля версий при разработке на платформе 1С:Предприятие 8
Jenkins на службе 1С
Основная специализация Jenkins – это, прежде всего, CI/CD. Но его можно использовать и для других важных задач: разбора хранилищ, настройки копий баз данных, раздачи прав пользователям, рестарта кластера и проверки кода проектов. Об опыте использования Jenkins для автоматизации рутинных задач 1С-ника на конференции Infostart Event 2021 Moscow Premiere рассказал Юрий Гончарук.
Приемы быстрой работы в EDT/Git
Статья даёт ответы на некоторые вопросы, возникающие у разработчиков, которые погружаются в океан технологий EDT и Git, омывающий царство DevOps. Сколько и какие ветки нужны? Какой репозиторий выбрать? Кто должен сливать доработки в мастер ветку или ветку версии? Как не тратить время в EDT на ресурсоёмких операциях? Зачем нам сборочный конвейер и как его построить? Зачем нам нужно тестирование и как его реализовать? Как вести разработку, если есть разработчики, не умеющие вести разработку в EDT или не имеющие технической возможности, но нам нужны их skills в 1С? Что такое фантомы и нужно ли с ними бороться? Как слить 20 доработок с конфликтами и уложиться в 4 часа? Опыт использования модных технологий в реальных проектах.
Получаем статистику по git-репозиторию в разрезе разработчиков
Итак! Представим, что наступил момент, когда разработка через исходный код реализована на предприятии в полном объеме. Мы разрабатываем в EDT или конфигураторе (но выгружаем конфигурацию в исходный код), версионируем внешние отчеты и обработки и расширения, собираем релизы, проверяем код статическим анализом, в разработке царит гармония и мир. Красота! Но менеджерам этого мало, всегда хочется чего-то еще, и вот мне прилетает задача — дай статистику по вкладу в код каждого разработчика.
Формула успешного внедрения DevOps и Agile в 1С: от неудачи к неудаче без потери энтузиазма
На конференции Infostart Event 2021 Post-Apocalypse выступил директор практики БИТ:ERP компании Первый БИТ Глеб Стальной. В ходе доклада он рассмотрел трансформацию проектного подхода в продуктовый, рассказал про имплементацию «современных» практик DevOps и продемонстрировал инструменты для разработки, взаимодействия с бизнесом и клиентами, применяемые в его команде.
27.02.2023 1437 glebushka 1
Кровь, пот и GIT
Ведущий разработчик 1С Андрей Карпов на конференции Infostart Event 2021 Post-Apocalypse поделился ошибками, которые совершают новички в работе с GIT. В докладе четыре кейса с пошаговыми инструкциями, которые позволят не допускать конфликтов в разработке.
17.01.2023 7118 karpik666 46
Прокси хранилища 1С (IIS, OneScript)
Избавляемся от версионной зависимости, проверяем комментарии, вызываем веб-хуки, делаем красивые пути. И все это на привычном IIS и понятном OneScript.
Что, если Continuous Integration – это прежде всего практика, а не набор инструментов?
Рано или поздно многие компании приходят к практикам DevOps. И начало этому – Continuous Integration. О том, что происходит в команде специалистов 1С, когда они переходят на Git, и почему простое внедрение CI-инструментов не решает проблему подходов к разработке, в докладе на Infostart Event 2021 Post-Apocalypse рассказал руководитель компании ПрогТехБизнес Александр Анисков.
07.12.2022 1820 vandalsvq 0
Источник