Показаны сообщения с ярлыком алгоритмы. Показать все сообщения
Показаны сообщения с ярлыком алгоритмы. Показать все сообщения

пятница, 16 августа 2019 г.

В форме обработки 1С 7.7 не работает команда Активизировать


Проблема: При попытке в коде обработки выполнить команду Активизировать, чтобы вернуть курсор в поле ввода - получаем ошибку "В данной формуле не может быть вызвана эта процедура(функция)"

Решение: Несколько вариантов, например Установить фокус на поле ввода 7.7 или Активизировать поле ввода
Предлагаемый метод - использовать фиктивное закрытие формы. 
Бонус - получаем защиту от случайных нажатий клавиши Esc

Пример:
"РазрешитьЗакрытие" - служебная переменная, анализируемая в процедуре ПриЗакрытии().
"Штрихкод" - имя поля на форме, которое надо активизировать.

При закрытии анализируется переменная "РазрешитьЗакрытие", и в зависимости от её значения -  закрытие отменяется, активизируется требуемое поле и снова таки закрытие отменяется, или же - просто закрываем форму.

Перем РазрешитьЗакрытие;    // флаг используем для разрешения закрытия формы и для обхода ошибки активизации реквизита

Процедура АктивизироватьШтрихКод()    // через фиктивное закрытие формы обойдем ошибку функции Активизировать
    РазрешитьЗакрытие = 2;
    Форма.Закрыть(0);       // вызываем процедуру закрытия
КонецПроцедуры

Процедура ЗакрытьОбработку()        // нажали на кнопку Х - разрешаем закрытие
    РазрешитьЗакрытие = 1;
    Форма.Закрыть(0);       // вызываем процедуру закрытия
КонецПроцедуры

Процедура ПриЗакрытии()
   
    Если РазрешитьЗакрытие=0 Тогда        // простое закрытие запрещаем (страхуемся от случайных закрытий по ESC)
        Сообщить("Закрыть форму можно только по кнопке!");   
        СтатусВозврата(0);    // отменяем закрытие
    ИначеЕсли РазрешитьЗакрытие=1 Тогда    // всё в порядке, это закрытие по кнопке
        //
    ИначеЕсли РазрешитьЗакрытие=2 Тогда    // фиктивное закрытие - для активизации реквизита на форме
        Активизировать("ШтрихКод");       // активизируем наше поле
        СтатусВозврата(0);    // отменяем закрытие
        РазрешитьЗакрытие = 0;    // сбрасывам переменную
        возврат;
   КонецЕсли;
   
КонецПроцедуры

вторник, 14 ноября 2017 г.

1С 7.7: вывод прайс-листа в 2 и более колонок

Задача: В 1С 7.7 экономить бумагу, печатая прай-лист в несколько колонок.

Решение: Весь прайс с группами, элементами и даже нумерацией строк выгружаем в таблицу значений (в примере генерится таблица на 500 элементов). Высота первой и последующих страниц задается отдельно..
Текст обработки под катом.

p.s. чёт валялось в черновиках с 2016

понедельник, 17 июля 2017 г.

Узнать в 1С номер недели в месяце по указанной дате

Задача: Узнать в 1С номер недели в месяце по указанной дате

Решение: Получаем разницу номеров недели в году текущей даты и даты начала месяца.
Рассматривается  здесь и здесь.


В запросе 1С 8.х:
НЕДЕЛЯ(Таблица.НашаДата) - НЕДЕЛЯ(НАЧАЛОПЕРИОДА(Таблица.НашаДата, МЕСЯЦ)) + 1

Для 1С 7.7
НомерТекущейНедели = НомерНеделиГода(НашаДата) - НомерНеделиГода(НачМесяца(НашаДата)) + 1;


вторник, 8 ноября 2016 г.

1С 7.7: удаление строк таблицы значений по условию

Требуется: Из таблицы значений удалить строки по определенному условию.
Решение: Добавляем дополнительную колонку "признак", тип "Число", Длина 1. Проходим по таблице, проверяем условия, и в строки, которые надо удалить, пишем 1, сортируем по-убыванию, выгружаем в временную таблицу только строки с 0 в служебной колонке.
        ...
        тз.Сортировать("-признак");
        НачальнаяСтрока = 0;
        тз.НайтиЗначение(0, НачальнаяСтрока, "признак");
        Если тз.КоличествоСтрок()=0 Тогда
            Сообщить("Пустая таблица!");
            Возврат;
        КонецЕсли;
        врем_тз = СоздатьОбъект("ТаблицаЗначений");
        тз.Выгрузить(врем_тз, НачальнаяСтрока);
        тз = врем_тз;
        ...

пятница, 13 ноября 2015 г.

Простые числа

primesieve.org - primesieve is a free software program and C/C++ library that generates primes using a highly optimized sieve of Eratosthenes implementation. It counts the primes below 10^10 in just 0.45 seconds on an Intel Core i7-6700 CPU (4 x 3.4GHz). primesieve can generate primes and prime k-tuplets up to 2^64.

Wheel_factorization

Решето Сундарама

Решето Эратосфена

Решето Аткина