1с сохранить массив в реквизит
Для сохранения значений реквизитов управляемой формы в 1С нужно включить свойство управляемой формы СохранениеДанныхВНастройках. После этого в окне реквизитов формы появится дополнительная колонка Сохранять данные в настройках. В этой колонке нужно поставить флаг у тех реквизитов, значения которых нужно сохранять.
После этого на форме появятся стандартные кнопки Сохранить параметры и Восстановить параметры (возможно, они будут скрыты под кнопкой Еще).
Однако, автоматическое сохранение значений доступно только для реквизитов формы. Для табличных частей флаг Сохранять данные в настройках не предусмотрен. Однако, табличные части можно преобразовать, например, в массивы и уже их сохранить в настройках формы.
Рассмотрим эту процедуру на примере формы с двумя табличными частями: ТипыЦен и ГруппыНоменклатуры. В каждой табличной части по одной колонке.
Для сохранения значений табличной части управляемой формы нам потребуется создать процедуру для события формы ПриСохраненииДанныхВНастройкахНаСервере. Как следует из названия, это событие возникает при сохранении значений реквизитов формы. И тут то мы и сможем добавить к реквизитам нашу табличную часть, предварительно преобразованную в массив.
Процедура ПриСохраненииДанныхВНастройкахНаСервере ( Настройки )
//Создаем массивы из табличных частей
МассивГрупп = новый массив ;
Для каждого Строка из Объект . Группы Цикл
МассивГрупп . Добавить ( Строка . Группа ) ;
КонецЦикла ;
МассивЦен = новый массив ;
Для каждого Строка из Объект . ТипыЦен Цикл
МассивЦен . Добавить ( Строка . ТипЦены ) ;
КонецЦикла ;
//Добавляем полученные массивы в сохраняемые настройки с соответствующими именами
Настройки . Вставить ( «Группа» , МассивГрупп ) ;
Настройки . Вставить ( «ТипыЦен» , МассивЦен ) ;
Теперь осталось восстановить табличные части из массивов при загрузке настроек управляемой формы. Для этого нам потребуется процедура для события ПриЗагрузкеДанныхИзНастроекНаСервере.
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере ( Настройки )
//Очищаем табличные части, чтобы избежать дублей
Объект . Группы . Очистить ( ) ;
Объект . ТипыЦен . Очистить ( ) ;
//Получаем массивы из настроек по тому имени, по которому сохраняли и заносим в табличные части
Для каждого Строка из Настройки . Получить ( «Группа» ) Цикл
НС = Объект . Группы . Добавить ( ) ;
НС . Группа = Строка ;
КонецЦикла ;
Для каждого Строка из Настройки . Получить ( «ТипыЦен» ) Цикл
НС = Объект . ТипыЦен . Добавить ( ) ;
НС . ТипЦены = Строка ;
КонецЦикла ;
Как сохранять и восстанавливать значения Объектов и Реквизитов на форме УП?
У управляемой формы реквизиты заведенные как реквизиты формы, при закрытии и открытии ее заново могут сохраняться и восстанавливаться, достаточно только поставить напротив галочку сохранять и в свойствах формы выбрать «АвтоматическоеСохранениеДанныхВНастройках» — Использовать.
Подробнее в этой статье Как сохранять и восстанавливать значения реквизитов на форме? и там же пример для обычных форм.
А что же делать с реквизитами, которые выступают в роли реквизитов объектов ?
у них такой настройки нет нет — напишем:
Открыв обработку и заполним поля закрываем ее, при следующем открытии все поля заполнены из сохраненных настроек:
Похожие FAQ
Еще в этой же категории
Как настроить отбор строк? 2
Часто возникает задача показать только нужные строки в табличной части документа или справочника (или другого объекта). Для этого можно использовать замечательное свойство: в обычном приложении параметр для ОтборСтрок — Отбор. в управляемом Посмотреть все в категории Работа с Формой (Диалог) и её элементами
Для того чтобы значения реквизитов управляемой формы, не связанные с данными хранящимися в базе, сохранялись после закрытия формы и восстанавливались при следующем ее открытии необходимо сделать следующее:
Для сохранения значений реквизитов управляемой формы в 1С нужно включить свойство управляемой формы СохранениеДанныхВНастройках. После этого в окне реквизитов формы появится дополнительная колонка Сохранять данные в настройках. В этой колонке нужно поставить флаг у тех реквизитов, значения которых нужно сохранять.
После этого на форме появятся стандартные кнопки Сохранить параметры и Восстановить параметры (возможно, они будут скрыты под кнопкой Еще).
Однако, автоматическое сохранение значений доступно только для реквизитов формы. Для табличных частей флаг Сохранять данные в настройках не предусмотрен. Однако, табличные части можно преобразовать, например, в массивы и уже их сохранить в настройках формы.
Рассмотрим эту процедуру на примере формы с двумя табличными частями: ТипыЦен и ГруппыНоменклатуры. В каждой табличной части по одной колонке.
Для сохранения значений табличной части управляемой формы нам потребуется создать процедуру для события формы ПриСохраненииДанныхВНастройкахНаСервере. Как следует из названия, это событие возникает при сохранении значений реквизитов формы. И тут то мы и сможем добавить к реквизитам нашу табличную часть, предварительно преобразованную в массив.
Процедура ПриСохраненииДанныхВНастройкахНаСервере ( Настройки )
//Создаем массивы из табличных частей
МассивГрупп = новый массив ;
Для каждого Строка из Объект . Группы Цикл
МассивГрупп . Добавить ( Строка . Группа ) ;
КонецЦикла ;
МассивЦен = новый массив ;
Для каждого Строка из Объект . ТипыЦен Цикл
МассивЦен . Добавить ( Строка . ТипЦены ) ;
КонецЦикла ;
//Добавляем полученные массивы в сохраняемые настройки с соответствующими именами
Настройки . Вставить ( "Группа" , МассивГрупп ) ;
Настройки . Вставить ( "ТипыЦен" , МассивЦен ) ;
Теперь осталось восстановить табличные части из массивов при загрузке настроек управляемой формы. Для этого нам потребуется процедура для события ПриЗагрузкеДанныхИзНастроекНаСервере.
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере ( Настройки )
//Очищаем табличные части, чтобы избежать дублей
Объект . Группы . Очистить ( ) ;
Объект . ТипыЦен . Очистить ( ) ;
//Получаем массивы из настроек по тому имени, по которому сохраняли и заносим в табличные части
Для каждого Строка из Настройки . Получить ( "Группа" ) Цикл
НС = Объект . Группы . Добавить ( ) ;
НС . Группа = Строка ;
КонецЦикла ;
Для каждого Строка из Настройки . Получить ( "ТипыЦен" ) Цикл
НС = Объект . ТипыЦен . Добавить ( ) ;
НС . ТипЦены = Строка ;
КонецЦикла ;
Добавить комментарий Отменить ответ
Теперь мы в соцсетях! Подписывайтесь, чтобы получать информацию о последних обновлениях или задать вопрос.
Массив в 1С — это набор некоторых значений. Значения в одном массиве могут быть различных типов.
Массив может быть получен в результате выполнения различных функций, например, ВыгрузитьКолонку() таблицы значений; в виде массива можно получить выделенные строки динамического списка и т.д. Можно создать массив и «вручную».
Создание массива
1. Как создать массив нужного размера
пМассив = новый Массив ( 4 ) ; //создали массив из 4 элементов
//Внесем значения элементов массива
пМассив [ 0 ] = "Мы" ;
пМассив [ 1 ] = "создали" ;
пМассив [ 2 ] = "новый" ;
пМассив [ 3 ] = "массив" ;
2. Как создать пустой массив и добавить в него элементы
пМассив = новый Массив ; //создали пустой массив
//Внесем значения элементов массива
пМассив . Добавить ( "Мы" ) ;
пМассив . Добавить ( "создали" ) ;
пМассив . Добавить ( "новый" ) ;
пМассив . Добавить ( "массив" ) ;
3. Как создать многомерный массив.
Рассмотрим этот вопрос на примере двумерного массива, так как массивы больших размерностей используются значительно реже, а механизм их работы не отличается от двумерного.
пМассив = новый Массив ( 4 , 2 ) ; //создали массив 4х2
//Внесем значения элементов массива, пронумеровав каждое слово
пМассив [ 0 ] [ 0 ] = "1. " ;
пМассив [ 0 ] [ 1 ] = "Мы" ;
пМассив [ 1 ] [ 0 ] = "2. " ;
пМассив [ 1 ] [ 1 ] = "создали" ;
пМассив [ 2 ] [ 0 ] = "3. " ;
пМассив [ 2 ] [ 1 ] = "многомерный" ;
пМассив [ 3 ] [ 0 ] = "4. " ;
пМассив [ 3 ] [ 1 ] = "массив" ;
4. Как создать фиксированный массив
Фиксированный массив отличается от обычного тем, что его нельзя изменять. Нельзя добавлять, удалять или менять значения элементов такого массива.
Фиксированный массив может быть получен из обычного:
пМассив = новый Массив ;
пМассив . Добавить ( "Мы" ) ;
пМассив . Добавить ( "создали" ) ;
пМассив . Добавить ( "новый" ) ;
пМассив . Добавить ( "массив" ) ;
фМассив = новый ФиксированныйМассив ( пМассив ) ; // создали фиксированный массив
Функции работы с массивами
Работу функций будем рассматривать на примере одномерного массива пМассив, созданного выше и состоящего из 4 элементов:
Функция ВГраница()
Получает наибольший индекс элемента массива. Он всегда на единицу меньше количества элементов массива.
Функция Вставить()
Вставляет какое-то значение в элемент массива с указанным индексом. Последующие элементы массива сдвигаются
Функция Добавить()
Создает новый элемент в конце массива и вставляет туда заданное значение
Функция Количество()
Возвращает количество элементов массива.
Функция Найти()
Ищет в массиве заданный элемент. Если находит, возвращает его индекс. Если не находит, возвращает Неопределено.
Индекс = пМассив . Найти ( "массив" ) ; // 3
Индекс = пМассив . Найти ( "строка, которой не было" ) ; // Неопределено
Функция Очистить()
Удаляет все значения из массива.
Функция Получить()
Получает значение массива по индексу. Эту же задачу можно решить через [].
Функция Удалить()
Удаляет элемент массива по индексу
Функция Установить()
Устанавливает значение элемента массива по индексу. Работает аналогично [].
Как обойти массив
Можно обойти все элементы массива без указания индекса:
Можно при обходе использовать индекс:
Как обойти многомерный массив
Многомерный массив обходится с помощью тех же циклов (см. выше), но один цикл должен быть вложен в другой.
мМассив = новый массив ( 3 , 4 ) ;
Для каждого Элемент 1 из мМассив Цикл
Для каждого Элемент 2 из Элемент 1 Цикл
Сообщить ( Элемент 1 ) ;
КонецЦикла ;
КонецЦикла ;
Или с применением индексов.
мМассив = новый массив ( 3 , 4 ) ;
Для Индекс 1 = 0 по мМассив . ВГраница ( ) Цикл
Для Индекс 2 по мМассив [ Индекс 1 ] . ВГраница ( ) Цикл
Сообщить ( мМассив [ Индекс 1 ] [ Индекс 2 ] ) ;
КонецЦикла ;
КонецЦикла ;
Сортировка массива
Для сортировки массива нам потребуется вспомогательный объект с типом СписокЗначений.
Список Знач = новый СписокЗначений ; // создаем список значений
СписокЗнач . ЗагрузитьЗначения ( пМассив ) ; // загружаем в список значения из массива
СписокЗнач . СортироватьПоЗначению ( НаправлениеСортировки . Возр ) ; //сортируем по возрастанию
СписокЗнач . СортироватьПоЗначению ( НаправлениеСортировки . Убыв ) ; //или по убыванию
пМассив = СписокЗнач . Выгрузить ( ) ; // выгружаем отсортированные значения обратно в массив
Сравнение двух массивов
Перед тем, как перейти к описанию функции сравнения, договоримся, что массивы считаются идентичными, если имеют одинаковое количество элементов и соответствующие элементы массивов равны. Тогда для сравнения можно использовать следующую функцию (кстати, такая функция уже присутствует в некоторых типовых конфигурациях):
Функция СравнитьМассивы ( Массив 1 , Массив 2 )
Если Массив 1 . Количество ( ) <>Массив2.Количество() Тогда
Возврат ЛОЖЬ ; // Массивы не равны, сравнивать элементы нет смысла.
КонецЕсли ;
Для Индекс = 0 по Массив 1 . ВГраница ( ) Цикл
Если Массив 1 [ Индекс ] <>Массив2[Индекс] Тогда
Возврат Ложь ; //эти элементы не равны, значит и массивы не равны
КонецЕсли ;
КонецЦикла ;
Возврат Истина ; // Если дошли до сюда, то массивы равны
КонецФункции
В функцию нужно передать 2 сравниваемых массива. Функция возвращает значение Истина, если массивы равны, и Ложь, если не равны.
Добавить комментарий Отменить ответ
Теперь мы в соцсетях! Подписывайтесь, чтобы получать информацию о последних обновлениях или задать вопрос.
Табличные части позволяют хранить неограниченное количество структурированной информации, принадлежащей одному объекту.
Рассмотрим некоторые приемы работы с табличными частями.
Как обойти табличную часть
Для обхода табличной части можно использовать цикл Для каждого
Для каждого Строка из ТабличнаяЧасть Цикл
Сообщить ( Строка . РеквизитТабличнойЧасти ) ;
На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита.
Как получить и обойти выделенные строки табличной части
Для вывода информации из табличной части объекта служит элемент формы Табличное поле. Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения.
Для получения перечня выделенных строк используется следующий код:
Для того чтобы обойти выделенные строки используется цикл Для каждого:
ВыделенныеСтроки = ЭлементыФормы . ИмяТабличногоПоля . ВыделенныеСтроки ;
Для каждого Строка из ВыделенныеСтроки Цикл
Как программно выделить строки табличной части (табличного поля) и снять выделение
Чтобы программно снять выделение строк табличного поля:
Чтобы программно выделить все строки табличного поля:
Для каждого ТекущаяСтрока Из ТабличнаяЧасть Цикл
ЭлементыФормы . ИмяТабличногоПоля . ВыделенныеСтроки . Добавить ( ТекущаяСтрока ) ;
КонецЦикла ;
Как очистить табличную часть
Как получить текущую строку табличной части
Текущая строка — это срока, в которой у пользователя в данный момент находится курсор. Чтобы ее получить, нужно обратиться к элементу управления на форме, который связан с табличной частью.
Для обычных форм код будет выглядеть так:
Для управляемых форм:
Как добавить новую строку в табличную часть
Добавление новой строки в конец табличной части:
Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):
НоваяСтрока = ТабличнаяЧасть . Вставить ( Индекс )
//Индекс - номер добавляемой строки. Нумерация строк начинается с нуля.
НоваяСтрока . Реквизит 1 = "Значение" ;
Как программно заполнить реквизиты строки табличной части
Если нужно программно заполнить реквизиты строки табличной части, которую добавляет пользователь, необходимо использовать обработчик события табличной части ПриНачалеРедактирования.
Создаваемая обработчиком процедура имеет три параметра:
- Элемент — содержит элемент управления ТабличноеПоле.
- НоваяСтрока — булево. Содержит значение Истина, если добавляется новая строка табличной части, и Ложь, если пользователь начал редактировать уже существующую строку.
- Копирование — булево. Содержит значение Истина, если пользователь копирует строку, и Ложь в остальных случаях.
Рассмотрим пример. Допустим, нам нужно заполнить реквизит табличной части СчетУчета, в случае, когда добавляется новая строка. При редактировании существующей строки изменять счет учета не нужно.
Процедура ТабличнаяЧастьПриНачалеРедактирования ( Элемент , НоваяСтрока , Копирование )
//Если пользователь редактирует существующую строку, то ничего не делаем
Если НЕ НоваяСтрока Тогда
Возврат ;
КонецЕсли ;
//Если же строка новая, устанавливаем счет учета
ТекСтрока = Элемент . ТекущиеДанные ; //Получили текущую строку табличной части
ТекСтрока . СчетУчета = ПланыСчетов . Хозрасчетый . НужныйСчетУчета ;
КонецПроцедуры
Работа с табличной частью объектов в 1С : 13 комментариев
Приветствую!
Только начал изучать 1С.
Кое что уже знаю, но мало и опыта практически ноль.
Создал свою конфигурацию, пока только для тестов.
В данной конфигурации есть документ, назовем его «Заявка».
В данной заявке, есть табличная часть, в которой есть реквизит «Стоимость».
Получается, что таких документов много и мне нужно сложить все реквизиты «Стоимость» из всех документов «Заявка».
Вопрос.
Как мне это сделать?
Предполагаю, что нужно использовать функцию с экспортом, в которой будет цикл «Для Каждого ……»
Но как это оформить, пока не могу понять…
Сделать это можно по-разному. Цикл Для каждого, на мой взгляд, не очень подходящий вариант, т.к. будет работать слишком долго. Да и надо еще где-то список документов брать.
Спасибо!
Буду пробовать.
А может это подойдет?
Табличная часть (Tabular section)
Итог (Total)
Синтаксис:
Тип: Число; Строка.
Индекс либо имя колонки, по которой подсчитывается итог.
Возвращаемое значение:
Тип: Число; Неопределено.
Суммирует значения всех строк в указанной колонке.
Если в колонке установлен тип и он единственный, то при суммировании будет предприниматься попытка преобразования значения к типу Число.
Если колонке не присвоены типы, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них есть тип Число, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них нет типа Число, то результатом будет значение Неопределено.
Сервер, толстый клиент, внешнее соединение.
Пример:
Это подошло бы, если бы нужно было суммировать колонку в одном документе. А Юрию нужно суммировать колонку Стоимость всех документов.
Добрый день!
Достаточно ли будет обратиться в модуле формы к текущей строке табличной части или в модуле менеджера тоже нужно будет что-то прописать?
Не совсем понял, о чем конкретно вопрос.
Если о том, как получать и работать с текущей строкой табличной части, то в модуле менеджера ничего писать не нужно.
Здравствуйте!
Опишу вкратце ситуацию:
Из документа вызывается команда печати штрихкодов и в обработку печати передается, как я понимаю, весь контекст документа и печатаются этикетки для всех строк документа. Возможно ли в обработке печати получить информацию только о выделенных строках из этого контекста ? Прилагаю код модуля команды ПечатьЭтикеток.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
//Создаём новую коллекцию печатных форм
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(«ПечатьЭтикеток»);
//Добавляем в коллекцию сформированный табличный документ
КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДокумент;
//Устанавливаем параметры печати (при необходимости)
КоллекцияПечатныхФорм[0].Экземпляров = 1;
КоллекцияПечатныхФорм[0].СинонимМакета = «ПечатьЭтикеток»; //Так будет выглядеть имя файла при сохранении в файл из формы «Печать документов»
//Вывод через стандартную процедуру БСП
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, Неопределено, Неопределено);КонецПроцедуры
ТабДокумент.АвтоМасштаб = истина ;
ТабДокумент.ОтображатьСетку = Ложь;
ТабДокумент.ТолькоПросмотр = Истина;
ТабДокумент.ОтображатьЗаголовки = Ложь;
Макет = ДокСсылка.ПолучитьОбъект().ПолучитьМакет(«Этикетка»);
Для каждого Стр Из ДокСсылка.Картриджи Цикл
//Если Лев(Стр.СерийныйНомер,2) «30» Тогда
// Продолжить;
//КонецЕсли;
ОбластьМакета = Макет.ПолучитьОбласть(«ШПК»);
ЧтоТо = Стр.СерийныйНомер;
ПервыйМодуль.ВывестиШтрихкодДокументаВОбластьМакета(ВнешняяКомпонента,ОбластьМакета,ЧтоТо) ;
Информацию о выделенных строках вы можете получить только в модуле формы документа, причем, если мне не изменяет память, это должна быть клиентская процедура. По ссылке на документ выделенные строки получить нельзя.
Значит я на клиенте должен сформировать таблицу выделенных строк и уже ее передавать в обработку печати ?
Да, логика такая. Только учтите, что таблица значений не передается с клиента на сервер.
Выделенный строки табличного поля на форме — это массив строк. Надо попробовать, передастся ли он. Если да, хорошо. Если нет — надо думать, как его передать.
Доброго времени суток!
Создаю обработку на обычных формах, в которой имеется несколько Табличных частей. Они в свою очередь находят отображение в Форме обработки. И если данные первых 3, меня после закрытия Формы, не интересуют, то данные последней хотелось-бы использовать в дальнейшем, пока открыта обработка. В настоящее время при закрытии Формы Табличные части очищаются. В дальнейшем, в новом сеансе работы с обработкой эти данные не нужны. Насколько я понимаю Функции сохранения Данных Табличной части обработки не существует. Табличную часть в обработке решил использовать из-за возможности сохранить структуру Данных. Как мне сохранить эти данные для использования в других окнах?
Может у Вас есть видео по данному вопросу?
Как сохранить массив в файл, если в нем хранятся Справочники как объекты.
Сейчас мне достаточно использовать функцию ЗначениеВФайл, но правильно сохранить не получается.
Осуществляю выгрузку справочников в текстовый файл.
Осуществляю выгрузку справочников в текстовый файл. Есть справочник он ссылается на другой.
Считать массив из файла и отсортировать его. Отсортированный массив сохранить в файл
Создать одномерный массив. Сохранить его в файл. Считать массив из файла и отсортировать его.
Создать массив натуральных трёхзначных чисел. Открыть файл для редактирования. В новый файл сохранить числа кратные трём
Доброе утро. Помогите пожалуйста. Создать массив натуральных трёхзначных чисел. Открыть файл для.
Сохранить 3d массив в файл
Собственно вопрос в заголовке. Помогите чем сможете.
Как я не люблю вопрос Зачем :D
У меня мало практического опыта работы в 1С
У меня вообще нет опыта работы с файлами кроме как с txt
Мне нужно облегчить себе жизнь, написав несложную обработку.
Чтобы облегчить себе жизнь обработкой, мне достаточно перенести 2 справочника (В одном из них несколько справочников) из одной конфы в другую. (одна локальная-черновая, вторая серверная рабочая. Сами конфигурации абсолютно одинаковые)
Т.к. с теми справочниками никто кроме меня не работает, то я посчитал, что записав их в 2 отдельных массива , я смогу записать их как объекты на диск для копирования с черновой конфы в рабочую.
Т.к. я бы предпочел знать то чего не знаю, даже если потом использовать не буду.
Т.к. я пока еще понятия не имею о сериализаторах, xml и как с ними работать.
Т.к. мне это интересно.
Т.к. я не знаю какой подход правильный. (по передаче объектов из в)
Т.к. я не разобрался когда пытался такое сделать.
Т.к. я весь день убил, но так и не осилил простую с виду задачу.
Т.к. я посчитал, что такой вариант выглядит проще чем те, которые мне приходили на ум.
много еще причин нужно?
Мне не обязательно именно так (чтоб массив в файл), но я не отказываюсь от того, что мне это интересно.
daslex, "сохранить массив в файл" и перенести данные между двумя базами все таки разные вещи.
1. Изучите в синт. помощнике описание и методы объекта ТекстовыйДокумент .
2. Обходя значения массива в цикле записывайте их в текстовый документ.
Относительно ваших дальнейших изысканий в области обменов данными, я бы посоветовал изучить конфигурацию "Конвертация данных". Ваша задача с помощью нее решается за 1 минуту без программирования.
Большая вероятность есть того, что текстовый документ мне не подходит.
Конвертацию данных - буду смотреть.
Вопрос как бы в силе, несмотря на последний совет.
Есть готовая обработка ВыгрузкаЗагрузкаДанныхXML.epf, которая позволяется обмениваться данными между идентичными конфигурациями.
Есть она в поставке Конвертация данных.
Tklwegsd, спасибо.
нашел в нете, скачал, использовал (типа посмотрел как работает).
Но в будущем мне точно нужно будет перекидывать информацию из разных баз.
Уже сейчас нужно. Пока еще можно обойтись текстовым документом, но текстовый документ удобен совсем не всегда. Поэтому я бы предпочел узнать сейчас некоторые моменты, т.к. это лучше чем узнавать их в случае нехватки сроков (никто будущего не знает)
Наиважнейший вопрос. Он касается алгоритма. Ламер упрямо долбится, как правило, в ворота, одиноко стоящие посреди поля. Это образно. А предметно - если явный алгоритмический косяк - к примеру, сохранять объекты, то и ставится вопрос "зачем". Объект динамичен. ЧТО ВЫ ХОТИТЕ СОХРАНИТЬ?
Хотел в Документообороте 1.3 сохранить правила Автозаполнения шаблонов.
(Справочник ПравилаАвтозаполненияФайлов и его табличную часть ДанныеАвтозаполнения) (имена даю не совсем точные)
Обработка-то, упомянутая в теме вполне меня устраивает для решения задачи. Дальше просто что-то типа спортивного интереса.
Несомненно, я попытаюсь научиться работать с конвертацией данных. Но интуитивно могу догадываться, что в некоторых ситуациях ручная работа будет выгоднее. (мои такие догадки ничем не обоснованы, просто ощущение есть).
Мысли вслух
Делать я начинал выбирая запросом все элементы справочника, записывал их в таблицу значений, таблицу значений в файл, потом загружал, при необходимости создавал новые справочники, куда вписывал информацию из загруженной ТЗ. Но под такой подход пословица подходит: "Чем дальше в лес - тем гуще дебри". Сложности возникли, поэтому решил упростить сохранив справочники в массивы, а массивы как объекты в файлы.
Но, похоже, что такой подход типичная ошибка разного рода новичков.
С текстовым файлом тоже сходу не получилось, т.к. количество объектов разное, что-то еще разное. Создавать кучу запросов, чтоб результаты записывать в отдельные файлы, а потом собирать все эти файлы не хотелось совсем.
если в массиве хранятся объекты типа справочник, то ЗначениеВФайл("путь",Массив) сохраняет в файл не в виде массива объектов, а в виде какого-то массива (может только колонку первую или строку, не вникал я)
если условно предположить, что в справочнике 5000 реквизитов, надо такой перекинуть из одной конфы в другую, то решение с текстовым файлом вроде бы мало подходит. Это одного однотипного кода сколько получится.
если писать для пользователей, которые далеки от программирования, то им, возможно, невозможно будет осилить конвертацию данных. (такой тип людей есть, что им кнопка нужна и такой тип людей точно работает с 1с как пользователи). Тут как ни крути самописное спасет.
главная проблема в том, что я не знаю как сохранить массив, содержащий справочники, на диск. и не придумал какой путь правильный (чтобы если не массивом справочников в файл на диск).
Я могу сказать немного странную вещь.
Но,
Предположим пользователь работает менеджером. Он ведет работу с документами, названия у которых не очень стандартные. (пусть даже простая смесь латинских символов). Сам пользователь работает с двумя разными конфигурациями. В конфигурациях внутри базы хранят информацию об одних и тех же объектах (сами реквизиты объектов могут разнится, но по сути это 1 объект, описанный в двух конфигурациях.) так как с конфигурациями работает пользователь, то чтобы автоматизировать его работу не заставляя его запускать тысячу программ для каждой его цели, можно создать волшебную для него кнопку. Загрузить в. Выгрузить для.
Сам по себе смысл вопроса в том, чтобы автоматизировать то, что можно автоматизировать, т,к. 1c изначально предназначен для автоматизации . А простое копирование мышкой имен и названий бывает приводит к ошибкам(не то выбрал, не то скопировал, не туда вставил)
я посчитал, что работать с объектами как с объектами мне поможет массив объектов. Мне не нужно следить за ссылочной целостностью, скоростью или за чем-то ещё.
Бывает же необходимо добавить объект конфигурации программно и добавляют. Я бы просто цеплял данные из сохраненного объекта и записывал их в создаваемое.
Читайте также: