Консоль и функция рекурсивного запроса

Публикация № 447680

Разработка - Инструментарий разработчика

рекурсия запрос консоль

Консоль предназначена для отладки и просмотра результатов выполнения РЕКУРСИВНОГО ЗАПРОСА в режиме 1С:Предприятие.
В консоли реализована универсальная функция для выполнения рекурсивных запросов.

Рекурсивный запрос - удобный способ выборки иерархических данных. Примеры рекурсивной выборки данных в 1С:Предприятие подробно рассмотрены в "Запрос против рекурсии или разузлование номенклатуры", "Транзитивное замыкание запросом" или далее по ссылкам в публикациях. Авторы предложили три варианта решения проблемы бесконечной рекурсии в графах с циклическими ссылками:

  1. Ограничивать количество рекурсивных циклов, предварительно вычислив их максимально возможное значение;
  2. Исключать циклические ссылки, проверяя пройденный путь, сохраняя его в виде строки кодов вершин графа;
  3. Исключать циклические ссылки, проверяя пройденный путь, сохраняя его во временной таблице.

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

  • Рекурсивный запрос разбивается на три пакетных подзапроса: Начальный, Рекурсивный, Итоговый;
  • Рекурсивный подзапрос повторяется в цикле. Условие выхода из рекурсивного цикла отличается и описано в особенностях функции;
  • Начальные и промежуточные данные сохраняются во временные таблицы с индексом шага рекурсивного цикла;В тексте подзапросов к именам временных таблиц добавляются служебные окончания "__НАЧАЛО_РЕКУРСИИ__" или "__КОНЕЦ_РЕКУРСИИ__". Служебные окончания автоматически заменяются на соответствующий индекс шага рекурсивного цикла.

Встроенная в консоль функция имеет особенности:

  • В конце начального подзапроса возвращается количество начальных данных;
  • В конце рекурсивного подзапроса возвращается количество данных, отобранное для итоговой выборки;
  • Рекурсивный цикл повторяется до тех пор, пока возвращаемое подзапросом число (количество записей) оказывается больше предыдущего числа (количества записей) - полученного на предыдущем шаге рекурсивного цикла.
  • ВНИМАНИЕ! Не используйте в текстах Начального или Рекурсивного подзапросов стандартную функцию 1С:Предприятие ПРЕДСТАВЛЕНИЕ(), это приводит к бесконечной рекурсии - зависанию системы!
&НаСервере 
Функция ВыполнитьРекурсивныйЗапрос(ЗНАЧ Параметр, ЗНАЧ Значение
, ЗНАЧ ТекстЗапросаИтог
, ЗНАЧ ТекстЗапросаРекурсия
 , ЗНАЧ ТекстЗапросаНачало
 , ЗНАЧ ШагРекурсииНачало = "__НАЧАЛО_РЕКУРСИИ__" // Подменяется в тексте запроса на предыдущий индекс шага рекурсии
 , ЗНАЧ ШагРекурсииКонец = "__КОНЕЦ_РЕКУРСИИ__" // Подменяется в тексте запроса на текущий индекс шага рекурсии
 , ЗНАЧ ЗапросМаксимальноеКоличествоЗаписей = "ВЫБРАТЬ 0;" // для предотвращения бесконечных рекурсий, 0 - без ограничений
, ЗНАЧ РежимОтладки = Ложь ) Экспорт

    Если СокрЛП(ШагРекурсииНачало)="" тогда
        ШагРекурсииНачало = "__НАЧАЛО_РЕКУРСИИ__"
    КонецЕсли;

    Если
СокрЛП(ШагРекурсииКонец)="" тогда
        ШагРекурсииКонец = "__КОНЕЦ_РЕКУРСИИ__"
    КонецЕсли; ТекВремя = ТекущаяДата();

    Если РежимОтладки тогда
        Сообщить(Формат(ТекВремя, "ДЛФ=T") + ", СТАРТ запроса",СтатусСообщения.Информация);
    КонецЕсли;

    Запрос = Новый Запрос();
 
    // Менеджер временных таблиц необходим для сохранения в памяти промежуточных таблиц рекурсии

    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();

    // ИндексРекурсии для генерации шага рекурсии в имени таблицы
    ИндексРекурсии = 0;

    // Если начальный запрос пустой, выполним только итоговый запрос

    Если ТекстЗапросаНачало<>Неопределено И ТекстЗапросаНачало<>"" тогда

        // Выход из рекурсии, когда количество записей в итоговой теблице перестанет прибавляться

        СтароеКоличествоЗаписей = 0;
        НовоеКоличествоЗаписей = 0;

        // Заменим в начальном подзапросе имена таблиц, указав начальный шаг рекрсии
        Запрос.Текст = СтрЗаменить(ТекстЗапросаНачало, ШагРекурсииНачало, Формат(ИндексРекурсии, "ЧН=0; ЧГ=0"));

        Если Параметр<>Неопределено И Параметр<>"" тогда
            Запрос.УстановитьПараметр(Параметр, Значение);
        КонецЕсли;

        // Выполним начальный подзапрос
        Попытка РезультатЗапроса = Запрос.Выполнить();
            Исключение ВызватьИсключение "Ошибка в НАЧАЛЬНОМ подзапросе: " + ОписаниеОшибки() + " !ВНИМАНИЕ! Ключевое слово '"+ШагРекурсииНачало+"' заменено на '"+Формат(ИндексРекурсии, "ЧН=0; ЧГ=0")+"'";
        КонецПопытки
;

        // Если рекурсивный запрос пустой, выполним только итоговый запрос
        Если ТекстЗапросаРекурсия<>Неопределено И ТекстЗапросаРекурсия<>"" тогда

            // Определим указанное в парамтрах максимальное допустимое количество шагов рекурсивного подзапроса
            МаксимальноеКоличествоРекурсий=0;

            Если ЗапросМаксимальноеКоличествоЗаписей<>Неопределено И ЗапросМаксимальноеКоличествоЗаписей<>"" тогда
                ЗапросКоличества = Новый Запрос();
                ЗапросКоличества.Текст = ЗапросМаксимальноеКоличествоЗаписей;

                Попытка

                    РезультатЗапросаКоличества = ЗапросКоличества.Выполнить();
                    ВыборкаДетальныеЗаписи = РезультатЗапросаКоличества.Выбрать();

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

            // Определим количество записей полученное в начальном подзапросе
            ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

            Если
ВыборкаДетальныеЗаписи.Следующий() Тогда
           
                НовоеКоличествоЗаписей = ВыборкаДетальныеЗаписи.Получить(0);
           
                Если
ТипЗнч(НовоеКоличествоЗаписей)<>Тип("Число") тогда
                    Сообщить("Начальный подзапрос должен возвращать количество записей в начальной выборке! НАПРИМЕР: 'ВЫБРАТЬ КОЛИЧЕСТВО (*) ИЗ ИтоговаяТаблица"+ШагРекурсииНачало+"' " ,СтатусСообщения.Внимание);
                    НовоеКоличествоЗаписей=1;
                КонецЕсли;
            КонецЕсли;

            Если РежимОтладки тогда
                ТекВремя=ТекущаяДата();
                Сообщить(Формат(ТекВремя, "ДЛФ=T") + ", выполнен НАЧАЛЬНЫЙ подзапрос, количество записей: "+НовоеКоличествоЗаписей,СтатусСообщения.Информация);
            КонецЕсли
;

            // Основной Ц И К Л рекурсии, пока увеличивается количество записей
            Пока НовоеКоличествоЗаписей > СтароеКоличествоЗаписей
                И (МаксимальноеКоличествоРекурсий=0 ИЛИ НовоеКоличествоЗаписей < МаксимальноеКоличествоРекурсий) цикл

                // Сдвигаем количество записей и индекс рекурсии
                СтароеКоличествоЗаписей = НовоеКоличествоЗаписей;
                ИндексРекурсии = ИндексРекурсии + 1;

                // Заменим в рекурсивном подзапросе имена таблиц, указав текущий шаг рекрсии

                Запрос.Текст = СтрЗаменить(ТекстЗапросаРекурсия, ШагРекурсииНачало, Формат(ИндексРекурсии-1, "ЧН=0; ЧГ=0"));
                Запрос.Текст = СтрЗаменить(Запрос.Текст, ШагРекурсииКонец, Формат(ИндексРекурсии, "ЧН=0; ЧГ=0"));

                Если
Параметр<>Неопределено И Параметр<>"" тогда
                    Запрос.УстановитьПараметр(Параметр, Значение);
                КонецЕсли;

                // Выполним рекурсивный подзапрос
                Попытка
                    РезультатЗапроса = Запрос.Выполнить();
                Исключение
                    ВызватьИсключение "Ошибка в РЕКУРСИВНОМ подзапросе: " + ОписаниеОшибки() + " !ВНИМАНИЕ! Ключевые слова: '"+ШагРекурсииНачало+"' заменено на '"+Формат(ИндексРекурсии-1, "ЧН=0; ЧГ=0")+"', " + " '"+ШагРекурсииКонец+"' заменено на '"+Формат(ИндексРекурсии, "ЧН=0; ЧГ=0")+"'";
                КонецПопытки
;

                ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

                // Определим новое количество записей, полученное в рекурсивном подзапросе
                Если ВыборкаДетальныеЗаписи.Следующий() Тогда
               
                    НовоеКоличествоЗаписей = ВыборкаДетальныеЗаписи.Получить(0);

                    Если ТипЗнч(НовоеКоличествоЗаписей)<>Тип("Число") тогда
                        Сообщить("Рекурсивный подзапрос должен возвращать количество записей в итоговой выборке! НАПРИМЕР: 'ВЫБРАТЬ КОЛИЧЕСТВО (*) ИЗ ИтоговаяТаблица"+ШагРекурсииНачало+"' " ,СтатусСообщения.Внимание);
                        НовоеКоличествоЗаписей=1;
                    КонецЕсли;
                КонецЕсли;

                Если РежимОтладки И ТекВремя<>ТекущаяДата() тогда
                    ТекВремя=ТекущаяДата();
                    Сообщить(Формат(ТекВремя, "ДЛФ=T") + ", выполнен " + ИндексРекурсии + " РЕКУРСИВНЫЙ подзапрос, количество записей: "+НовоеКоличествоЗаписей,СтатусСообщения.Информация);
                КонецЕсли
;
           
            КонецЦикла
;
       
        КонецЕсли
;
    КонецЕсли;

    // Заменим в итоговом подзапросе имена таблиц, указав конечный шаг рекрсии
    Запрос.Текст = СтрЗаменить(ТекстЗапросаИтог, ШагРекурсииКонец, Формат(ИндексРекурсии, "ЧН=0; ЧГ=0"));

    Если Параметр<>Неопределено И Параметр<>"" тогда
        Запрос.УстановитьПараметр(Параметр, Значение);
    КонецЕсли
;

    // Выполним итоговый подзапрос
    Попытка
        РезультатЗапроса = Запрос.Выполнить();
    Исключение
        ВызватьИсключение "Ошибка в ИТОГОВОМ подзапросе: " + ОписаниеОшибки() + " !ВНИМАНИЕ! Ключевое слово '"+ШагРекурсииКонец+"' заменено на '"+Формат(ИндексРекурсии, "ЧН=0; ЧГ=0")+"'";
    КонецПопытки
;

    Если
РежимОтладки тогда ТекВремя=ТекущаяДата();
        Сообщить(Формат(ТекВремя, "ДЛФ=T") + ", выполнен ИТОГОВЫЙ подзапрос",СтатусСообщения.Информация);
    КонецЕсли;

    Возврат РезультатЗапроса;
КонецФункции

Консоль выполняет рекурсивный запрос в одном из двух режимов:

  • “Выполнить” - в стандартном режиме;
  • “Выполнить запрос с указанием времени” - с указанием времени выполнения рекурсивного запроса в формате часы:минуты:секунды.

Пример тестовой таблицы (вставить перед начальным подзапросом)

/////////////////////////////////////////////////////////////////////////////// 
// ФОРМИРОВАНИЕ ТЕСТОВОЙ ТАБЛИЦЫ

ВЫБРАТЬ 0 КАК объект, 1 КАК субъект , "00" КАК с_объект, "01" КАК с_субъект
ПОМЕСТИТЬ таблица10
ОБЪЕДИНИТЬ ВЫБРАТЬ 0 КАК объект, 2 КАК субъект , "00" КАК с_объект, "02" КАК с_субъект
ОБЪЕДИНИТЬ ВЫБРАТЬ 0 КАК объект, 3 КАК субъект , "00" КАК с_объект, "03" КАК с_субъект
ОБЪЕДИНИТЬ ВЫБРАТЬ 0 КАК объект, 4 КАК субъект , "00" КАК с_объект, "04" КАК с_субъект
ОБЪЕДИНИТЬ
ВЫБРАТЬ 0 КАК объект, 5 КАК субъект , "00" КАК с_объект, "05" КАК с_субъект
ОБЪЕДИНИТЬ ВЫБРАТЬ 0 КАК объект, 6 КАК субъект , "00" КАК с_объект, "06" КАК с_субъект
ОБЪЕДИНИТЬ
ВЫБРАТЬ 0 КАК объект, 7 КАК субъект , "00" КАК с_объект, "07" КАК с_субъект
ОБЪЕДИНИТЬ
ВЫБРАТЬ 0 КАК объект, 8 КАК субъект , "00" КАК с_объект, "08" КАК с_субъект
ОБЪЕДИНИТЬ ВЫБРАТЬ 0 КАК объект, 9 КАК субъект , "00" КАК с_объект, "09" КАК с_субъект
ОБЪЕДИНИТЬ ВЫБРАТЬ 0 КАК объект, 10 КАК субъект , "00" КАК с_объект, "10" КАК с_субъект;

ВЫБРАТЬ 100+родитель.субъект КАК объект, 200+потомок.субъект КАК субъект
,
"1"+родитель.с_субъект КАК с_объект, "2"+потомок.с_субъект КАК с_субъект
ПОМЕСТИТЬ
таблица100 ИЗ таблица10 КАК родитель, таблица10 КАК потомок;

ВЫБРАТЬ 200+родитель.субъект КАК объект, 300+потомок.субъект КАК субъект
, "2"+родитель.с_субъект КАК с_объект, "3"+потомок.с_субъект КАК с_субъект
ПОМЕСТИТЬ таблица1000 ИЗ таблица10 КАК родитель, таблица10 КАК потомок;

ВЫБРАТЬ 300+родитель.субъект КАК объект, 400+потомок.субъект КАК субъект
, "3"+родитель.с_субъект КАК с_объект, "4"+потомок.с_субъект КАК с_субъект
ПОМЕСТИТЬ
таблица10000 ИЗ таблица10 КАК родитель, таблица10 КАК потомок;

ВЫБРАТЬ
400+родитель.субъект КАК объект, 500+потомок.субъект КАК субъект
,
"4"+родитель.с_субъект КАК с_объект, "5"+потомок.с_субъект КАК с_субъект
ПОМЕСТИТЬ таблица100000 ИЗ таблица10 КАК родитель, таблица10 КАК потомок;

ВЫБРАТЬ 500+родитель.субъект КАК объект, 600+потомок.субъект КАК субъект
,
"5"+родитель.с_субъект КАК с_объект, "6"+потомок.с_субъект КАК с_субъект
ПОМЕСТИТЬ
таблица1000000 ИЗ таблица10 КАК родитель, таблица10 КАК потомок;

ВЫБРАТЬ
000+объект КАК объект, 100+субъект КАК субъект , "0"+с_объект КАК с_объект
,
"1"+с_субъект КАК с_субъект ПОМЕСТИТЬ таблица ИЗ таблица10
ОБЪЕДИНИТЬ
ВСЕ ВЫБРАТЬ * ИЗ таблица100
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ * ИЗ таблица1000
ОБЪЕДИНИТЬ
ВСЕ ВЫБРАТЬ * ИЗ таблица10000
ОБЪЕДИНИТЬ
ВСЕ ВЫБРАТЬ ПЕРВЫЕ 0 * ИЗ таблица100000
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 0 * ИЗ таблица1000000

// Циклическая ссылка

//0// ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 301 КАК объект, 101 КАК субъект
//0// , "301" КАК с_объект, "101" КАК с_субъект

ИНДЕКСИРОВАТЬ ПО объект, субъект;

УНИЧТОЖИТЬ
таблица10;
УНИЧТОЖИТЬ таблица100;
УНИЧТОЖИТЬ таблица1000;
УНИЧТОЖИТЬ таблица10000;
УНИЧТОЖИТЬ таблица100000;
УНИЧТОЖИТЬ таблица1000000;

// КОНЕЦ ФОРМИРОВАНИЯ ТЕСТОВОЙ ТАБЛИЦЫ
///////////////////////////////////////////////////////////////////////////////

Пример начального подзапроса

/////////////////////////////////////////////////////////////////////////////// 
// НАЧАЛЬНЫЙ ПОДЗАПРОС

ВЫБРАТЬ
объект, субъект , с_объект, с_субъект
, 1 КАК уровень , "."+с_объект+"."+с_субъект+"." КАК путь
, "" КАК старый_путь
ПОМЕСТИТЬ РекурсивнаяТаблица__НАЧАЛО_РЕКУРСИИ__
ИЗ таблица
ГДЕ
объект=0;

//--------- служебная счасть ---------//


// 1.1. ПРОЙДЕННЫЕ УЗЛЫ
// для исключения бесконечной рекурсии
//3//ВЫБРАТЬ РАЗЛИЧНЫЕ объект, субъект
//3//ПОМЕСТИТЬ ПройденныеУзлы__НАЧАЛО_РЕКУРСИИ__
//3//ИЗ РекурсивнаяТаблица__НАЧАЛО_РЕКУРСИИ__

//3//ОБЪЕДИНИТЬ
//3//ВЫБРАТЬ субъект КАК объект, субъект
//3//ИЗ РекурсивнаяТаблица__НАЧАЛО_РЕКУРСИИ__

//3//ИНДЕКСИРОВАТЬ ПО 2,1;


// 1.2. ИТОГОВЫЕ ДАННЫЕ
ВЫБРАТЬ * ПОМЕСТИТЬ ИтоговаяТаблица__НАЧАЛО_РЕКУРСИИ__
ИЗ РекурсивнаяТаблица__НАЧАЛО_РЕКУРСИИ__;

// 1.4. КОЛИЧЕСТВО ЗАПИСЕЙ

ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ ИтоговаяТаблица__НАЧАЛО_РЕКУРСИИ__;

// КОНЕЦ НАЧАЛЬНОГО ПОДЗАПРОСА
///////////////////////////////////////////////////////////////////////////////

Пример рекурсивного подзапроса

/////////////////////////////////////////////////////////////////////////////// 
// РЕКУРСИВНЫЙ ПОДЗАПРОС


ВЫБРАТЬ таблица.*, рекурсия.уровень+1 КАК уровень
, рекурсия.путь+таблица.с_субъект+"." КАК путь
,
рекурсия.путь КАК старый_путь
ПОМЕСТИТЬ РекурсивнаяТаблица__КОНЕЦ_РЕКУРСИИ__
ИЗ РекурсивнаяТаблица__НАЧАЛО_РЕКУРСИИ__ КАК рекурсия
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
таблица ПО таблица.объект=рекурсия.субъект

// соединенние для исключения бесконечной рекурсии
//3//ЛЕВОЕ СОЕДИНЕНИЕ ПройденныеУзлы__НАЧАЛО_РЕКУРСИИ__ ПройденныеУзлы
//3// ПО ПройденныеУзлы.субъект=таблица.объект
//3// И ПройденныеУзлы.объект=таблица.субъект
ГДЕ ИСТИНА
//1// И рекурсия.уровень<8 // ограниечение количества уровней //2// И НЕ рекурсия.путь ПОДОБНО "%."+таблица.с_субъект+".%" //3// И ПройденныеУзлы.субъект ЕСТЬ NULL ;

//--------- служебная счасть ---------//
// 2.1. ПРОЙДЕННЫЕ УЗЛЫ
// для исключения бесконечной рекурсии //3//ВЫБРАТЬ РАЗЛИЧНЫЕ ПройденныеУзлы.объект, Рекурсия.субъект //3//ПОМЕСТИТЬ ПройденныеУзлы__КОНЕЦ_РЕКУРСИИ__ //3//ИЗ РекурсивнаяТаблица__КОНЕЦ_РЕКУРСИИ__ Рекурсия //3//ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПройденныеУзлы__НАЧАЛО_РЕКУРСИИ__ ПройденныеУзлы ПО ПройденныеУзлы.субъект=Рекурсия.объект //3//ОБЪЕДИНИТЬ //3//ВЫБРАТЬ субъект КАК объект, субъект ИЗ РекурсивнаяТаблица__КОНЕЦ_РЕКУРСИИ__ //3//ИНДЕКСИРОВАТЬ ПО 2,1;
// 2.2. ИТОГОВЫЕ ДАННЫЕ ВЫБРАТЬ * ПОМЕСТИТЬ ИтоговаяТаблица__КОНЕЦ_РЕКУРСИИ__ ИЗ ИтоговаяТаблица__НАЧАЛО_РЕКУРСИИ__
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ * ИЗ РекурсивнаяТаблица__КОНЕЦ_РЕКУРСИИ__ ;

// 2.3. ОСВОБОЖДЕНИЕ ПАМЯТИ
//3//УНИЧТОЖИТЬ ПройденныеУзлы__НАЧАЛО_РЕКУРСИИ__;
УНИЧТОЖИТЬ
РекурсивнаяТаблица__НАЧАЛО_РЕКУРСИИ__;
УНИЧТОЖИТЬ ИтоговаяТаблица__НАЧАЛО_РЕКУРСИИ__;

// 2.4. КОЛИЧЕСТВО ЗАПИСЕЙ

ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ ИтоговаяТаблица__КОНЕЦ_РЕКУРСИИ__;

// КОНЕЦ РЕКУРСИВНОГО ПОДЗАПРОСА
///////////////////////////////////////////////////////////////////////////////

Пример итогового подзапроса

/////////////////////////////////////////////////////////////////////////////// 
// ИТОГОВЫЙ ПОДЗАПРОС

ВЫБРАТЬ //ПЕРВЫЕ 10
КОЛИЧЕСТВО(*)
// *
ИЗ ИтоговаяТаблица__КОНЕЦ_РЕКУРСИИ__
//УПОРЯДОЧИТЬ ПО объект, субъект, путь
;

//--------- служебная счасть ---------//
// 3.3. ОСВОБОЖДЕНИЕ ПАМЯТИ
//3//УНИЧТОЖИТЬ ПройденныеУзлы__КОНЕЦ_РЕКУРСИИ__;
УНИЧТОЖИТЬ РекурсивнаяТаблица__КОНЕЦ_РЕКУРСИИ__;
УНИЧТОЖИТЬ ИтоговаяТаблица__КОНЕЦ_РЕКУРСИИ__;
УНИЧТОЖИТЬ таблица;

// конец ИТОГОВЫЙ ПОДЗАПРОС
///////////////////////////////////////////////////////////////////////////////

В подзапросах отмечены комментариями:
//0// - пример циклической ссылки - ВНИМАНИЕ! Возможно зависание системы! Не убирайте данный комментарий, если в рекурсивный запрос не включен механизм исключения циклических ссылок.
//1// - пример ограничения количества шагов рекурсивного цикла.
//2// - пример исключения циклических ссылок через проверку пройденного пути сохраненного в виде строки кодов вершин графа.
//3// - (в разных местах запроса) пример исключения циклических ссылок через проверку пройденного пути сохраненного во временную таблицу.

Время работы рекурсивной выборки в зависимости от количества итоговых записей

Тест файловой СУБД, Core2Duo 2.40GHz, 4ГБ ОЗУ

 Файл-серверная статистика

Кол-во

  записей 

 Время выполнение рекурсивного

запроса (сек.)

Без

 контроля

 Контроль и сохранение

пройденного пути

в строке в таблице
111 110 5 6 37
121 110 6 7 43
211 110 10 11 81
311 110 15 16 124
411 110 20 21 172
511 110 23 25 211
711 110 32 35 257
911 110 41 44 385
 1 111 110
49 54 473


Тест на http://demo.1c.ru

 Тест на demo.1c.ru

 

Кол-во

  записей 

 Время выполнение рекурсивного

запроса (сек.)

Без

 контроля

 Контроль и сохранение

пройденного пути

в строке в таблице
111 110 1 2 7
121 110 1 2 7
211 110 1 4 9
311 110 3 5 9
411 110 3 6 11
511 110 4 7 12
711 110 5 9 15
911 110 10 11 17
 1 111 110
11 11 20

 

 

 

 

 

Скачать файлы

Наименование Файл Версия Размер
Консоль РЕКУРСИВНОГО запроса для управляемого приложения

.epf 284,46Kb
10.02.16
7
.epf 0.0.1 284,46Kb 7 Скачать

Специальные предложения

Оставьте свое сообщение

См. также

Управляемая консоль запросов, отчетов 3.8.9 (расширение, внешняя обработка) Промо

Консоль запросов v8 v8::УФ v8::Запросы v8::СКД 1cv8.cf Абонемент ($m)

Работа с запросом и СКД, Полная поддержка пакетных запросов, временных таблиц, Сравнение результатов, текстов, Разбор структуры запроса в виде дерева, Анализ плана запроса, Групповая обработка

14.08.2018    91143    2330    Evg-Lylyk    671    

А1Э - альтернативная стандартная библиотека для 1С

Инструментарий разработчика v8 Абонемент ($m)

Предлагаю широкой общественности расширение А1Э, используемое в нескольких продуктивных базах для выполнения широкого круга задач.

14.08.2020    7210    3    Enigma    45    

Консоль кода для управляемых форм

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Консоль кода для управляемых форма с подсказками и подсветкой синтаксиса.

1 стартмани

17.07.2020    12284    195    salexdv    205    

Консоль запросов 9000

Консоль запросов v8 v8::Запросы 1cv8.cf Абонемент ($m)

Простая и удобная консоль запросов, работает на любой конфигурации без ее модификации и расширений. С перхватом любых запросов и поддержкой всех типов данных во временных таблицах. Обработка результата кодом.

1 стартмани

24.02.2020    11722    242    kuza2000    124    

Установка предопределенных элементов: просмотр, исправление и поиск ошибок (задвоенных и отсутствующих) Промо

Инструментарий разработчика Универсальные обработки v8 1cv8.cf Абонемент ($m)

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

2 стартмани

06.10.2014    151507    2000    ekaruk    165    

Инструменты оптимизации для 1С на MS SQL Server

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Набор базовых инструментов для поиска узких мест в работе 1С на MS SQL Server.

1 стартмани

15.12.2019    16526    207    berezdetsky    23    

CF & SQL : конструктор прямых запросов к БД 1С

Инструментарий разработчика Администрирование СУБД v8 1cv8.cf Россия Абонемент ($m)

Программа для чтения и анализа внутренней структуры данных 1С V8.х, Содержит конструктор прямых SQL запросов, позволяет обрабатывать и редактировать тексты SQL-запросов, выполнять прямые запросы к базе данных 1С и обрабатывать полученные результаты.

1 стартмани

02.10.2019    19439    202    dmitrydemenew    47    

Конвейер проверки качества кода

Инструментарий разработчика Практика программирования Математика и алгоритмы v8 1cv8.cf Абонемент ($m)

Jenkinsfile для выполнения проверки качества кода. Собирает информацию с АПК, EDT и BSL-LS. Сопоставляет ошибки с гит-репозиторием, выгруженным ГитКонвертором. Отправляет в Сонар.

3 стартмани

04.09.2019    24521    22    Stepa86    45    

Навигатор по конфигурации базы 1С 8.3 Промо

Инструментарий разработчика Универсальные обработки v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Универсальная внешняя обработка для просмотра метаданных конфигураций баз 1С 8.3. Отображает свойства и реквизиты объектов конфигурации, их количество, основные права доступа и т.д. Отображаемые характеристики объектов: свойства, реквизиты, стандартные рекизиты, реквизиты табличных частей, предопределенные данные, регистраторы для регистров, движения для документов, команды, чужие команды, подписки на события, подсистемы. Отображает структуру хранения объектов базы данных, для регистров доступен сервис "Управление итогами". Платформа 8.3, управляемые формы. Версия 1.1.0.69 от 27.09.2020

3 стартмани

28.10.2018    34144    307    ROL32    69    

Модель объекта

Инструментарий разработчика v8 Абонемент ($m)

Подсистема позволяет описать модель данных объекта, где описана зависимость между реквизитами, и затем использовать эту модель в разных сценариях работы с объектом. Версия платформы: 8.3.6 и выше. С небольшими доработками будет работать на 8.2.

1 стартмани

30.06.2019    12598    0    vadim1980    5    

Переводим рутину ручного тестирования 1C на рельсы Jenkins-а и ADD

Инструментарий разработчика Jenkins v8 Абонемент ($m)

Вы все еще тестируете свои конфигурации 1С вручную? Да вы просто тратите жизнь впустую! В данном туториале попробуем скрестить ADD и jenkins для автоматического запуска тестов.

1 стартмани

03.06.2019    24848    5    ripreal1    89    

Универсальный HTTP-сервис на платформе 1С, аля HTTP-сервер с примером

Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Практический кейс построения HTTP-сервиса, который работает по принципу HTTP-сервера, с разбором всех методов построения и разработки класса задач построения личных кабинетов и сопряжения их с центральной базой.

1 стартмани

13.05.2019    29547    130    Diversus    42    

[Расширение] Контроль отрицательных остатков по регистру бухгалтерии при проведении Промо

Универсальные функции Инструментарий разработчика Учет ТМЦ Учет ТМЦ v8 1cv8.cf Россия БУ Абонемент ($m)

Расширение позволяет без изменений конфигурации проверять остатки по регистру бухгалтерии при проведении каждого документа и запрещает проведение при появлении отрицательных остатков после проведения.

1 стартмани

17.08.2015    47205    156    ekaruk    32    

Групповая проверка доработок

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка для массовой проверки доработок конфигурации: Открытие форм, Печать, Формирование отчетов, Проведение документов, Запись справочников, ПВХ, ПВР. Выдает список обнаруженных ошибок. Рекомендуется применять для тестирования обновленной конфигурации, перед установкой пользователям. В коде используются универсальные методы поэтому подходит для большинства конфигураций, построенных на базе библиотеки стандартных подсистем. Проверялась на Зарплата и управление персоналом КОРП 3.1.8.216, Управление торговлей 11, 1С:ERP Управление предприятием 2.4.7.141, Бухгалтерия предприятия КОРП 3.0.68.66.

2 стартмани

05.05.2019    15258    102    sapervodichka    23    

Расширение "Быстрая проверка кода" для конфигурации 1С:Автоматизированная проверка конфигураций

Инструментарий разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Расширение для конфигурации "1С:Автоматизированная проверка конфигураций", позволяющее проверять произвольный код.

1 стартмани

26.03.2019    19392    59    Bazil    27    

Настройка отладки на сервере 1С

Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Обработка для настройки отладки на сервере, включение отладки COM-соединений и отладки Web-сервисов.

1 стартмани

26.03.2019    26048    103    frkbvfnjh    38    

Faster - многофункциональный ускоритель работы программиста 1С и других языков программирования Промо

Инструментарий разработчика v8 1cv8.cf Россия Абонемент ($m)

Программа Faster 9.4 позволяет ускорить процесс работы программиста (работает в любом текстовом редакторе). Подсказка при вводе текста на основе ранее введенного текста и настроенных шаблонов. Программа Faster позволяет делится кодом с другими программистами в два клика или передать ссылку через QR Код. Исправление введенных фраз двойным Shift (с помощью speller.yandex). Переводчик текста. Переворачивает текст случайно набранный на другой раскладке. Полезная утилита для тех, кто печатает много однотипного текста, кодирует в среде Windows на разных языках программирования. Через некоторое время работы с программой у вас соберется своя база часто используемых словосочетаний и кусков кода. Настройка любых шорткатов под себя с помощью скриптов. Никаких установок и лицензий, все бесплатно.

1 стартмани

24.05.2012    78043    212    moolex    147    

Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия - Simple UI (обновлено 14.11.2019)

Инструментарий разработчика Сканер штрих-кода Терминал сбора данных Мобильная разработка Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ v8 v8::Mobile БУ УУ Абонемент ($m)

Simple WMS Client – это визуальный конструктор мобильного клиента для терминала сбора данных(ТСД) или обычного телефона на Android. Приложение работает в онлайн режиме через интернет или WI-FI, постоянно общаясь с базой посредством http-запросов (вариант для 1С-клиента общается с 1С напрямую как обычный клиент). Можно создавать любые конфигурации мобильного клиента с помощью конструктора и обработчиков на языке 1С (НЕ мобильная платформа). Вся логика приложения и интеграции содержится в обработчиках на стороне 1С. Это очень простой способ создать и развернуть клиентскую часть для WMS системы или для любой другой конфигурации 1С (УТ, УПП, ERP, самописной) с минимумом программирования. Например, можно добавить в учетную систему адресное хранение, учет оборудования и любые другие задачи. Приложение умеет работать не только со штрих-кодами, но и с распознаванием голоса от Google. Это бесплатная и открытая система, не требующая обучения, с возможностью быстро получить результат.

5 стартмани

09.01.2019    44735    250    informa1555    232    

Управление задачами в 1С - готовая подсистема с открытым кодом и широким базовым функционалом. Версия 1.0.6

Инструментарий разработчика Управление бизнес-процессами (BPM) Управление проектом v8 Абонемент ($m)

Конфигурация-подсистема для управления задачами с базовым функционалом, который, однако, может удовлетворить довольно широкий спектр запросов. Есть статусы и приоритеты, учёт трудозатрат по исполнителям и даже базовые разграничения по правам. А открытый исходный код позволит на базе данной конфигурации развить систему до любого уровня сложности.

2 стартмани

17.12.2018    20300    102    for_sale    38    

Отправка электронной почты с помощью локального почтового клиента из 1С, развернутой под удаленным рабочим столом

Печатные формы документов Универсальные функции Email v8 КА1 БП2.0 УТ10 УПП1 Абонемент ($m)

Решение для интерактивной (нажал-отредактировал) отправки электронных писем и печатных форм через почтовый клиент (Thunderbird, Outlook) находящийся на локальном компьютере, из конфигурации 1С, развернутой под удаленным рабочим столом (RDP, remote-app). Подходит также для локального развертывания 1С. Представлен пример быстрой интеграции с конфигурациями "Управление торговлей 10.3", "Управление производственным предприятием 1.3", "Комплексная автоматизация 1.1", "Бухгалтерия предприятия 2.0".

1 стартмани

21.09.2018    24480    16    stvorl    0    

Консоль запросов + ТЗ как параметры Промо

Консоль запросов v8 1cv8.cf Украина Абонемент ($m)

Стандартная консоль запросов, с добавленной возможностью использования описания/заполнения/использования таблиц значений как параметров. Совместима с настройками базовой консоли. Упрощает отладку запросов, использующих временные таблицы.

2 стартмани

12.11.2010    35619    62    Kashemir    24    

Консоль Внедренца v.3.6.2 (vnedr.cf)

Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Идея данной обработки заключается в создании простого, функционального и универсального инструментария для внедренцев и программистов 1С, который будет работать как в толстом клиенте на обычных и на управляемых формах, так и в тонком клиенте. Интерфейс и логика работы максимально идентичны у обычных форм и управляемых. Инструментарий включает в себя: Консоль кода, Консоль запросов, Консоль отчетов (СКД), Универсальную обработку объектов, Средства для работы с таблицами базы данных 1С, Редактирование регистров сведений базы, Инструмент по работе с табличными документами - загрузка данных из табличного документа.

1 стартмани

27.08.2018    21843    368    evvakra    42    

HTTP Сервисы: Путь к своему сервису. Часть 3

Инструментарий разработчика Практика программирования v8 1cv8.cf Абонемент ($m)

Продолжение статьи «HTTP Сервисы: Путь к своему сервису. Часть 2». В предыдущих частях мы использовали только Get, в этой части поговорим о других методах и длительных операциях.

1 стартмани

27.08.2018    37267    54    dsdred    15    

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции

Инструментарий разработчика Практика программирования v8 Абонемент ($m)

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    28081    26    informa1555    26    

[x1c.ru] 1CDBin: Работа с файлами *.1CD на низком уровне средствами языка 1С с возможностью чтения таблиц (поддерживается формат 8.3.8.0) Промо

Тестирование и исправление Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Обработка позволяет просматривать файловые базы 1CD на низком уровне средствами встроенного языка. Реализована часть функциональности Tool_1CD, но на языке 1С Предприятия. Показываются таблицы, параметры таблиц, поля таблиц, записи таблиц, значения полей BLOB, есть 16-ричный просмотр страниц базы и консоль кода. Можно использовать для изучения структуры файлов 1CD, просмотра баз 1CD для выявления повреждений, создания своих обработок для выгрузки данных без открытия исследуемой базы в 1С:Предприятии.

1 стартмани

07.10.2014    53312    212    GusevNA    75    

Консоль HTTP-запросов с генерацией кода

Консоль запросов v8 v8::УФ 1cv8.cf Абонемент ($m)

Консоль HTTP-запросов, которая не только выполняет запросы и получает результат их выполнения, но и генерирует необходимый код. Использую на 8.3.11.2899.

1 стартмани

25.05.2018    24487    272    leongl    16    

Регистры правил [Расширение]

Инструментарий разработчика Информационная безопасность v8 v8::Права УТ11 Абонемент ($m)

Регистры правил - права доступа, запрет редактирования, автоподстановка реквизитов и т.д.

10 стартмани

15.03.2018    17923    9    33lab    1    

Тестирование интерфейса в обычном приложении 8.2 при помощи SikuliX

Инструментарий разработчика Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Как же не хватает клиента тестирования на платформе 8.2. Не кликнешь на кнопку, не выберешь из списка, не проверишь видит ли надпись пользователь. Воспользуемся внешним инструментом SikuliX, который позволит нам протестировать функционал форм. Данный инструмент легко встраивается в линию сборки и может "дружить" с уже известным многим Open-source продуктами.

1 стартмани

03.01.2018    29558    5    kraynev-navi    41    

Разбираемся со структурой правил конвертации данных Промо

Инструментарий разработчика v8 КД Абонемент ($m)

При переносе данных между различающимися данными частенько приходится смотреть в правила. И часто, чтобы выяснить, к примеру, каким документом формируются остатки по конкретному ПВД, нужно заглядывать в него и искать, какое ПКО в нем вызывается. А может вызываться и алгоритм, в котором вызывается ПКО ;-) А если правил много? Чтобы не мучить себя утомительными поисками, предлагаю воспользоваться этой обработкой.

1 стартмани

14.10.2011    22668    29    Meta    17    

Программное формирование форматированной строки в стиле html+inline CSS

Работа с интерфейсом Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Если вам приходилось работать с форматированными строками программно, то вы знаете, какая это боль. Данное решение облегчает программное формирование таких строк.

1 стартмани

18.11.2017    32072    35    bonv    10    

Тестирование: пример из семи шагов создания Unit-теста для платформы 1С

Инструментарий разработчика v8 ERP2 УТ11 Абонемент ($m)

В этой статье мы расскажем, как создать Unit-тест. Опишем как это сделать с использованием Фреймворка xUnitFor1C. Рассмотрим пример максимально приближенный к боевому, покажем процесс отладки теста, поделимся советами и приложим несколько обработок-примеров. Вы сможете убедиться, что создание тестов на самом деле это относительно быстрый и простой процесс.

1 стартмани

29.08.2017    30774    18    ivanov660    46    

Трансформатор 1С - SQL

Инструментарий разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка для представления SQL запросов в терминах 1С, с возможностью захвата SQL запросов трассировкой.  Поддерживается также форматирование текста запроса через интернет сервис. Работает в управляемых и обычных формах, в том числе на веб-клиенте.

1 стартмани

28.06.2017    35584    349    Synoecium    49    

Интерфейс сопоставления объектов для обмена (для типового регистра СоответствиеОбъектовДляОбмена) Промо

Инструментарий разработчика Универсальные обработки Перенос данных из 1C8 в 1C8 v8 КА1 БП2.0 ЗУП2.5 УТ10 УПП1 Абонемент ($m)

Вы внедряете обмен данными между двумя типовыми или основанными на типовых БД и вам необходим инструмент, чтобы сопоставить между собой справочники этих конфигураций? Вы хотите навести порядок в обмене данными, потому что вам надоело вылавливать дублирующиеся объекты? Вам очень хочется перепоручить сопоставление объектов обменивающихся баз пользователям, но нет подходящего и понятного пользователям интерфейса? Тогда вам нужна именно эта обработка!

4 стартмани

11.11.2015    39713    135    catsam    8    

OneStyle. Улучшенное форматирование кода в конфигураторе

Инструментарий разработчика v8 Абонемент ($m)

Умеет добавлять пробелы после запятых, окружать пробелами арифметические знаки, добавлять пустые строки, выравнивать перенесенные выражения, приводить ключевые слова к каноническому виду и многое другое.

1 стартмани

19.06.2017    23680    23    Stepa86    45    

"Конвертация данных" + Git. Решение проблемы различий в файлах

Инструментарий разработчика Обмен через XML v8 КД Абонемент ($m)

Как известно, типовая конфигурация «Конвертация данных» обладает одним недостатком, мешающим работать с ней в Git-е. Если выгруженные из нее правила обмена загрузить в другую КД, а потом снова выгрузить, то полученные два файла будут очень сильно отличаться друг от друга, и при сравнении (diff) доработок будет невозможно провести код-ревью, равно как найти сами изменения, которые закоммитил разработчик.

1 стартмани

08.06.2017    25173    41    stas_ganiev    13    

Набор подсистем "Умные таблицы"

Инструментарий разработчика v8 Беларусь Россия Казахстан Абонемент ($m)

Данный набор подсистем – прикладная библиотека, призванная помочь программисту 1С быстрее решать ряд типовых задач бизнес-логики, таких как: ведение статусов объектов, отправка почтовых сообщений в определенное время, ведение произвольных таблиц с возможностью редактирования, сохранения и группировки, ориентированные на расчет бюджетных таблиц (план продаж, ретробонусы B2C, проценты по договорам B2B и договорные условия по КАМ), расчет коммерческой политики для бюджетных таблиц, исполнение произвольных алгоритмов с хранением кода в информационной базе, определение рабочих баз, хранение файлов во внешних СУБД (Postgre SQL, MS SQL и MongoDB) и выполнение произвольного кода после изменений ссылочного объекта вне транзакции изменения.

1 стартмани

22.05.2017    33133    96    Silenser    34    

Exec - Выполнение кода, консоль запросов и не только! Промо

Консоль запросов v8 1cv8.cf Абонемент ($m)

Незаменимый инструмент администратора БД и программиста: Выполняйте произвольный код из режима 1С Предприятие; сохраняйте/загружайте часто используемые скрипты; выполняйте запросы с замером производительности запроса в целом и каждой из временных таблиц в частности, а также с просмотром содержимого временных таблиц; произвольным образом изменяйте любые объекты БД, редактируя даже не вынесенные на формы реквизиты и записывая изменения в режиме "ОбменДанными.Загрузка = Истина"; легко узнавайте ИД объектов БД; выполняйте прямые запросы к SQL с замером производительности и не только!

5 стартмани

10.11.2015    41083    75    catsam    11    

Регулярные выражения – это просто. Построитель и отладчик регулярных выражений

Инструментарий разработчика Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

13.03.2017    31386    112    romasna    49    

1С: Gitter 1.1 (Хранилище 1С => Git)

Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Развитие проекта gitter http://infostart.ru/public/273126/ . Позволяет выгружать хранилище 1С в репозиторий GIT.

1 стартмани

01.02.2017    25262    41    Stepa86    20    

Сценарное тестирование в помощь программисту 1С

Инструментарий разработчика v8 Абонемент ($m)

Альтернативное решение для организации сценарного тестирования конфигураций, разработанных на управляемых формах

1 стартмани

11.11.2016    27863    59    grumagargler    47    

КонЗап - консоль запросов с улучшенным интерфейсом и дополнительными функциями Промо

Консоль запросов v8 1cv8.cf Абонемент ($m)

Консоль запросов (Платформа 8.х режим - обычное приложение) с улучшенным интерфейсом и дополнительными функциями (загрузка параметров запроса из файла, работа с временными таблицами, замер времени выполнения, групповая обработка результатов запроса). Часть функций позаимствованы из других обработок, часть разработаны "с нуля".

1 стартмани

16.07.2014    15042    23    serjpsv    18    

Несколько шаблонов для доработки типовых конфигураций

Практика программирования Инструментарий разработчика v8 v8::УФ Абонемент ($m)

Предлагаю несколько каркасов для создания новых объектов в типовых конфигурациях. Это выжимка из кода нескольких конфигураций, которая позволит быстро и красиво создавать и дорабатывать объекты метаданных с соблюдением идеологии исходной системы

1 стартмани

03.10.2016    36626    95    json    25    

Управление задачами: Канбан доска

Инструментарий разработчика БСП (Библиотека стандартных подсистем) v8 Абонемент ($m)

Конфигурация "Управление задачами" с использованием БСП. Канбан доска. Открытый код.Загрузка изменений из хранилища конфигураций 1С и связь с задачами. Проект выложен на github (ссылка в публикации). Управляемые формы. Рассылка уведомлений.

1 стартмани

02.10.2016    64794    559    BlizD    294    

Конструктор-тестер http запросов в 1С

WEB Инструментарий разработчика v8 1cv8.cf Россия Абонемент ($m)

Данная обработка позволяет в несколько кликов конструировать http запросы на языке 1С и просматривать результаты их выполнения.

3 стартмани

19.08.2016    42380    296    hlopik    17    

Подсистема обмена данными с порталом ИМНС по электронным счетам-фактурам (автоматический обмен)

Внешние источники данных WEB Инструментарий разработчика v8 1cv8.cf Беларусь БУ НДС Абонемент ($m)

Подсистема включает документы и обработки для автоматического обмена данными с порталом ИМНС через web-сервис. Присутствует возможность заполнения данными типовых операций за период, учёта входящих документов, учёта произвольных исходящих документов. Приложены обработки для запуска задания планировщика на автоматический обмен данными.

1 стартмани

28.07.2016    33733    19    c1nil    4    

Лекарство на случай, если перестала работать форма списка для сделок. (ERP).

Тестирование и исправление v8 ERP2 Абонемент ($m)

Форма списка справочник сделки стала выпадать с ошибкой?  Или все еще в порядке, но хочется спокойно съездить в отпуск, без паники, что менеджеры устроят бунт.

1 стартмани

28.07.2016    22293    0    milkers    2    

Навигатор по структуре и данным баз 1С 8

Инструментарий разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Просмотр структуры и данных информационных баз 1С:Предприятие 8.2, 8.3. Состав, типы объектов, табличных частей, движений. Размер, структура хранения объекта. Для администраторов и разработчиков. Версия 1 - на обычных формах, версия 2 - на управляемых.

1 стартмани

11.07.2016    29032    128    o.nikolaev    17    

Конструктор внешних печатных форм NEW beta (обычные и управляемые приложения!)

Универсальные печатные формы Инструментарий разработчика v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Исходная обработка http://infostart.ru/public/162019/, здесь просто исправлены некоторые процедуры и функции для управляемого приложения. (Публикуется с согласия автора SeiOkami) 12.07.2016 - Версия 4.3 - убрал модальность для управляемой формы, изменена встроенная ВПФ . 23.11.2016 - Версия 4.4 - изменена встроенная ВПФ . 03.04.2018 - Версия 4.7 - исправлено сохранение ВПФ в клиент-серверном варианте от vshish. 11.05.2018 - Версия 4.8 - исправление от VovkaPutin плюс убрал из текста модуля ВПФ директивы препроцессора (то, что начинается с "#"), убрал модальность при открытии ВПФ из конструктора. 17.10.2019 - Версия 5.1 - тестировалось на платформе 8.3.15.1700, БП 3.0.73.54

1 стартмани

10.07.2016    52142    500    Alex_E    135    

БСП 2.3 и БСП 3.0: Просто про выполнение внешней обработки в фоне (c индикацией прогресса выполнения)

Инструментарий разработчика Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

Простое пояснение о том, как сделать внешнюю обработку с фоновым выполнением и индикацией процесса для любой конфигурации на основе БСП 2.3.2. UPDATE 20/09/19: добавлен вариант обработки с индикацией процента выполнения и статусом выполнения для БСП 3.0.

1 стартмани

18.05.2016    61373    178    rozer    65