Сколь нейтральной не
казалась бы тема,
Ваше сообщение кого-нибудь да обидит.
1С:Школа. Выпуск 20. "Список значений и текстовый файл".
В выпуске №19 речь шла о закладках в форме.
В тема не сложная и проблем с решением задач
быть не должно. Остановиться хотелось бы
на одной задаче.
Задача 4. В форме
добавьте 7 флажков, названных днями недели.
Форма должна работать просто: если флажок
установлен, появляется соответствующая
закладка, если флажок снят - закладка
пропадает. Условие: закладки называются как
дни недели. При этом они должны быть по
порядку: "вторник" не может быть слева
от "понедельника" - каждая закладка
добавляется на свое место, а не справа.
Решений
у этой задачи может быть несколько: от
простых решений с перебором всех флажков,
до "навороченных" процедур
самостоятельно определяющих какой флажок
установил пользователь. Решение считается
правильным если 1. при добавлении новой
закладки - не происходит смена текущей
выбранной закладки. 2. Находясь в форме, в
меню "Действие" Вы можете сделать
сохранение текущей расстановки флажков -
при открытии они будут установлены
автоматически. Ваше решение правильное,
если и закладки сами восстановятся.
Простые решения рассматривать не интересно.
Одно из любопытных решений с комментариями
Вы можете посмотреть здесь.
Сегодня
рассмотрим еще одно применение списка
значений. Многие, кто конфигурит 1С - ранее
работали с БД в формате БДФ и по этому
безмерно его любят и пренебрегают
текстовыми файлами из-за неудобства работы.
Знаю это на собственном опыте. Но после того,
как я обнаружил способ с которым собираюсь
Вас познакомить - я НИ РАЗУ после этого не
работал с ДБФ, а всегда пользовался
текстовыми файлами: и для обмена данными
между базами, и для перехода на новый план
счетов. С помощью текстовых файлов решается
проблема переноса документов, справочников,
остатков по счетам с аналитикой и без.
У
списка значений есть один замечательный
метод ВСтрокуСРазделителями(). Если этот
метод применить к списку значений, то он
вернет строку, содержащую значения из
списка в кавычках, разделенные запятыми.
Этим методом решается проблема формата
текстового файла. Метод ИзСтрокиСРазделителями()
действует наоборот - из строки получается
готовый список значений.
Важно:
После того как вы преобразовали список
значений в строку - все хранимые значений
превратились в их тектовое предстаавление.
Это означает, что если у Вас в списке
значений был документ, то в результате
работы метода ВСтрокуСРазделителями()
Вы получите строковое представление этого
документа, а не сам документ. Обращаем Ваше
внимание на то, что в в строку выгружаются
только значения! Все представления
теряются.
Теперь использую объект "Текст"
вы сможете легко сформировать из строк
текстовый файл и потом прочитать его. В
самом простом примере это выгладит
примерно так.
Выгрузка данных.
Процедура Сформировать()
Т=СоздатьОбъект("Текст");
Сз=создатьОбъект("СписокЗначений");
спр=создатьОбъект("Справочник.Контрагенты");
Спр.ВыбратьЭлементы();
пока спр.ПолучитьЭлемент()=1 цикл
Если спр.ЭтоГруппа()=1 тогда///не
будем пока с группами связываться.
продолжить;
конецЕсли;
сз.УдалитьВсе();///каждый
список - новый элемент
сз.ДобавитьЗначение(спр.Код);//добавляем
необходимые реквизиты.
сз.ДобавитьЗначение(спр.Наименование);
сз.ДобавитьЗначение(спр.ПолнНаименование);
сз.ДобавитьЗначение(спр.ВидКонтрагента);
стр=сз.ВСтрокуСРазделителями();
Т.Добавитьстроку(стр);
конецЦикла;
т.Записать(КаталогИБ()+"выгрузка.txt");
КонецПроцедуры
Загрузка данных:
Процедура Загрузка()
т=создатьОбъект("Текст");//из этого
текста будем доставать значения
сз=создатьОбъект("СписокЗначений");//
в этот список будет конвертировать из
строки
т.Открыть(КаталогИБ()+"выгрузка.txt");//открываем
файл
Для к=1 по т.КоличествоСтрок() цикл//
бежим по тексту
стр=т.ПолучитьСтроку(к);
сз.ИзСтрокиСРазделителями(стр);//получили
список значений
код=сз.ПолучитьЗначение(1);
//из соответствующей позиции получаем,
соответствующие реквизиты
Наименование=сз.ПолучитьЗначение(2);
ПолнНаименование=сз.ПолучитьЗначение(3);
ВидК=сз.ПолучитьЗначение(4);///вид контрагента - должно быть перечисление
Если ВидК="Прочая организация" тогда
видК=Перечисление.ВидыКонтрагентов.Организация;
иначеесли ВидК="Физ. лицо" тогда
видК=Перечисление.ВидыКонтрагентов.ЧастноеЛицо;
иначеесли ВидК="Дочернее общество" тогда
видК=Перечисление.ВидыКонтрагентов.Дочернееобщество;
иначеЕсли ВидК="Зависимое Общество" тогда
видК=Перечисление.ВидыКонтрагентов.ЗависимоеОбщество;
иначе
видК="";
КонецЕсли;
/////////
//////// здесь
требуется дописать кусок для генерации
новых элементов в справочнике
////////
конецЦикла;
конецПроцедуры
Загрузить несколько
сложней, чем выгрузить. Обратите внимание
на то, как получаем вид контрагента. Сначала
получили строку, а потом соответствующее
ему значение перечисления. И это касается
всех значений объектов кроме даты, строки и
числа.
На самом деле выгрузка и
загрузка осуществляется не так просто. Если
Вы выгружаете многоуровневый справочник,
то надо кроме самого элемента выгружать
информацию о его родителе (чтобы найти его в
конфигурации-приемнике), признак группа/элемент,
может быт понадобится номер уровня.
Благодаря
тому, что каждая новая строка в тексте может
быть отлична от предыдущей - Вы сможете
выгружать документы с шапками и табличными
частями. В ДБФ это было не так легко.
Самое трудное - это корректная загрузка
информации. По опыту могу сказать, что
написание процедуры хорошей загрузки
занимает 80% времени от всей процедуры
выгрузки/загрузки.
Задача для
самостоятельной работы: Учитесь выгружать
и загружать данные начиная с простых
случаев и заканчивая сложными
1. справочник одноуровневый
2. Справочник многоуровневый с
уникальностью кодов / без уникальности
кодов.
3. Справочники с периодическими реквизитами
с переносом всех значений периодических
реквизитов.
4. Подчиненные справочники
5. Документы без табличной части
6. Документы с табличной частью.
Новости сайта 1С:Школа
В разделе "Полезности" появилась
удобная утилита для автоматического
архивирования данных по заданному
расписанию.
Мы предлагаем Вам Учебный курс "План
Счетов. Проводки. Бухгалтерские Итоги".
1-ая неделя. План счетов. Настройка,
параметры. Синтетические и аналитические
счета. Примеры использования плана
счетов в типовой конфигурации.
Рекомендации по настройке плана счетов в
различных ситуациях.
2-ая неделя. Формирование проводок а)
ручное формирование. б) формирование
проводок документами. Отчеты по проводкам.
Решение задач.
3-я неделя. Получение бухгалтерских
результатов. Построение отчетов без
использования аналитики. Работа с
основными итогами. Получение итогов с
помощью бухгалтерского запроса. Решение
задач.
4-ая неделя. Получение отчетов с
использованием аналитики. Решение задач.
5-ая неделя. Механизм расшифровки
бухгалтерских отчетов. Консультации.
Ответы на вопросы. Решение дополнительных
задач повышенной сложности.
Весь курс рассчитан на 5 недель. Каждую
неделю в понедельник вы будете получать
теоретический материал с примерами
использования и список задач (10-15) для
самостоятельного решения. В течении недели
Вы можете консультироваться по вопросам
решения задач и применения изученного
материала по электронной почте. По пятницам
Вы будете получать решения задач текущего
урока. Это будут решения, которые нам
кажутся наиболее оптимальными в данной
ситуации. Решения будут содержать
подробные комментарии и объяснения
применяемых алгоритмов и методов решения. Стоимость
курса до 15 апреля 2002 года составляет 77$.
Заявки и вопросы присылать по адресу school1c@narod.ru
Требование: необходимо уметь работать
с базовыми объектами в 1С:Предприятии 7.7. (Справочники,
документы, таблицы, списки значений и
таблицы значений).
Приходит много запросов с просьбой
выслать предыдущие выпуски. Архив рассылки
находится по адресу http://www.school1c.narod.ru.
Если у Вас есть пожелания и предложения - пишите
по адресу school1c@narod.ru