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

Школа 1С

  Все выпуски  

1С:Школа


Информационный Канал Subscribe.Ru - www.lycos.ru

    На свете есть хорошая рассылка "Волшебство программирования на 1С:Предприятие 7.7". Обучение программированию в среде 1С:Предприятие 7.7. Написано так просто,что разберутся даже чайники. Небольшие комплексные примеры показывают, что на 1С можно быстро и легко создавать работающие системы как по мановению волшебной палочки! Все профессионалы в 1С когда-то были чайниками. При желании через пару дней вы начнете что-то понимать в 1С, через неделю вы почувствуете дух 1С, а через месяц можно устраиваться на работу на вполне приличную зарплату. При желании. Если 1С уже сейчас занимает в вашей жизни важное место, тогда обратите внимание на методику разработки конфигурации, на стиль программирования на 1С. Уверен, вы откроете для себя много нового!   

Рассылки Subscribe.Ru

Волшебство программирования на 1С:Предприятие 7.7

"Немногие думают чаще, чем два или три раза в год. Я добился мировой 
известности благодаря тому, что думаю раз или два в неделю". 
Бернард Шоу

1С:Школа.
Выпуск 25.
"Объект "Периодический".


    Как я и обещал, сегодня мы рассмотрим работу с объектом, который имеет самое непосредственное отношение к периодическим реквизитам. Я думаю, что Вы уже твердо усвоили, что для работы с периодическими реквизитами  всегда используется дата: вы всегда указываете дату на которую хотите получить значение и всегда указываете дату с которой хотите изменить значение периодического реквизита справочника или константы. Но попробуйте решить следующую простую задачу: необходимо определить когда менялось значение реквизита и какие значения принимались. Используя материалы предыдущих выпусков, легко получается следующая процедура: 

Процедура Сформировать() 
    НачДата='01.01.2001'; КонДата='01.12.2002';   ///даты могут быть любыми
        ПредыдущееЗначение="";    
        для к=НачДата по конДата цикл    //пробежимся по всем датам между НачДата и КонДата
            сейчас=Константа.Руководитель.Получить(к);
            Если сейчас<>ПредыдущееЗначение тогда    //простое условие сравнения
                сообщить(к+" "+Строка(сейчас)); //сообщаем, если значение изменилось
                ПредыдущееЗначение=сейчас;     //
            конецЕсли;
        конецЦикла;
КонецПроцедуры

Прим.:  я надеюсь, что цикл по датам не вызывает у Вас затруднений?
Процедура простая, но трудоемкая для 1С - ранее я уже говорил, что работа с периодикой очень медлительна.

Знакомьтесь! Объект "Периодический". Он решит Ваши проблемы. Этот объект не имеет визуального представления. Доступ к его атрибутам и методам осуществляется после создания объекта с помощью метода "СоздатьОбъект". Основное назначение  объекта - доступ к значениям периодических реквизитов. 

Атрибуты объекта "Периодический":

Значение - доступ к значению периодического реквизита или периодической константы.
ДатаЗнач
- доступ к дате значения периодического реквизита или периодической константы.

Методы, применяемые к объект, достаточно просты и понятны, но особого внимания заслуживает метод ИспользоватьОбъект.

ИспользоватьОбъект(имяРеквизита, Объект) - метод назначает объекту Периодический - реквизит объекта для работы. Что это означает? Есть объект - элемент справочника сотрудники - "Петров". У этого Петрова - куча периодических реквизитов, но нас интересует только один - "Оклад".  Вот этот метод и ждет от нас, что мы ему скажем ИспользоватьОбъект("Оклад", спр.ТекущийЭлемент()) , где спр.ТекущийЭлемент() - тот элемент на котором мы стоим (не важно как мы его получили, возможно, спр.НайтиПоНаименованию("Петров")). Предостерегаем от ошибок: ИспользоватьОбъект("Оклад", "Справочник.Сотрудники"); ИспользоватьОбъект("Оклад", "Справочник.Сотрудники.Петров"); 
Если вместо наименования реквизита передать пустую строку, то дальнейшая работа будет выполняться со всеми периодическими реквизитами справочника. 

Рассмотрим примеры, отражающий основные методики работы с объектом. 

Задача 1. Перебрать все значения курса доллара за заданный период.

Процедура Перебор()
    п=СоздатьОбъект("Периодический");  //создали объект
    спр=СоздатьОбъект("Справочник.Валюты");    //создаем справочник, чтобы спозиционироваться на объекта
    если Спр.НайтиПоНаименованию("USD")=0 тогда //ищем доллары
        сообщить("не нашли валюту");     //если не нашли, уходим
        возврат;
    конецЕсли;
    п.ИспользоватьОбъект("Курс", спр.ТекущийЭлемент()); //вот этот метод
    НачДата='01.01.2001'; КонДата='01.12.2002';    //даты могут быть любые
    п.выбратьЗначения(НачДата, КонДата);    //выбираем периодику курса
    пока п.ПолучитьЗначение()=1 цикл    //получаем значения
        Сообщить(" "+п.ДатаЗнач+" "+п.Значение);     //сообщаем
    конецЦикла;
конецПроцедуры

Помните таблицу в выпуске №23, где слева были даты, а справа значения на дату. Фактически эта процедура бежит по таблице. В общем все достаточно просто.  В выборке можно использовать метод "ОбратныйПорядок" и "ВыбратьПоДокументу". 

Задача 2. Удалить все значения курса доллара, которые меньше 30 рублей. В предыдущее решение требуется добавить несколько строк

...........................................
пока п.ПолучитьЗначение()=1 цикл    //получаем значения
если п.Значение<30 тогда
    Сообщить(" "+п.ДатаЗнач+" "+п.Значение);
    п.Удалить();
конецЕсли;
КонецЕсли;
.............................................

Задача 3. Очистить всю историю в справочнике "Валюты" до 2001 года. Самостоятельно.

Задача 4. Написать обработку, позволяющую переносить с помощью текстового файла значение курса выбранной валюты за любой период. Самостоятельно.

Ошибка, которая присутствует в 1С (а может и не ошибка, но я нигде не читал про такое). Как известно, на каждую дату может быть задано одно значение. Но можно добиться и  2 значения. Когда возникает 2 значения: если вы изменяете периодические реквизит документом (в модуле проведения)  и с помощью объекта периодический. Попробуйте это проделать для одной и той же даты! Система не ругнется и молча создаст 2 строки в истории реквизита.  Как это использовать технологически не знаю, но точно знаю, что можно наступить на это и искать ошибку долго. 


Приходит много запросов с просьбой выслать предыдущие выпуски. Архив рассылки находится по адресу http://www.school1c.narod.ru.
Если у Вас есть пожелания и предложения - пишите по адресу school1c@narod.ru


Искренне Ваш : Алексей Колосов



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

В избранное