8.х Предлагаю открыть обмен полезными процедурками

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Доктор Руфус Бейли, 23 апр 2010.

  1. TopicStarter Overlay
    Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Не так давно я начал стоить для себя модуль, набитый всякими процедурками разной степени полезности, которые облегчают мне жизнь (то есть, начал более менее полноценно пользоваться фичами, ради который ООП вообще было придумано). Предлагаю вашему вниманию пару процедур, которые не привязаны к особенностям учёта (и строения головного мозга некоторых представителей) нашей организации и могут быть полезны в той или иной мере: кто возьмёт полностью, а кто найдёт там пару решений для себя.

    Отдельное спасибо выделю тем, кто разумно прокритикует и предложит вариант, выполняющий то же самое, но получше.

    Первая процедурка выигрывает перед индикатором тем, что ей не нужно что-либо менять в форме. (например, добавлять туда индикатор - тупо воткнул процедуру и радуйся)
    Код:
    //Простенькая процедурка, выводящяя стилилизованный под гармошку прогресс-бар в процентах. v1.0
    //	-ТекущееЗначение. Обязательный. Целое число. | Счёт с нуля.
    //УВАГА: Процедура сама наращивает текущее значение.
    //	-МаксимальноеЗначение. Обязательный. Целое число. | Значение, равное 100%. Счёт с 1.
    //	-Префикс. Необязательный. Строка. | Текст, выводимый перед прогресс-баром.
    //	-Постфикс. Необязательный. Строка. | Текст, выводимый после прогресс-бара.
    
    Процедура ПрогрессБар(ТекущееЗначение, МаксимальноеЗначение, Префикс = "", Постфикс = "") Экспорт
    ТекущееЗначение = ТекущееЗначение + 1;
    Процент = Окр(ТекущееЗначение/?(МаксимальноеЗначение = 0, 1, МаксимальноеЗначение)*100);
    Строка = Префикс + " [";
    К = 0;
    Пока К < 100 Цикл
    К = К+1;
    Строка = Строка + ?(К <= Процент, "|", ".");
    КонецЦикла;
    Строка = Строка + "] " + Процент + "% " + Постфикс;
    Состояние(Строка);
    КонецПроцедуры
    
    Использование простое. Вот пример:

    Код:
    К = 0;
    Н = Таблица.Количество();
    Для каждого Строка из Таблица цикл
    ДИО_Полезности.ПрогрессБар(К, Н, "Обрабатываются телефоны");
    Строка.Представление = ОбработатьТелефон(Строка.Представление);
    Если ЭтоМобильный(Строка.Представление) Тогда
    НоваяСтрока = СМС.Добавить();
    НоваяСтрока.Телефон = Строка.Представление;
    КонецЕсли;	
    КонецЦикла;
    
    Вторая процедура не столько ценна сама по себе, сколько, как пример редкостно-дурной головы. Создавалась для БП 1.6.24.7, и её суть в том, что в проводке, которая передаётся в неё, меняются счета дебета и кредита, а так же меняется положительность и отрицательность всех значений.


    Код:
    Процедура РазвернутьПроводку(Проводка) Экспорт
    СчетДТ = Проводка.СчетДТ;
    КоличествоДТ = Проводка.КоличествоДТ;
    СубконтоДТ = Новый ТаблицаЗначений;
    СубконтоДТ.Колонки.Добавить("Ключ");
    СубконтоДТ.Колонки.Добавить("Значение");
    Для Каждого Строка из Проводка.СубконтоДТ Цикл
    Если Не ТипЗнч(Строка.Значение) = ТипЗнч(Неопределено) Тогда
    НоваяСтрока = СубконтоДТ.Добавить();
    НоваяСтрока.Ключ = Строка.Ключ;
    НоваяСтрока.Значение = Строка.Значение;
    КонецЕсли;	
    КонецЦикла;	
    СчетКТ = Проводка.СчетКТ;
    КоличествоКТ = Проводка.КоличествоКТ;
    СубконтоКТ = Новый ТаблицаЗначений;
    СубконтоКТ.Колонки.Добавить("Ключ");
    СубконтоКТ.Колонки.Добавить("Значение");
    Для Каждого Строка из Проводка.СубконтоКТ Цикл
    Если Не ТипЗнч(Строка.Значение) = ТипЗнч(Неопределено) Тогда
    НоваяСтрока = СубконтоКТ.Добавить();
    НоваяСтрока.Ключ = Строка.Ключ;
    НоваяСтрока.Значение = Строка.Значение;
    КонецЕсли;	
    КонецЦикла;
    Проводка.Сумма = 0 - Проводка.Сумма;
    Проводка.СчетДТ = СчетКТ;
    Проводка.КоличествоДТ = 0 - КоличествоКТ;
    Проводка.СубконтоДТ.Очистить();
    Для каждого Строка из СубконтоКТ Цикл
    БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДТ, Проводка.СубконтоДт, Проводка.СчетДТ.ВидыСубконто.Найти(Строка.Ключ).НомерСтроки, Строка.Значение);	
    КонецЦикла;	
    Проводка.СчетКТ = СчетДТ;
    Проводка.КоличествоКТ = 0 - КоличествоДТ;
    Проводка.СубконтоКТ.Очистить();
    Для каждого Строка из СубконтоДТ Цикл
    БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКТ, Проводка.СубконтоКт, Проводка.СчетКТ.ВидыСубконто.Найти(Строка.Ключ).НомерСтроки, Строка.Значение);	
    КонецЦикла;
    
    КонецПроцедуры
    
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Хорошая тема, думаю получит продолжение и отклики
  3. TopicStarter Overlay
    Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Ещё и такая функция вашему вниманию:
    Её задача - Определить, раз в какое время (в днях) данный контрагент получает от нас товары. В случае, если поставок было меньше двух (по логичным причнам, это минимальное количество поставок, по которым можно рассчитать интервал), возвращает значение "30".

    Код:
    Функция ОпределитьПериодичностьПоставок(Контрагент) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |	РеализацияТоваровУслуг.Дата КАК Дата
    |ИЗ
    |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    |	РеализацияТоваровУслуг.Проведен = ИСТИНА
    |	И РеализацияТоваровУслуг.Контрагент = &Контрагент
    |
    |УПОРЯДОЧИТЬ ПО
    |	Дата";
    Запрос.УстановитьПараметр("Контрагент", Контрагент);
    Выборка = Запрос.Выполнить().Выбрать();
    К = 0;
    Н = Выборка.Количество();
    ДатаПервойОтгрузки = НачалоДня('00010101');
    ДатаПоследнейОтгрузки = НачалоДня('00010101');
    ПериодичностьПоставок = 0;
    ДатаСледующегоЗаказа = НачалоДня('00010101');
    Пока Выборка.Следующий() Цикл
    К = К + 1;
    Если К = 1 Тогда
    ДатаПервойОтгрузки = Выборка.Дата;	
    КонецЕсли;
    Если К = Н Тогда
    ДатаПоследнейОтгрузки = Выборка.Дата;	
    КонецЕсли;
    КонецЦикла;	
    Если Н <= 1 Тогда
    ПериодичностьПоставок = 30;
    Иначе
    ПериодичностьПоставок = Окр(((НачалоДня(ДатаПоследнейОтгрузки) - НачалоДня(ДатаПервойОтгрузки))/(24*60*60))/Н)
    КонецЕсли;
    
    Возврат ПериодичностьПоставок;
    КонецФункции
    
Похожие темы
  1. Che Burashka
    Ответов:
    1
    Просмотров:
    3.586
  2. 1C-KA_RU
    Ответов:
    0
    Просмотров:
    760
  3. Бухгалтерский угодник
    Ответов:
    6
    Просмотров:
    1.103
  4. Андрей 777
    Ответов:
    3
    Просмотров:
    435
Загрузка...

Поделиться этой страницей