Отправляет email-рассылки с помощью сервиса Sendsay

Школа 1С

  Все выпуски  

1С:Школа


Служба Рассылок Subscribe.Ru

Сколь нейтральной не казалась бы тема, 
Ваше сообщение кого-нибудь да обидит.

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


Автор рассылки: Алексей Колосов

1C:TOP-100

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное