Опять двойка!

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

Разработка - Практика программирования

Продолжение тем, связанных с использованием степеней двойки «Порождающий запрос» [http://infostart.ru/public/90367/] «Транзитивное замыкание запросом» [http://infostart.ru/public/158512/] На этот раз речь пойдет об операциях со строками.

Данная статья касается особенностей выполнения операций над строками в языке программирования платформы «1С: Предприятие» и проблемы медленной конкатенации строк, возникающей, если эти особенности не учитываются. Приводятся две новые полезные функции, позволяющие обходить указанную проблему.

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

Функция ПростойОтжим(Текст, Ответ = "", Было = "") Экспорт

    Для
ё = 1 По СтрДлина(Текст) Цикл Стало = Сред(Текст, ё, 1); Ответ = Ответ + ?(Было + Стало = "  ", "", Стало); Было = Стало КонецЦикла;

    Возврат
Ответ

КонецФункции

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

Схема конкатенации

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

График зависимости

График получен в результате работы следующей процедуры:

Процедура ТестВремениКонкатенации()

   
Текст = "";

    Для
ё = 1 По 32 Цикл

       
Старт = ТочноеТекущееВремя();

        Для
ж = 1 По 16384 Цикл Текст = Текст + "а" КонецЦикла;

       
Сообщить("" + 16384 * ё + ":" + (ТочноеТекущееВремя() - Старт))

    КонецЦикла

КонецПроцедуры

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

Функция ДвойнойОтжим(Знач Текст) Экспорт

    Для
ё = 1 По Log(СтрДлина(Текст)) / Log(2) + 1 Цикл Текст = СтрЗаменить(Текст, "  ", " ")

    КонецЦикла;

    Возврат
Текст

КонецФункции

В этой функции каждая итерация цикла уменьшает длину цепочки пробелов в два раза. Поэтому даже если строка состоит из одних пробелов, на ее «отжим» понадобится не больше чем  ] log2(N) [ итераций цикла, где N – исходная длина строки. Работа функции иллюстрируется следующей схемой:

Схема работы функции

На длинных строках такая функция работает приемлемое время, что показывает отчет, приложенный к статье. Строку из миллиона символов функция обрабатывает примерно за 200 миллисекунд. Скачавшие отчет смогут замерить (если хватит терпения) и время выполнения более очевидной функции «простого отжима» в зависимости от длины текста и процентного содержания пробелов в нем.
Кроме того, возможно, в коде отчета окажется интересным прием генерации «случайного» тестового текста с использованием «таблицы хаоса» из статьи "Порождающий запрос" [//xn--80appelehcm.xn--p1ai/public/90367/].
Нужно сказать, что предлагаемая функция «двойного отжима» более известна в виде функции «условного отжима»:

Функция УсловныйОтжим(Знач Текст) Экспорт

    Пока
Найти(Текст, "  ") Цикл Текст = СтрЗаменить(Текст, "  ", " ")

    КонецЦикла;

    Возврат
Текст

КонецФункции

Хотя, кажется, что такая функция должна работать несколько быстрее предлагаемой в данной статье, на самом деле, из-за того, что проверка наличия двойных пробелов тоже отнимает время, разницы в быстродействии между функциями практически нет. Особенно в случае, если пробелы сосредоточены в правой части строки. В этом также можно убедиться с помощью прилагаемого отчета.

Размышляя над отмеченной проблемой, можно прийти к выводу, что в 1С также трудно решаются любые задачи, в которых требуется синтезировать длинные строки. Например, первоначально было затруднительно получить длинную строку со случайным расположением пробелов для проверки предлагаемых функций, так как при этом также на первый взгляд требовалось использовать посимвольное наращивание строки.
Тем не менее, выход есть. Для решения таких задач предлагается первоначально работать с такими длинными строками как с массивом символов, а затем преобразовывать массив символов в результирующую строку с помощью второй предлагаемой в статье функции

Функция Строчка(Массив, От, До)

    Возврат ?(
От = До, Массив[От], Строчка(Массив, От, Цел((От + До) / 2)) + Строчка(Массив, Цел((От + До) / 2) + 1, До))

КонецФункции

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

Схема работы рекурсивной функции 

Например, массив из миллиона символов преобразуется в строку примерно за 20 секунд. ВНИМАНИЕ! Эта запись функции предполагает, что параметр «От» всегда меньше или равен параметру «До». 
Однако здесь следует сказать, что для преобразования массива символов в строку существует несколько более быстрый способ. Он основан на использовании функции «ЗначениеВСтрокуВнутр»

Функция ВСтроку(Массив) Экспорт

    Возврат
Сред(СтрЗаменить(ЗначениеВСтрокуВнутр(Массив), """}," + Символы.ПС + "{""S"",""", ""), 53 + СтрДлина(Формат(Массив.Количество(), "ЧГ=")), Массив.Количество())

КонецФункции

В этом варианте записи функции считается, что все элементы массива – это строки длиной в один символ. Ограничение длины легко преодолевается при чуть более сложной записи, а вот если в массиве могут оказаться данные разных типов, то, возможно, выгоднее будет применять рекурсивную функцию.
Для быстрого преобразования исходной строки в массив для ее обработки в таком виде можно использовать прием из статьи «Порождающий запрос»[//xn--80appelehcm.xn--p1ai/public/90367/]. Там этот прием использовался в задачах подсчета частоты символов и подсчета частоты слов в тексте.
В результате комбинация всех этих приемов позволяет решить, например, задачу быстрой транлитерации большого текста, представление текста первыми буквами всех его слов и тому подобные задачи, не решаемые комбинациями стандартных операций над строками.

В заключение хочется выразить надежду, что

  1. обозначенная проблема медленной конкатенации строк и показанная зависимость времени обработки от длины строк будет учитываться в практике программирования для платформы «1С: Предприятие»;
  2. приведенные функции окажутся востребованными, так как сокращают время выполнения часто используемых операций над строками;
  3. по аналогии с приведенными функциями и на их основе будут построены другие полезные функции обработки строк;
  4. анализ приведенных функций позволит лучше понять преимущества методов из статей «Порождающий запрос» [//xn--80appelehcm.xn--p1ai/public/90367/], «Транзитивное замыкание запросом»[//xn--80appelehcm.xn--p1ai/public/158512/], поскольку предлагаемые приемы и контрприемы имеют общую математическую основу.

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

Наименование Файл Версия Размер
Отчет ДвойнойОтжим
.erf 8,58Kb
25.11.12
11
.erf 8,58Kb 11 Скачать

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

Комментарии
Избранное Подписка Сортировка: Древо
1. DoctorRoza 26.11.12 09:51 Сейчас в теме
Скажите, а как часто у Вас появляется необходимость в использовании соединения строк, букв? В моей, скромной практике такое случается редко да и то когда нужно в, например, отчете соединить, типа - "Итого: " + Строка(Сумма). Но за работу плюс! :)
8. ildarovich 6885 26.11.12 10:58 Сейчас в теме
(1) Довольно часто. Однако понятно, что эффект проявляется только на длинных строках, работать с которыми приходится реже. Я не такой фанат, чтобы вместо "а" + "б" + "р" + "а" + "к" + "а" + "д" + "а" + "б" + "р" + "а" писать ((("а" + "б") + "р")+ (("а" + "к") + "а")) + ((("д" + "а") + "б") + ("р" + "а")), хотя из статьи следует, что эта запись быстрее.
Очень часто приходится удалять лишние пробелы в наименованиях. Для меня открытием было то, что метод "условного отжима", который я использовал лишь для краткости записи, ОКАЗАЛСЯ ТАК ЭФФЕКТИВЕН.
2. orefkov 1983 26.11.12 10:42 Сейчас в теме
Резкие тормоза после 262144 - не связаны с записью на диск.
Скорее всего, это связано с менеджером выделения памяти, сделанном в 1С.
Видимо блоки размером до 0x40000 (а это и есть 262144) выделяются 1Ской из заранее выделенного пула, а за блоками большей длины аллокатор каждый раз обращается к ОС. Хотя это навскидку, детально код из "stl82.dll :: operator new" я не исследовал.
RailMen; tormozit; Serj1C; +3 Ответить
5. ildarovich 6885 26.11.12 10:50 Сейчас в теме
(2) Да, такое объяснение больше похоже на правду. Для себя не вижу большой необходимости докапываться до первопричин в этом вопросе. Важнее зафиксировать обстоятельства возникновения эффекта и учесть его в разработке.
6. orefkov 1983 26.11.12 10:52 Сейчас в теме
+(2)
Либо еще возможный вариант увеличения тормозов - до данного размера память в строке выделяется с запасом (т.е. например под строку в 17 символа память выделяется сразу для 32 символов, и пока строка не увеличится до 32 символов - перевыделения памяти и копирования символов не происходит, а потом сразу выделяется для 64 символов), а после этой магической константы память выделяется тютелька в тютельку каждый раз.
3. djd.sf 26.11.12 10:45 Сейчас в теме
интересно было бы посмотреть сравнение с ФорматированнаяСтрока из 8.3.
4. orefkov 1983 26.11.12 10:47 Сейчас в теме
Ну и кроме того, во многих языках тупая работа со сложением строк неэффективна, и рекомендуется для этих целей использовать либо спец-объекты (StringBuilder в C# например), либо затачивать алгоритм.
7. djd.sf 26.11.12 10:52 Сейчас в теме
в шарпе строки(String) иммутабельны, насколько мне известно, поэтому и неэффективно, для этого и существует класс StringBuilder . Что в 1С делать непонятно. (ВК писать нет никакого смысла). Вот ФорматированнаяСтрока появилась в 8.3.
9. WKBAPKA 215 26.11.12 17:43 Сейчас в теме

Функция ПростойОтжим(Текст, Ответ = "", Было = "") Экспорт

Для ё = 1 По СтрДлина(Текст) Цикл Стало = Сред(Текст, ё, 1); Ответ = Ответ + ?(Было + Стало = " ", "", Стало); Было = Стало КонецЦикла;

Возврат Ответ

КонецФункции
На первый взгляд кажется, что никакого подвоха в этом коде нет.


уже в этом тексте можно немного оптимизировать код, например, СтрДлина() вызвать до цикла и один раз :)

а вызвать функцию СтрЗаменить() не быстрее было бы, например

РезТекст = СтрЗаменить(Текст," ","");
10. ildarovich 6885 26.11.12 18:14 Сейчас в теме
(9) Не согласен:
- Выражение "По" в заголовке цикла "Для" считается ОДИН РАЗ (только что еще раз проверил);
- Менять пробел на пустышку так нельзя, так как ОДИН пробел между словами по условиям задачи должен остаться.
VVladislav; Al-X; bulpi; +3 Ответить
17. bulpi 168 28.11.12 15:22 Сейчас в теме
(10)
"Выражение "По" в заголовке цикла "Для" считается ОДИН РАЗ "

Таки да! Я в шоке. Век живи, век учись.
11. devel0per 1 27.11.12 01:08 Сейчас в теме
Для работы с крупноразмерными текстами
меня еще моя бабушка учила юзать XSLT:
Процедура Тест1()
СтрXML = "<?xml version=""1.0"" encoding=""UTF-8""?>
|
|<text>
|	Примерчик,   с
|  большим     количеством                 лишненьких,
|	   случайненьких                           пробельчиков  
|	от     которых          мы хотим         
|                  отчесаться.
|
|</text>";

Преобразование = Новый ПреобразованиеXSL;
СтрокаXSLT = "<?xml version=""1.0""?>
|<xsl:stylesheet version=""1.0""           
|     xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">
|
|  <xsl:output method=""xml""   
|       omit-xml-declaration=""yes""/>
|
|<xsl:template match=""/text"">
|До: 
|<xsl:value-of select='.'/>
|Опосля: <xsl:value-of select='normalize-space()'/>
|</xsl:template>
|
|</xsl:stylesheet>";

Преобразование.ЗагрузитьИзСтроки(СтрокаXSLT);
СтрРез = Преобразование.ПреобразоватьИзСтроки(СтрXML);
Сообщить(СтрРез);

КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
	Тест1();
КонецПроцедуры
Показать
12. ildarovich 6885 27.11.12 14:07 Сейчас в теме
(11)
Если бабушка вам говорит, что без варежек играть в снежки удобнее - значит, это не ваша бабушка.
- А если серьезно, то спасибо за расширение кругозора. Вот только протестировать Ваш метод пока не смог. Переписал его вот в таком виде:
Функция ОтжимXSLT(Текст) Экспорт
	
	СтрXML = "<?xml version=""1.0"" encoding=""UTF-8""?>
	|
	|<text>
	|" + Текст + ".
	|
	|</text>";
	
	Преобразование = Новый ПреобразованиеXSL; 
	
	СтрокаXSLT = "<?xmlversion=""1.0""?>
	|<xsl:stylesheet version=""1.0""           
	|     xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">
	|
	|  <xsl:output method=""xml""   
	|       omit-xml-declaration=""yes""/>
	|
	|<xsl:template match=""/text"">
	|До: 
	|<xsl:value-of select='.'/>
	|Опосля: <xsl:value-of select='normalize-space()'/> </xsl:template>
	|
	|</xsl:stylesheet>";

	Преобразование.ЗагрузитьИзСтроки(СтрокаXSLT);
	
	Возврат Преобразование.ПреобразоватьИзСтроки(СтрXML)
	
КонецФункции
Показать
При вызове получаю ошибку:
{ВнешнийОтчет.ДвойнойОтжим.МодульОбъекта(89)}: Ошибка при вызове метода контекста (ЗагрузитьИзСтроки)
Преобразование.ЗагрузитьИзСтроки(СтрокаXSLT);
по причине:
Ошибка разбора XML: - [1,13]
Фатальная ошибка:
ParsePI: PI xmlversion space expected
13. devel0per 1 27.11.12 22:43 Сейчас в теме
(12)
Караул грабят! Хулиганы на рынке форуме у прохожих пробелы отжимают!
Код
СтрокаXSLT = "<?xmlversion=""1.0""?>
Показать полностью

Я ясно помню!
Код
"xml<ВОТ ЗДЕСЬ/>version" 
Показать полностью
у меня стоял пробел. На каком ходу копи-пасты вы его съели?
Прикрепленные файлы:
14. ildarovich 6885 28.11.12 00:29 Сейчас в теме
(13) Извиняюсь за невнимательность - один пробел действительно "зажал"!
Провел эксперимент. Он показал, что метод с использованием "ПреобразованиеXSL" примерно на 30% медленнее предлагаемого на 1048576 символах теста при 50% заполнении пробелами. При сокращении количества пробелов до 0 проигрыш достигает четырех раз. С помощью прилагаемого отчета это можно проверить самостоятельно.
Прикрепленные файлы:
ДвойнойОтжим_.erf
15. devel0per 1 28.11.12 09:42 Сейчас в теме
(14)
Это был шок! Я просто не мог поверить своим глазам!
Не смотря на то, что мне удалось добиться некоторой прибавки в быстродействии для функции XSLTОтжим,
главным образом, за счет вынесения переменной "Преобразование" в модуль объекта и путём замены output method с xml на text, ваш метод все равно работает быстрее.
Вот значения системных свойств XSLT:
Version: 1.0
Vendor: libxslt
Vendor URL: http://xmlsoft.org/XSLT/
Из этих значений можно предположить, что ваш метод работает быстрее, чем функция из библиотеки libxslt, которая написана на голом Си и входит в состав проекта GNOME.

ildarovich, спасибо за науку!
16. devel0per 1 28.11.12 15:14 Сейчас в теме
(14)
Не давала мне покоя неудача с XSLT. Пришлось снять и выкинуть варежки.
Добавил функцию COMRegExp. Эксперименты показали, что метод с использованием
регулярных выражений быстрее двойного отжима приблизительно в 4-ре раза.
Обработка прилагается.
Прикрепленные файлы:
ДвойнойОтжим_.zip
ildarovich; +1 Ответить
18. ildarovich 6885 28.11.12 18:44 Сейчас в теме
(16) RegExp - это конечно, первое, что приходит в голову, когда речь идет о подобных задачах. Сомневаться в его преимуществах здесь не приходится. Однако, это уже не 1С. Тем не менее спасибо за пример!
19. erdos 28.11.12 23:31 Сейчас в теме
а я думал xlst это не нужная штуковина в 1с
20. i_volodin 04.12.12 15:25 Сейчас в теме
Можно, ли мне внеси маленькую лепту... к "обработкам строк"? Думаю, что обычный отжим Вы сильно тормознули. (Написал было код, да он как оказалось(как обычно) - не работает,) :) - исправлю - напиишу :)
21. i_volodin 04.12.12 16:46 Сейчас в теме
Вот - вроде бы работающий код. Конечно он не обгонит Ваши новшества, но смыл такой, что бы убрать долгую функцию Сред()
Функция ПростойОтжим_2(Знач Текст) Экспорт
	НайденныйПробел = 1;
	Ответ = "";
	//Для П = 1 По СтрДлина(Текст) Цикл
	Пока НайденныйПробел<>0 Цикл
		НайденныйПробел = Найти(Текст, " "); 
		Ответ = Ответ + СокрЛ(Лев(Текст,НайденныйПробел));
		Текст = СокрЛ(Прав(Текст,СтрДлина(Текст)-НайденныйПробел));
	КонецЦикла;
	Возврат Ответ;
КонецФункции
Показать
ildarovich; +1 Ответить
22. ildarovich 6885 04.12.12 17:26 Сейчас в теме
(21) Илья! Ваш вариант мне понравился по двум причинам. Первое - в задаче об "отжиме" пробелов используется СокрЛ - функция "по теме". Второе - он действительно быстрее и из-за Сред(), но, главное (и об этом статья) - использует меньше конкатенаций. Настолько меньше, насколько больше одной буквы средняя длина слова. Если бы было нужно, я бы текст делил, применяя для половинок СокрЛП. В целом считаю Ваш вариант полезным идеями.
Однако для меня поиск решений данной задачи закрыт. Как делается оптимизация в коде 1С вообще - находится близкая по смыслу функция, которая делает "почти то, что нужно", но за один прием. Тут это и сделано по-максимуму. Статью я написал, потому, что меня поразило: насколько не эффективен путь стэйт-машины, которым идут все, кто обрабатывал строки на других языках. И я также думал: будет время, перепишу условный отжим на стэйт-машину и будет быстрее. И сильно ошибался. Когда формировал строку из мегабайта символов - 1С так подвисал, что я чуть было не начал платформу переустанавливать.
Ну и еще удивился очень близкой аналогии с приемом построения запроса. В той задаче никто не рискнул (а мог бы) предлагать другое решение, чтобы сравнить быстродействие, а здесь это легче.
23. ildarovich 6885 16.05.13 13:22 Сейчас в теме
В обсуждении к статье Составные типы — бесплатный сыр мышеловки производительности ее автор предложил для синтеза длинных строк использовать объект ЗаписьXML в виде функции (в моей интерпретации) наподобие
Функция ДлиннаяСтрокаЧерезЗаписьXML(Длина, Чего = "") Экспорт
	Запись = Новый ЗаписьXML;
	Запись.УстановитьСтроку(); 
	Чего = Лев(Чего + " ", 1);
	Для ё = 0 По Длина - 1 Цикл Запись.ЗаписатьБезОбработки(Чего) КонецЦикла;
	Возврат Запись.Закрыть()
КонецФункции
Она работает еще быстрее (примерно на 12%), чем функция через представление массива, приведенная в статье.
marsohod; +1 Ответить
24. Al-X 20.06.13 12:44 Сейчас в теме
Мда !! Люблю я статьи про исследования 1С. За статью - спасибо ! Но я как-то слабо (точнее никак) представляю, когда может понадобиться обрабатывать строки большей длинны ? Может у меня не так много опыта еще....
25. i_volodin 20.06.13 14:52 Сейчас в теме
(24) Al-X, Ну генерация текста запроса - самый очевидный ответ.
26. sacred 172 28.10.13 13:14 Сейчас в теме
(24) Al-X, А я как-то раз занимался "конвертированием" правил обмена из Конвертации данных в программный код. Строка там получалась зело длинная. Тогда я выкрутился созданием нескольких вложенных циклов, вместо одного линейного. Парадокс. Во внутреннем складывал 20-30 кусочков и полученная строчка уходила на обработку во внешний цикл. Внешний тоже складывал 10-20 уже укрупнённых строк. Ну и самый внешний складывал самые крупные куски. Такая методика сильно ускорила построение текста по сравнению с одним простым циклом.
Однако, сейчас я бы это делал через ЗаписьТекста/ТекстовыйДокумент.
27. ildarovich 6885 28.10.13 13:56 Сейчас в теме
(26) Самый быстрый из проверенных способов - через объект ЗаписьXML. Ссылка в комментарии (23).
29. Sergey.Noskov 17.07.14 15:15 Сейчас в теме
(27) ЗаписьТекста или ТекстовыйДокумент пробовали? Интересно узнать сравнительные замеры. Решал задачу связанную со сложением строк в базе ЦУП, использовал тогда ТекстовыйДокумент.
28. Sergey.Noskov 17.07.14 15:13 Сейчас в теме
(24) Al-X, формирование текстов писем, тестов логов, обмен через текстовые файлы
30. ildarovich 6885 07.01.19 00:45 Сейчас в теме
Вот здесь: https://habr.com/company/1c/blog/429678/ 1С описала свой механизм работы со строками...
Наша строка основана на идеях оптимизации строк, высказанных ещё в начале 2000-х Андреем Александреску
Теперь ступенька на графике получила конкретное объяснение.
Оставьте свое сообщение

См. также

Распаковка хранилища значений средствами MS SQL Server

Инструменты и обработки Программист Компонента, плагин (dll, vbs,..) MS SQL Абонемент ($m) Практика программирования

Способ извлечения данных из 1С-ного "ХранилищеЗначений" в MS SQL Server с помощью самописной скалярной функции (без использования платформы 1С).

1 стартмани

23.09.2019    4082    SerVer1C    11       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Расширяем возможности MS SQL Server с помощью хранимых процедур CLR

Инструменты и обработки Программист Архив с данными MS SQL Абонемент ($m) Практика программирования Разработка

Не хватает какого-то функционала на скуле для обработки данных? Тогда он (новый функционал) идет к вам.

1 стартмани

02.09.2019    5349    SerVer1C    9       

Упражнения на Перфоленте. Парсим технологический журнал 1С

Статья Системный администратор Программист Архив с данными Windows Абонемент ($m) Сервисные утилиты Инструментарий разработчика Практика программирования Разработка

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

1 стартмани

31.07.2019    5109    Perfolenta    62       

INFOSTART MEETUP Kazan. 13 марта 2020 г. Промо

Инфостарт продолжает путешествие по России. Следующая остановка - Казань. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Ждем всех: докладчиков и участников! Стоимость участия - 5 500 рублей. Цена действительна до 30.01.2020

5 500

В 1000 раз быстрее

Статья Программист Архив с данными ИТ-компания Windows Абонемент ($m) Практика программирования Разработка

Реализация алгоритма трассировки лучей на новом языке программирования "Перфолента"

1 стартмани

24.07.2019    3586    vasvl123    6       

Перфолента, первое знакомство. Новый язык программирования

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

Первое знакомство с новым языком программирования Перфолента. В статье описано назначение языка, причины его появления, основные характеристики и возможные варианты использования.

22.07.2019    16760    112    Perfolenta    165       

Сдача регламентированной отчетности из программ 1С Промо

Сдача регламентированной отчетности из программ "1С" во все контролирующие органы без выгрузок и загрузок в другие программы. Для групп компаний действуют специальные предложения.

от 1500 руб.

Вам нравятся запросы в 1С?

Инструменты и обработки Программист Конфигурация (md, cf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования Разработка

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    13510    4    m-rv    86       

Безопасная работа с транзакциями во встроенном языке

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования

Разбираемся с опасностями использования транзакций во встроенном языке 1С. Познаем ошибку "В данной транзакции уже происходили ошибки". Учимся защищаться от них.

1 стартмани

25.03.2019    21104    9    tormozit    44       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Настраиваемое мобильное приложение для сканирования штрихкодов

Инструменты и обработки Программист Приложение (apk) Android Абонемент ($m) Практика программирования Сканер штрих-кода Мобильная разработка

Обзор приложения для сканирования штрихкодов с возможностью обработки результата сканирования произвольным кодом для совместного использования с Android приложениями через Intent и взаимодействие с 1С конфигурациями через web-сервис.

1 стартмани

14.01.2019    5141    2    inord777    5       

Разработка внешних компонент на ассемблере goAsm

Статья Программист Архив с данными Windows Абонемент ($m) Практика программирования

Создание внешней компоненты по технологии Com "с нуля", используя ассемблер goAsm.

1 стартмани

26.11.2018    8761    6    chessman    40       

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

Работа с публикациями "Инфостарт"

Инструменты и обработки Программист Архив с данными v8 УУ Абонемент ($m) Практика программирования О сообществе WEB

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    12437    12    RocKeR_13    16       

Создаем объекты для модуля Bootstarp на Русском Фоксе

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования

Создавайте свой модуль с объектами для модуля Bootstrap, пакуйте их fxp-файлы и создавайте сайты из этих кубиков. Разберем, как это делать. Все гениальное должно быть простым, как теория относительности.

1 стартмани

19.08.2018    4726    andreosh    2       

​​​​​​​CorelDRAW Graphics Suite 2019 Промо

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

РусскийФокс и BootStrap

Инструменты и обработки Программист Архив с данными Россия Абонемент ($m) Практика программирования

РусскийФокс вносит новый технологический подход в сайтостроение. Теперь вы можете ограничиться знанием Русского Фокса и не иметь знаний по HTML, CSS, JavaScript, PHP, чтоб создавать сайты.

1 стартмани

16.08.2018    5000    2    andreosh    18       

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

Инструменты и обработки Программист Бизнес-аналитик Приложение (apk) v8 Windows Абонемент ($m) Инструментарий разработчика Практика программирования

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

5 стартмани

09.08.2018    19415    25    informa1555    26       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

РусскийФокс. Изменение DBF-файла и назначение командных клавиш

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования Файловые протоколы обмена, FTP

- Шарапов, ты Русского Фокса знаешь ? - Конечно, Глеб. Я же программирую на Русском Фоксе. РусскийФокс (1C-подобный язык программирования) создает DBF-файлы и выгружает данные из DBF в XML.

1 стартмани

01.08.2018    4773    andreosh    2       

РусскийФокс. Создание DBF-файла, выгрузка в XML.

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . РусскийФокс создает DBF-файлы и выгружает данные из DBF в XML. Голосуйте за доклад о РусскийФокс на Инфостарт.

1 стартмани

28.07.2018    4509    2    andreosh    0       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

РусскийФокс и ClickerMann заносят данные в 1С

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Сервисные утилиты Практика программирования

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . РусскийФокс создает сценарии для Clickermann. Сценарий заполняет справочник в 1С.

1 стартмани

21.07.2018    7898    1    andreosh    20       

Работа с данными выбора

Инструменты и обработки Программист Архив с данными v8 Россия Абонемент ($m) Практика программирования Работа с интерфейсом

В управляемом интерфейсе заложена мощная возможность описывать связи реквизитов формы через параметры. Установка параметров связей позволяет ограничить выбор данных так, чтобы целостность данных была обеспечена на этапе ввода. Однако без дополнительного программирования задать можно только самые простые связи. Такие условия связи, как зависимость от реквизита через точку или зависимость через дополнительное отношение, заданное в регистре сведений - уже задать без программирования не получится.

1 стартмани

17.07.2018    29397    17    kalyaka    16       

1C:Предприятие для программистов: Запросы и отчеты. Второй поток. Онлайн-интенсив с 17 марта по 16 апреля 2020 г. Промо

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

6500 рублей

РусскийФокс и OpenOffice, а также исследование объектов

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . Взаимодействие с OpenOffice. GitHub https://github.com/UfaScript/RusFox

1 стартмани

12.07.2018    4897    1    andreosh    2       

РусскийФокс. Настройка NotePad++, 1C-подобные функции и операторы и создание объектов

Статья Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. Создание объектов и настройка NotePad++. GitHub https://github.com/UfaScript/RusFox

1 стартмани

06.07.2018    8701    1    andreosh    12       

1C:Предприятие для программистов: Расчетные задачи (зарплата). Онлайн-интенсив с 01 по 17 июня 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для автоматизации периодических расчетов, а именно - для расчета зарплаты. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Зарплата и управление персоналом” и прочих прикладных решений, в которых реализован функционал расчета зарплаты.

4900 рублей

РусскийФокс — 1С-подобный язык программирования

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. Знакомство.

1 стартмани

03.07.2018    7837    1    andreosh    50       

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар")

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    22548    86    m-rv    57       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

БСП: Дополнительная обработка (Регламенты), примеры от простого к сложному

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования БСП (Библиотека стандартных подсистем)

Очень много попадается странных решений, которые можно решить через БСП:Дополнительные отчеты и обработки. Я бы вообще БСП из-за этой подсистемы переименовал в «Большое Спасибо Программистам». Поработаем с подсистемой в части написания регламентных заданий.

1 стартмани

10.05.2018    33530    31    dsdred    36       

Как выполнить отчет на СКД через COM и получить данные отчета?

Статья Программист Архив с данными v8 УПП1 Россия Windows Абонемент ($m) Практика программирования

Для чего это нужно. Например, нужно в одной базе получить какой-либо показатель из другой базы. Этот показатель вычисляется в каком-либо сложном отчете, который написан на СКД. Можно, конечно, "скопипастить" текст запроса из другой базы, немного подправить его и выполнять в том же COM подключении. Но с этим теряется гибкость: если отчет изменился, то нужно помнить о том, что где-то есть его "немного модифицированная" копия. В статье будет рассмотрен пример получения данных из базы ЗУП.

2 стартмани

08.05.2018    20788    11    wowik    3       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Работа со схемой запроса

Статья Программист Конфигурация (md, cf) v8 v8::Запросы Абонемент ($m) Инструментарий разработчика Практика программирования

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

1 стартмани

24.04.2018    33711    77    kalyaka    34       

Длинная арифметика (Bignum arithmetic) c COM-интерфейсом (ActiveX) на библиотеках MPIR

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

Расчеты любой точности в вашем программном продукте, поддерживающем стандарт COM. Размер/точность длинного числа зависит только от вашей оперативной памяти. Проект основан на исходниках библиотеки MPIR, Edition 3.0.0. Полностью написан на С/С++ (COM.DLL).

1 стартмани

12.04.2018    4838    1    bedvit    4