Использование JavaScript для обработки данных в 1с

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

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

JavaScript обработка данные

В статье мы передадим данные в JavaScript и получим результат обратно в 1С-объекты средствами JSON. Также "поиграем" с переданными данными.

Давайте передадим данные для обработки JavaScript, а результат вернем в 1С-объекты для дальнейшего использования уже в среде 1С. На практике такой подход можно применять в проектах связанных с web-технологиями например в таких как Яндекс карты 2.1. Построение маршрута. Передача длины маршрута в реквизит формы.

 

Создадим обработку для работы с данными. Добавим реквизит "HTML" с типом строка. В свойствах формы укажем вид "Поле HTML документа"

 

 

В модуле формы добавим несколько процедур.

Код HTML присваиваем переменной HTML. Подключаем обработчик ожидания через 0.1 секунды (обработчик срабатывает практически мгновенно).

 

 


&НаКлиенте
Процедура Тест(Команда)
	Макет = ПолучитьМакет("Макет");
	Данные = Макет.ПолучитьТекст();
	
	Скрипт = "
	|	const last = arr1.pop()
	|	const first = arr1.shift()
	|	arr1.splice(5,20)
	|	arr1.reverse()
	|	document.getElementById('body').innerHTML=JSON.stringify(arr1)
	|";
	
	HTML = "<!DOCTYPE html>
	|<html>
	|<head></head>
	|<body id='body'>
	|<script>
	|	arr1 = "+Данные+"
	|   "+Скрипт+"
	|</script>
	|</body>
	|</html>";
	ПодключитьОбработчикОжидания("ПолучитьРезультат", 0.1, истина);
	
КонецПроцедуры

Функция ПолучитьМакет(Макет)
	Обработка =  РеквизитФормыВЗначение("Объект");
	Возврат Обработка.ПолучитьМакет(Макет); 
КонецФункции

&НаКлиенте
Процедура ПолучитьРезультат()
	
	Попытка
		HTMLBody = Элементы.HTML.Документ.body.textContent;
		Стр = ИзJSON(HTMLBody);
		ТутЯСтавлюТочкуОстанова = 1;
	Исключение
		Сообщить(ОписаниеОшибки());
        //Если ошибка, то подключаю ОЖ еще раз через 1 секунду
		ПодключитьОбработчикОжидания("ПолучитьРезультат", 1, истина);
	КонецПопытки;	
	
КонецПроцедуры

Функция ИзJSON(СтрокаJSON) 
	ТекТоварыJSON = Новый ЧтениеJSON;
	ТекТоварыJSON.УстановитьСтроку(СтрокаJSON);
	Возврат ПрочитатьJSON(ТекТоварыJSON);
КонецФункции

 

Добавим в обработку макет (текстовый документ)

 

 

 
Данные в макет (Массив объектов или Массив структур)

В результате в поле HTML будут выводится JSON данные, которые сформировал JavaScript. В процедуре ПолучитьРезультат мы преобразуем JSON в 1с объекты.

 

 

Порадовал WebKit 1c, что он поддерживает ES6 синтаксис JavaScript(стрелочные функции и тд).

1. Получим и удалим первый и последний элемент. Далее удалим с 5 по 20 элемент массива и перевернем массив.

Метод shift() удаляет первый элемент из массива и возвращает его значение. 

Метод pop() удаляет последний элемент из массива и возвращает его значение.

Метод splice() изменяет содержимое массива, удаляя существующие элементы или добавляя новые.

Метод reverse() на месте обращает порядок следования элементов массива. Первый элемент массива становится последним, а последний — первым.

 

 

Скрипт = "	
	|	const first = arr1.shift()
	|	const last = arr1.pop()
	|	arr1.splice(5,20)
	|	arr1.reverse()
	|	document.getElementById('body').innerHTML=JSON.stringify(arr1)
	|";

2. Получим имена всех людей в структуру через запятую.

Метод map() создаёт новый массив с результатом вызова указанной функции для каждого элемента массива.

Метод join() объединяет все элементы массива в строку.

 

 

Скрипт = "
	|	const str = arr1.map(person=>person.name).join(', ')
	|	const names = {names:str}
	|	document.getElementById('body').innerHTML=JSON.stringify(names)
	|";

3. Найдем человека по имени.

Метод find() возвращает значение первого найденного в массиве элемента.

 

 

Скрипт = "
	|	const person = arr1.find(person=>person.name === 'Pauwels van Haverbeke')
	|	document.getElementById('body').innerHTML=JSON.stringify(person)
	|";

4. Получим людей у которых бюджет меньше 200000.

Метод filter() создаёт новый массив со всеми элементами, прошедшими проверку, задаваемую в передаваемой функции.

 

 

Скрипт = "
	|	const arr2 = arr1.filter(person=>person.budget < 200000 )
	|	document.getElementById('body').innerHTML=JSON.stringify(arr2)
	|";

5. Подсчитаем Сумму бюджета у мужчин и у женщин.

Метод reduce() применяет функцию к элементу массива, возвращая одно результирующее значение.

 

 

Скрипт = "
	|	const arr2 = arr1.reduce((prev, el) => {
	|	    prev[el.sex] += el.budget
	|	    return prev 
	|	}, {f:0,m:0})
	|	document.getElementById('body').innerHTML=JSON.stringify(arr2)
	|";

6. Получим Два массива с возрастами мужчин и женщин.

Метод reduce очень хорош) Особенно открывает новые возможности применения, если в значение по умолчанию передавать не просто число, а массив или объект.

 

 

Скрипт = "
	|	const arr2 = arr1.reduce((prev, el) => {
	|	    prev[el.sex].push(el.age)
	|	    return prev 
	|	}, {f:[],m:[]})
	|	document.getElementById('body').innerHTML=JSON.stringify(arr2)
	|";

7. Добавим в структуру новое свойство id со сгенерированным номером от 1000000 до 9000000.

Метод Math.random() возвращает псевдослучайное число с плавающей запятой из диапазона 0 до 1

 

 

Скрипт = "
	|	function getRandomArbitrary(min, max) {
	|        return Math.floor(Math.random() * (max - min) + min)
	|    }
	|    const arr2 = arr1.map(person=>{
	|        person.id = getRandomArbitrary(1000000, 9000000) 
	|        return person
	|    })
	|	document.getElementById('body').innerHTML=JSON.stringify(arr2)
	|";

8. Отсортируем объекты по имени, переведем имена в верхний регистр, добавим номер по порядку.

Метод sort() на месте сортирует элементы массива и возвращает отсортированный массив.

 

 

	Скрипт = "
	|	const arr2 = arr1.sort((a, b) => a.name > b.name ? 1 : -1)
	|    .map((person,index)=>{
	|       person.name = person.name.toUpperCase()
	|       person.nomer = index+1
	|       return person
	|	 })
	|	document.getElementById('body').innerHTML=JSON.stringify(arr2)
	|";

9. Получаем структуру структур по имени, чтобы структура корректно отражалось в 1с пробелы меняем на "_".

Метод forEach() выполняет указанную функцию один раз для каждого элемента в массиве.

 

 

Скрипт = "
	|	const byName = {}
	|	arr1.forEach(function (person) {
	|	    byName[person.name.replace(/ /g,'_')] = person
	|	})
	|	document.getElementById('body').innerHTML=JSON.stringify(byName)
	|";

10. Получим детей у которых есть родители в данном массиве.

 

 

	Скрипт = "
	|const byName = {}
	|arr1.forEach(function (person) {
	|    byName[person.name] = person
	|})
	|const keys2 = Object.keys(byName)
	|const arr2 = keys2
	|.map((key) => {
	|    if (byName[key].mother !== null) {
	|        if (byName[byName[key].mother] !== undefined) {
	|            return byName[key]
	|        }
	|    } 
	|    if (byName[key].father !== null) {
	|        if (byName[byName[key].father] !== undefined) {
	|            return byName[key]
	|        }
	|    }           
	|}).filter(person=> person!== undefined) 
	|	document.getElementById('body').innerHTML=JSON.stringify(arr2)
	|";

 11. Получим женщин, которые являются матерями.

 

 

	Скрипт = "
	|const byName = {}
	|arr1.forEach(function (person) {
	|    byName[person.name] = person
	|})
	|
	|const keys2 = Object.keys(byName)
	|	const arr2 = keys2
	|    .map((key) => {
	|        const mother =
	|            byName[key].mother === null ? undefined : byName[byName[key].mother]
	|        return mother
	|    })
	|    .filter((mother) => mother !== undefined)
	|	document.getElementById('body').innerHTML=JSON.stringify(arr2)
	|";

12. Получим массив возрастов отцов.

 

 

Скрипт = "
	|const byName = {}
	|arr1.forEach(function (person) {
	|    byName[person.name] = person
	|})
	|
	|const keys = Object.keys(byName)
	|const arr2 = keys
	|    .map((key) => {
	|        const father =
	|        byName[key].father === null ? undefined : byName[byName[key].father]
	|        return father !== undefined ? father.age : 0
	|    })
	|    .filter((value) => value > 0)
	|	document.getElementById('body').innerHTML=JSON.stringify(arr2)
	|";

13. Сгруппируем людей по возрасту.

 

 

Скрипт = "
	|var group = {}
	|	arr1.forEach(function (person) {
	|	  person.century = '_' + Math.ceil(person.age / 10) 
	|	  group[person.century] = []
	|	})
	|arr1.forEach(function (person) {
	|  group[person.century].push(person)
	|})
	|	document.getElementById('body').innerHTML=JSON.stringify(group)
	|";

 

P.S. Выкладывайте в комментариях свои скрипты, которые вы придумали с этими данными. 

 

Тестировал: 

Платформа 1С:Предприятие 8.3 (8.3.17.1851)

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. informa1555 1794 02.01.21 14:10 Сейчас в теме
Я жабаскрипт вообще не знаю, но из того что я знаю круче всего обработка данных происходит на питоне. Вот если б питон прикрутить к 1С это был бы вообще агонь. Но все равно плюс.
kaliuzhnyi; +1 Ответить
2. s_vidyakin 63 02.01.21 16:49 Сейчас в теме
(1) питон так просто к формам не прикрутить, поэтому смысла в нем мало. А современный JS c ES6 почти ничем не отличается по работе с данными.
Для питона можно такой кейс интеграции описать - пишется на нем скрипт обработки данных, с полпинка поднимается http-сервер, 1С туда передает данные, а в ответ получает результат и выводит на форму. Было бы интересно сравнить расчет себестоимости через математический пакет numpy ) Если конечно имеет смысл после появления быстрого платформенного решения СЛАУ.
3. informa1555 1794 02.01.21 17:15 Сейчас в теме
(2) да это понятно с фласком там все будет работать или тензорфлоу через рест. Не я про другое немного - Вы пишете про парсинг json, а просто смотрю как в JS и как в питоне - в питоне все в 1 строку грубо говоря, да и вообще там много чего в 1 строку. И он как мне кажется создан для обработки данных - не даром же jupiter notebook. Вот я и подумал если бы не через rest а так взял из 1С выборку запроса, обработал питоном, упаковал в там же в json да и отправил куда надо там же (а то в 1С http запросы какие то тоже замороченные). Вот это было бы даа...
5. s_vidyakin 63 03.01.21 01:02 Сейчас в теме
(3) ради написания чего-то в одну строку не стоит заморачиваться )) Можно и в JS писать лапшу в одну строку, только нафига? Потом самому же сложнее будет разобраться через полгода. У 1С задач нет для обработки в питоне, он больше для математических задач, статистики, искуственного интеллекта. Это надо или очень большие объемы или сложные алгоритмы, у вас есть примеры таких задач, чтобы было оправдано применение питона?
13. webester 34 05.01.21 06:34 Сейчас в теме
(3) использовать фласк для того, что бы запустить вебсервер это все равно, что использовать 1С чтобы вывести сообщение пользователю
4. ksely 110 02.01.21 17:54 Сейчас в теме
(2) Я питон прикручивал к 1С через СОМ (см. pywin32). Пишешь на питоне СОМ-объект, регистрируешь его, потом их 1С вызываешь. Я так использовал готовые решения на Python для раскрашивания кода, перевода markdown в html и PDF в текст.
Sorm; user1503726; +2 Ответить
10. pm74 192 04.01.21 18:00 Сейчас в теме
а что именно нужно прикрутить?
вот так сойдет
Прикрепленные файлы:
6. user1503726 03.01.21 01:06 Сейчас в теме
Имхо, для улучшения читабельности и понимания скрипты можно перенести все в текстовый макет и в коде как то выделять отдельные кусочки-скрипты.
Но проблема в том, что в рамках 1с нет возможности получить данные, пригодные для питона...
Залить в одну базу данные за несколько лет из разных источников - той же 1с, екселя, фокспро и собрать можно, но что и зачем? У пользователей 1с нет потребности в той информации, которую предлагает data science, а если есть, то это уже не 1с.
11. s_vidyakin 63 04.01.21 23:52 Сейчас в теме
(6) как это нет возможности? питон в основном с CSV работает, обычный текстовый файл с разделителями
12. user1503726 04.01.21 23:57 Сейчас в теме
(11) правильно, где вы в 1с увидите csv? Это база данных и уже даже не dbf..
Я допускаю что разово можно выгрузить из скд (самое примитивное что можно придумать, это остатки по бухучету со всеми реквизитами субконто в колонках, у меня в 7ке было такой конструктор, но даже самый большой справочник не превышал 7 тыс) в csv программно и прокрутить через алгоритмы питона.
В 7ке v7plus выполняла построчную запись, с скд тоже так можно и на клиенте или только на сервере?
14. John_d 3025 05.01.21 11:27 Сейчас в теме
(6) Насчет макетов согласен, но для стати мне было удобно размещать скрипты в форме и комментировать те которые ненужны в данный момент, чем создавать 13 макетов.
user1503726; +1 Ответить
7. SeiOkami 1924 03.01.21 07:58 Сейчас в теме
Интересно было бы посмотреть сравнения замеров времени. Насколько методы через JS будут выполняться быстрее/медленнее, чем платформенные 1С

За статью лайк
sashapere; u_n_k_n_o_w_n; asupsam; PowerBoy; Sorm; +5 Ответить
8. Sorm 53 03.01.21 10:11 Сейчас в теме
(7) Собственно, только это и интересно. Да, это все замечательно, но это что, делать основной технологии работы с массивами в каком-то решении? Внедрять всерьез?
"Ну, как эксперимент это интересно, но каково практическое применение?"(с)
16. John_d 3025 05.01.21 11:32 Сейчас в теме
(8) На практике такой подход можно применять в проектах связанных с web-технологиями например в таких как Яндекс карты 2.1. Построение маршрута. Передача длины маршрута в реквизит формы ( https://infostart.ru/public/988527/ )
sashapere; tchsn; fight1c; user1503726; +4 Ответить
17. Sorm 53 05.01.21 22:16 Сейчас в теме
(16) Да я видел заголовок:) Ничего против конкретных специализированных задач не имею:) Но в остальном...
18. Артано 683 06.01.21 10:11 Сейчас в теме
(7) JS выполняется на порядок быстрее, особенно если дело касается работы с математикой. Впрочем даже простые переборы коллекций отрабатывают быстрее. То есть, если в яве написать полностью независимый метод, который перелопатит кучу данных/сделает кучу вычислений и вернет результат, то накладные расходы на работу с внешним JS окупятся даже если JS будет через COM-объект работать.
9. quazare 906 03.01.21 16:35 Сейчас в теме
много статей "чисто экспериментальных" без особых практических применений, но это интересно с другой стороны - мол кто-то уже попробовал данную возможность
15. user1503726 05.01.21 11:31 Сейчас в теме
То есть справочник с полем неограниченной длины удобнее чем хранение текстовых и табличных документов в регистре сведений? Или это не принципиально..
19. kalyaka 657 06.01.21 16:42 Сейчас в теме
Идея очень понравилась. Потенциал кажется очень высоким, есть куда развиваться :)

Немного критики. Код на JS лучше оформлять в специализированных редакторах, например в VS, тогда он будет выглядеть более канонически :). У языка JS очень сложная судьба и в последних версиях в него много чего добавили, но и старое осталось. И здесь очень важно выбрать для себя один стиль и придерживаться его, например: функциональный с использованием только чистых функций.

Не канонически:
- одновременно использовать функции map, reduce и forEach (п.9, п.10);
- использовать стрелочные функции и не стрелочные (п.9, п.7);
- в п.3 неоднозначная операция '=', правильно использовать '===';
- в п.5 функция не чистая, хотя впрочем стартовое значение не использует переменную, но все же (аналогично в п.6);
- смешение русского и английского в п.8
- отсутствие завершения операторов ";"

Еще раз повторюсь, идея в статье мне очень понравилась. Использование в своих решениях нескольких языков программирования, где бы каждый язык наилучшим образом подходил для решения своей задачи - думаю это тренд. Конечно у таких решений есть и свои недостатки... Один из них - необходимость знать разные языки.
20. John_d 3025 06.01.21 17:15 Сейчас в теме
(19) Спасибо за подробный разбор.
Пишу в VS копирую в 1с)
- одновременно использовать функции map, reduce и forEach
Почему плохо?
- использовать стрелочные функции и не стрелочные
Периодически требуется и то и другое. Стрелочная функция не влияет на this, а обычная делает свой this
- в п.3 неоднозначная операция '=', правильно использовать '===';
По невнимательности. Исправил.
- функция не чистая, хотя впрочем стартовое значение не использует переменную
Если вы про return. Тогда я не согласен. В стрелочных функциях тоже бывает return, если строчек больше чем одна.
- смешение русского и английского в п.8
Не сразу понял) nomer
- отсутствие завершения операторов ";"
";" в JS необязательные. Без них код чище.
21. kalyaka 657 06.01.21 17:32 Сейчас в теме
(20)
";" в JS необязательные. Без них код чище
Однако это может порождать проблемы semi
- функция не чистая, хотя впрочем стартовое значение не использует переменную
Я про мутацию, return должна в чистом виде возвращать новый объект.
Периодически требуется и то и другое
Согласен, однако здесь я не вижу основания. Выглядит как старый код, когда можно писать по современному.
одновременно использовать функции map, reduce и forEach
Первые две предполагают использование чистых функций, а forEach - мутацию (не всегда, но в приведенных примерах)
Оставьте свое сообщение

См. также

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions Промо

Универсальные функции Практика программирования v8 Бесплатно (free)

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    4455    comol    22    

Базовые вещи БСП, которые облегчат жизнь программисту 1С

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Россия Бесплатно (free)

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

30.08.2020    11034    quazare    33    

Форма выбора (подбор) в управляемых формах

Практика программирования v8 v8::УФ 1cv8.cf Россия Бесплатно (free)

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020    36247    user5300    16    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    39489    ids79    26    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    38475    unichkin    74    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    30695    John_d    22    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    23380    kuzyara    38    

30 задач. Странных и не очень

Практика программирования v8 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    18886    YPermitin    60    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    32090    tormozit    104    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

Практика программирования v8 Бесплатно (free)

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    9875    Sibars    19    

Полезные процедуры и функции для программиста

Практика программирования Универсальные функции v8 1cv8.cf Россия Бесплатно (free)

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

07.10.2019    33258    HostHost    41    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

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

01.10.2019    40389    Yashazz    50    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

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

20.09.2012    79338    tormozit    131    

О программе Postman для тестирования API и для чего она нужна 1С-нику

Практика программирования Программное обеспечение (software) v8 Бесплатно (free)

Для чего нужна программа Postman для тестирования API и какая от него польза для 1С-программиста.

24.09.2019    14659    budidich    28    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    67788    rpgshnik    68    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    58513    ids79    55    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

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

11.07.2007    50107    tormozit    48    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    33360    YPermitin    24    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    27088    YPermitin    80    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    35516    ids79    16    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

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

10.09.2017    46806    tormozit    74    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    107617    ids79    63    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

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

02.08.2019    44204    avalakh    26    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    29382    json    15    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    16434    m-rv    2    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    76463    ids79    14    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    40023    ids79    27    

Регистры сведений. За кулисами

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    28428    YPermitin    14    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    20972    m-rv    17    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    20415    SeiOkami    50    

Работа с настройками системы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Варианты отчетов, работа с настройками вариантов: структура группировок, поля отчета, отборы, сортировка, условное оформление, другие настройки, настройки отображения диаграмм.

02.07.2019    59651    ids79    17    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    60603    ids79    26    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    32352    m-rv    21    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    27063    dmurk    146    

Регистры накопления. Виртуальные таблицы. Часть №2: "Остатки" и "Остатки и обороты"

Практика программирования v8 1cv8.cf Бесплатно (free)

Описание работы платформы 1С:Предприятие 8.2 с виртуальными таблицами регистров накопления "Остатки" и "Остатки и обороты". Анализ SQL-запрос при работе с виртуальными таблицами

22.05.2019    31894    YPermitin    7    

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

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

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

16.05.2019    49865    YPermitin    30    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

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

05.12.2017    28860    itriot11    34    

О расширениях замолвите слово...

Практика программирования Разработка v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    37932    ellavs    126    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    28654    ellavs    90    

Трюки с внешними источниками данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    34572    YPermitin    53    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    78430    Serginio    113    

Ошибки при работе с хранилищем конфигурации и способы их решения

Практика программирования v8 Бесплатно (free)

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

01.03.2019    48773    Смешной 1С    31    

Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев

Практика программирования Vanessa Automation v8 Россия Бесплатно (free)

Формируем отчетность о результатах выполнения сценариев. Автоматизируем запуск.

26.02.2019    24208    Vladimir Litvinenko    28    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    37457    ids79    40    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    46548    ids79    11    

Яндекс карты 2.1. Построение маршрута. Передача длины маршрута в реквизит формы

WEB v8 1cv8.cf Абонемент ($m)

Пригодится как пример использования Яндекс карты 2.1 для построения маршрута.

1 стартмани

24.01.2019    15944    81    John_d    33    

Тестер: частые вопросы Промо

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    30156    grumagargler    31