Быстрое получение уникального числового значения без блокировок

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

Разработка - Универсальные функции

счетчик блокировки

5
Столкнулся с проблемой блокировок/тормозов при назначении уникального Штрихкода.
Работало через поиск Макс. значения в Регистре сведений и записи туда нового значения.
В принципе данный функционал можно использовать для создания уникальныхзначений.
Только для Клиент-серверного режима работы. Только для SQL Server, но думаю что похожий функционал можно сделать и на Oracle/Postgre

Решение созрело такое:
1. Создается табличка прямо в БД 1С вида:
(для MS SQL Server)
CREATE TABLE [dbo].[zbarcodes](
    [ID] [bigint] IDENTITY([НАЧАЛЬНОЕЗНАЧЕНИЕСЧЕТЧИКА],1) NOT NULL,
 CONSTRAINT [PK_zbarcodes] PRIMARY KEY CLUSTERED
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

[НАЧАЛЬНОЕЗНАЧЕНИЕСЧЕТЧИКА]  - заменить на число, например 20000000000 - первый шк в системе (или другое число - последнее в Вашей учетной системе, если хочется продолжить текущую нумерацию)

2. Создаем Процедурку в общем модуле с выполнением на сервере (для УФ)

//Процедура получения уникального штрихкода (у нас используется Code 128 - без контрольных символов)
//Параметры:
//Организация - можно сделать таблицы на каждую организацию - и получать по организации имя таблицы в БД из ЗначенияСвойствОбъектов
//СтруктураПараметров - параметры подключения к БД SQL через ADO

Функция ПолучитьНовыйШтрихкод(Организация, СтруктураПараметров) Экспорт
   
   Соединение= Новый COMObject("ADODB.Connection");
    Соединение.ConnectionString = "Driver={SQL Server};Server=" + СокрЛП(СтруктураПараметров.Сервер)
                                                        + ";UID=" + СокрЛП(СтруктураПараметров.Логин)
                                                        + ";pwd=" + СокрЛП(СтруктураПараметров.Пароль)
                                                        + ";Database=" + СокрЛП(СтруктураПараметров.БД);
    Соединение.ConnectionTimeOut = 40;
    Соединение.CommandTimeout = 0;
    Соединение.CursorLocation = 3;
    Попытка
        Соединение.Open();
    Исключение
        #Если Клиент Тогда
        Сообщить("Возникла ошибка подключения к базе");
        #КонецЕсли
        Соединение="";
        Возврат Неопределено;
    КонецПопытки;

        ТекстЗапроса="INSERT into zbarcodes DEFAULT VALUES";
        Соединение.Execute(ТекстЗапроса);   
       
        ТекстЗапроса="SELECT @@IDENTITY";
        Выборка=Соединение.Execute(ТекстЗапроса);       
       
        НовыйШтрихкод=Выборка.Fields(0).Value;
       
        Выборка.Close(); 
        Выборка =""
        Соединение = "";

    Возврат  НовыйШтрихкод;
   
КонецФункции

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

5

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

Комментарии
Избранное Подписка Сортировка: Древо
1. yukon 77 13.08.14 12:17 Сейчас в теме
у нас используется Code 128

Так можно вообще не заморачиваться с базой данных и т.п.
Функция ПолучитьНовыйШтрихкод()
    Возврат СтрЗаменить(ВРег(Новый УникальныйИдентификатор()),"-", "");
КонецФункции
2. serferian 22 13.08.14 12:18 Сейчас в теме
ага, только ручками очень тяжко потом это всё набирать в случае отказа сканера ШК
3. pvase 334 13.08.14 12:28 Сейчас в теме
(2) serferian,
Если интересует без тормозов, то лучше создать массив уникальных значений а потом лишь их использовать. Не думаю что регистр сведений для этого лучшая реализация. Ведь требуется всего 3 поля, 1 - ID, 2 - значение, 3 - уже используется. Если вам подойдет на таблице SQL, то можете создать такую таблицу, заполнить ее значениями от 1 до 1000 000 000 и пользоваться ими.
5. jobkostya1c8 13.08.14 13:00 Сейчас в теме
(3) pvase, обычно штрих-коды генерируют с целью записи в базу, так что тут только какая-то структура в ОЗУ на вкус разработчика (проиндексированная ТаблицаЗначений, Структура, соответствие. А вот при инициализации этого механизна и при окончании работы лучше всего ХранилищеЗначения. Ну еще может что-то быть для сохранения промежуточных результатов работы в базе.
6. serferian 22 13.08.14 13:48 Сейчас в теме
(3) pvase,
Не согласен что так лучше. Все-таки Identity - 100% уникальность, а галочки используется и прочее - это во первых поиск "без галочки", а во-вторых блокировки "на запись данного значения"! Да и цифры "чисто теоретически" могут закончится)))
4. jobkostya1c8 13.08.14 12:56 Сейчас в теме
Или если уж очень нужна сквозная нумерация по группам то нужно переработать механизм записи штрих-кода: после успешной записи новой записи в регистр Штрихкоды для очередной номенклатуры записывать последнее значение в константу. При следующей генерации смотреть значение константы, увеличивать соответствующий разряд на единицу и писать в регистр.
А вот если нумерация сквозная, но сложная по каким-то группам (и прочим условиям), то нужно все хранить в ХранилищеЗначения и делать доступ наподобие стандартной функции чтения данных констант и учетной политики регистров как в стандартных конфигурациях:
Функция ПолучитьЗначениеПеременной(ИмяПараметра, Кэш = Неопределено, КэшИзменен = Ложь) Экспорт
	
	Если Кэш = Неопределено Тогда
		// Кэш не был проинициализирован
		Кэш = Новый Структура;
	Иначе
		// Ищем значение в структуре
		НайденноеЗначение = Неопределено;
		Если Кэш.Свойство(ИмяПараметра, НайденноеЗначение) Тогда
			Возврат НайденноеЗначение;
		КонецЕсли;
	КонецЕсли;
//Дальше куча условий по  ....
// В конце если ничего не нашли, то читаем из константы с переданным именем и записываем ее в нашу переменную "КЭШ".
// Следующий доступ к нужному параметру в рамках сеанса будет уже из ОЗУ до момента изменения в базе. Тогда уже будет автоматическое перезаполнение переменной в "КЭШ"

Иначе
		НайденноеЗначение = Константы[ВРег(ИмяПараметра)].Получить();
		
		//СтрокаИсключения = "Невозможно обработать параметр " + """" + ИмяПараметра + """" + " для получения значения";
		//ВызватьИсключение СтрокаИсключения;
	КонецЕсли;
	
	Кэш.Вставить(ИмяПараметра, НайденноеЗначение);
	КэшИзменен = Истина;
	
	Возврат НайденноеЗначение;
	
КонецФункции
Показать

Эффективно, когда происходит очень частое обращение к данным малого объема. Например, восстановление последовательности документов или пакетный ввод документов. Заодно приведу и стандартную функцию установки значения переменной с учетом "КЭШ"а. Примечание: НЕ путать эдакое название переменной с обычным кэшем базы 1С, который является кучей файлов на диске.
Процедура УстановитьЗначениеПеременной(ИмяПараметра, Кэш, ЗначениеПараметра, ОбновлятьВоВсехКэшах = Ложь) Экспорт
	
	Если Кэш = Неопределено Тогда
		// Кэш не был проинициализирован
		Кэш = Новый Структура;
	КонецЕсли;
	
	Если Кэш.Свойство(ИмяПараметра) Тогда
		Кэш.Вставить(ИмяПараметра, ЗначениеПараметра);
	КонецЕсли;
	
	#Если Клиент ИЛИ ВнешнееСоединение Тогда
		Если ОбновлятьВоВсехКэшах Тогда
			КэшНаСервере = ПараметрыСеанса.ОбщиеЗначения.Получить();
			КэшНаСервере.Вставить(ИмяПараметра, ЗначениеПараметра);
			ПараметрыСеанса.ОбщиеЗначения = Новый ХранилищеЗначения(КэшНаСервере);
		КонецЕсли;
	#КонецЕсли
	
КонецПроцедуры
Показать
7. serferian 22 13.08.14 13:51 Сейчас в теме
(4) kostyaomsk,
С константой вариант тоже не прошел - по причине блокировок! Пробовали!
С Кэшем интересно будет попробовать.



8. jobkostya1c8 13.08.14 21:02 Сейчас в теме
Про уникальность по методу
Новый УникальныйИдентификатор;
с дальнейшей любой обработкой даже незначительно снижающей разрядность полученного числа.
Я представлял задачу по-другому:
1. Где-то сидят 20 операторов (по всему городу и набивают номенклатуру, а заодно и штрихкоды
2. В 1С из различных источников загружается что-попало из номенклатуры и все это надо "пометить" штрихкодами
3. Комбинация 1 и 2 + еще все что угодно + уже вышедшая из употребления (продажи, обработки) номенклатура
Причем, в длинных штрихкодах (не EAN13) нужно и тип товара проклассифицировать (весовой, штучный) и кучу "префиксов" предусмотреть (код региона, магазина, оператора). Еще и дополнительные штрих-коды могут быть для отличия своего товара от чужого (при попытке недобросовестного покупателя вернуть товар).
Причем, еще требование на сквозную нумерацию в пределах региона-магазина-оператора (было такое в практике по учету основных средств холдинга в консолидированной отчетности).
Это что касается "пометки".
А вот чтение должно осуществляться максимально быстро. Для этого по ночам регламентные задания должны перезаписывать блоками в порядке возрастания нужные штрихкода, и обновлять индексы для поиска по регионам-магазинам как для аппаратуры POS-терминала, так и для консолидированного товарного отчета.
Такой вот гипотетический пример, который все в себя включает.
Для поиска тут только оптимизированный запрос на SQL сервер. А вот для модификации: перед записью на компьютере "оператора штрихкодов" уже должны в ОЗУ быть прочитаны и его часть сложной структуры данных к которой должен быть доступ без блокировок с возможностью записи, т.к. тут предусмотрена нумерация в пределах сегмента.
Иначе как-то так:
Процедура ПолучитьНовыйШтрихкод(Регион, магазин, КодОператора, СписокНоменклатуры, ТабНом)    
    // ТабНом - таблица значений с колонками номенклатура и штрихкод
    Для Каждого Ном Из СписокНоменклатуры Цикл
       ЧастьШК = Лев(СтрЗаменить(ВРег(Новый УникальныйИдентификатор()),"-", ""), N); // уникальная часть ШК. 3 < N << 32
       НоваяСтрока = ТабНом.Добавить();
       НоваяСтрока.Номенклатура = Ном;
       НоваяСтрока.ШтрихКод = Регион + Магазин + КодОператора + ЧастьШК; 
    КонецЦикла;
    //... Что-то такое для сортировк и добавления индексов...
    ТабНом.Сортировать(...
КонецПроцедуры
Показать

От задачи зависит.
9. danila_inf 20.08.14 12:09 Сейчас в теме
Задумка хороша. Вижу явное ограничение в следующем.
Запись идет во внешний источник данных.
Использование транзакции для сохранение целостности данных между 1с(таблицами sql связанные с 1с) и sql(независимая таблица от 1с) невозможно. При получении штрихкода
НовыйШтрихкод=Выборка.Fields(0).Value
транзакция в сиквел завершена, транзакция в 1с(если была начата) не завершена.
При аварийном завершении программы(возможны разные причины) счетчик будет увеличен только в сиквел.
Если задача по сквозной нумерации не стоит то задача решена на 5)).
10. serferian 22 20.08.14 12:27 Сейчас в теме
(9) danila_inf,
При аварийных завершениях 1С - просто получаем пропуск данного ШК.
12. jobkostya1c8 27.08.14 16:45 Сейчас в теме
(9) danila_inf, более точно по-научному написал суть проблем. Хотелось бы узнать, можно ли как то усовершенствовать алгоритм чтоб, допустим сом-процесс был один и уже пусть на него идут запросы со всех сторон. Вернее будет хоть какая-то очередь транзакций со стороны 1С.
11. jobkostya1c8 27.08.14 16:41 Сейчас в теме
Идея использования сервера SQL опять не по назначению (или сначала не по назначению для поиска максимального значения во внутренней таблице соответствующей на низком уровне регистру сведений 1С 8 путем вставки новой строки и последующего автоинкремента +1
Насчет скорости исполнения вопрос:
Функция ПолучитьНовыйШтрихкод(Организация, СтруктураПараметров) Экспорт
   ... 
   Соединение= Новый COMObject("ADODB.Connection"); // И вот это в цикле каждый раз!
   ...
КонецФункции;

И везде (раз подняли тему блокировок) SQL сервер атакую со всех сторон из 1С данная функция, каждый раз: создание COM-объекта, логин, пароль, авторизация, максимальный таймаут? А еще у комовских объектов бывает метод Close() не срабатывает.
А если нужно массив сгенерировать штрихкодов и записать. Вот то, что запрос через Опять цикл вызова функции ПолучитьНовыйШтрихкод?
А еще вызов самого метода COM-объекта? Для получения одного-единственного значения.
Мы в свое время использовали запросы 1С в SQL-серверном варианте вида:
ВЫБРАТЬ ПЕРВЫЕ 1
	Рег.Код КАК Код,
	Рег.СтрИнфо КАК СтрИнфо
ИЗ
	РегистрСведений.РегистрКодов КАК Рег

ДЛЯ ИЗМЕНЕНИЯ
	РегистрСведений.РегистрКодов

УПОРЯДОЧИТЬ ПО
	СтрИнфо УБЫВ,
	Рег УБЫВ
Показать

Если нужно записать за раз много данных, то получим последнее максимальное значение в нужной группе, а дальше генерация кодом таблицы значений для записи (примитивный алгоритм +1 с преобразованиями в строку) и дальше блокировка регистра и запись опять через 1С.
А в Вашем алгоритме получается полное отсутствие блокировок в момент записи строки что плюс, но вот сразу идет запись в базу нового штрихкода самим SQL-сервером. А если произойдет ошибка уже дальше в коде. Запрос то в транзакции записи и тот и другой уже отработал?
Или потом блок
Попытка-исключение
. Как сработает пропуск штрихкода?
13. jobkostya1c8 27.08.14 20:47 Сейчас в теме
Вот нашел в статье Спускаемся в 1С 8.2 на уровень Базы Данных (Часть2) подробно про доступ посредством СУБД MS SQL Server, и в частности про оптимизацию подключения:
...для оптимизации функцию получения объекта ADODB.Connection можно разместить в общем модуле, в настройках которого выставлено «Повторное использование». Это позволит не создавать каждый раз новый объект подключения, а будет использоваться уже созданный объект. В теории это позволит сократить время вызова соединения, а так же совсем чуть-чуть сэкономит ресурсы системы
.
14. mixsture 31.10.14 16:15 Сейчас в теме
Мне кажется некорректным сравнение производительности между полноценным регистром сведений, который хранит явно больше информации с голой таблицей из цифр.

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

Наверно, для сравнения лучше подойдет объект попроще - константу, например, предлагали в комментариях. Или 1 элемент справочника - его блокировать, увеличивать реквизит на 1 и записывать.

Да и избыточная по времени блокировка как правило получается из-за того, что между получением значения и записью вставляют массу другой логики. Например, выбрали для изменения записи регистра, затем проводимся по кучи других регистров, масса проверок и вот в конце снимаем блокировку при фиксации транзакции. Так приближаем максимально чтение, запись и снятие блокировки - вот и нет их.
15. serferian 22 31.10.14 16:40 Сейчас в теме
-отлично работает с РИБ (да, у вас не получится с РИБ единой нумерации при одновременной работе пользователей в разных узлах, но сам обмен информацией работает на пять)


угу еще один недостаток - когда идет обмен РС полностью уходит в блокировку!!! и спрашивается - зачем оно нам?
(правда этот механизм нужен только в центральной базе!)
ну и выход для РИБ тоже есть через префиксы - их никто не отменял.

-Не стоит забывать о резервных копиях - сделав голую таблицу, вы добавили головной боли сисадмину - ему теперь все это нужно помнить и заодно делать бекап вместе с базой 1с. Опоздал на несколько минут - получай рассинхронизированную копию базы 1с и таблицы. А что делать, если нужно развернуть копию? Забыли про это - и она тоже будет увеличивать счетчик в таблице для боевой?


тут уж как настроите подключение к БД - если копия - то данные о БДSQL можно получать из настроек БД 1C
а копии однозначно и давно создаются при помощи SQL Backup. вряд ли я смогу 300Gb выгрузкой - загрузко данных копировать)) - так что табличка в ажуре и актуальна!

Константа отпала сразу на основе начала реальной работы!
16. mixsture 02.11.14 22:02 Сейчас в теме
(15) serferian, верно, поэтому я предлагаю использовать объект попроще, чем РС именно для задачи быстрого получения следующего номера. Пусть это будет 1 элемент справочника, в реквизите которого хранится последнее выданное число. Раз пропуски в номерах возможны => можно не связывать эту транзакцию с остальной логикой => читаем значение, делаем инкремент, записываем без пауз, а уже потом используем записанное значение. Я думаю, будет ненамного медленнее и особых блокировок не возникнет, зато все сделано средствами платформы и не добавляет мучений сисадминам, легко используется в остальных механизмах платформы.

тут уж как настроите подключение к БД - если копия - то данные о БДSQL можно получать из настроек БД 1C

Если вы хотите создавать таблицу внутри базы 1с - недостатков тоже порядочно: нарушаем лицензию 1с + конфигуратор легко может стереть нашу таблицу при загрузке.
Оставьте свое сообщение

См. также

Полезняшки по СКД и построителям. Просто код 25

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

Полезные процедуры и функции для работы с построителями и СКД. Просто исходник.

10.10.2019    1207    Yashazz    13       

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

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

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

17.08.2019    7707    ids79    14       

Сохранение запроса со всеми параметрами и временными таблицами 20

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

Функция сохранения запроса со всеми параметрами и временными таблицами в формате *.q1c для открытия в консоли запросов с диска ИТС.

13.05.2019    2332    Serge R    5       

Иерархия справочника Сверху Вниз. Получаем произвольное количество родителей "верхнего" уровня 7

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

Иерархия справочника Сверху Вниз. Функция для получения произвольного количества родителей "верхнего" уровня. На примере справочника "Номенклатура".

28.03.2019    1957    obsfromekb    11       

Доработка проведения типовых документов в УТ 11.4, КА 2.4, ЕРП 2.4 101

Статья Программист Нет файла v8 v8::УФ ERP2 УТ11 КА2 Россия УУ Бесплатно (free) Практика программирования Разработка Универсальные функции

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

22.03.2019    8541    ids79    14       

Добавление отчетов в типовые конфигурации 1С 200

Статья Программист Нет файла v8::УФ v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции БСП (Библиотека стандартных подсистем)

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

07.03.2019    22538    ids79    32       

Расширение конструктора мобильного рабочего места для варианта "клиент 1С+RDP" (для любых wi-fi терминалов). Экосистема решений Simple WMS 20

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

Развитие проекта «Конструктор мобильного клиента на Android» https://infostart.ru/public/976636/ для устройств не на Андроиде (работающих в режиме RDP). В отличие от варианта Android работа на терминалах происходит в режиме 1С:Предприятие через RDP а конфигурации мобильных клиентов полностью совместимы для обоих версий. Т.е. конфигурация единая, создается один раз и ее может читать как Android -устройство, так и 1С-клиент на RDP без необходимости какой либо переделки.

05.02.2019    5703    informa1555    0       

Работа со строками: от простого к сложному 25

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

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

14.01.2019    7244    Evg-Lylyk    17       

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

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

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

14.01.2019    2222    The Ded    3       

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке 453

Статья Программист Нет файла v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Зарплата Управление персоналом (HRM) Бесплатно (free) Универсальные функции

В статье размещен список стандартных процедур и функций с примерами, которые могут помочь при разработке (доработке) конфигураций Зарплата и управление персоналом ред. 3.1 и Зарплата и кадры государственного учреждения 3.1. Иногда бывает довольно сложно правильно получить данные или долго, поэтому лучшим вариантом будет использование стандартных процедур. Буду очень признателен, если Вы поделитесь своим опытом и предложите свои варианты стандартных процедур которые помогают в работе. Или предложите, как дополнить имеющиеся процедуры.

14.11.2018    30795    GeterX    93       

Кадровые данные сотрудников в ЗУП 3.1 в отчетах 38

Статья Программист Нет файла v8 v8::СПР ЗУП3.x Россия Управление персоналом (HRM) Бесплатно (free) Универсальные функции

Параметры используемые для получения данных сотрудников в ЗУП 3.1. Пригодится для разработки отчетов как напоминалка.

07.11.2018    12573    fromlion    12       

Добавление расшифровки в стандартные и добавленные внешние отчеты со стандартной формой отчета на СКД 72

Статья Программист Нет файла v8::УФ v8::СКД ERP2 УТ11 Россия Бесплатно (free) Универсальные функции

Описан способ добавления расшифровки отчета на СКД как встроенного в систему, так и добавленного внешнего отчета.

27.09.2018    6433    bmk74    2       

Функция НайтиФайлы() в каталоге netshare на Linux - обход ошибки работы 6

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

Решение проблемы применения функции НайтиФайлы() в каталоге с netshare на Linux-сервере - не работает поиск файлов по указанной маске (шаблону)

19.09.2018    3173    drmaxart    1       

Простой способ программно открыть заполненную форму нового (незаписанного) документа в тонком клиенте 15

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

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

09.06.2018    7308    Serge R    12       

Генерация временного ряда запросом 7

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

Способ генерации последовательности дат средствами языка запроса 1С.

07.05.2018    5785    dim_zal    6       

Минимализмы 3 350

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

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    35188    ildarovich    44       

Таблица значений в Таблицу HTML - функция с возможностью настройки цвета шапки, заголовков, выравнивания и размера колонок 83

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

Если вам нужно быстро получить таблицу значений в виде строкового типа 1С в формате HTML, вам поможет эта функция, включена возможность автоматического вывода столбца пункт по порядку.

22.12.2017    18704    rpgshnik    21       

Пример преобразования двоичных данных в строку 26

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

Доброго всем времени суток. Хочу поделиться маленьким решением маленькой проблемы. Думаю, будет интересно новичкам. Я не раз встречал на форумах вопрос: как преобразовать двоичные данные в строку? В частности, к примеру, частенько нужно получить хэш файла MD5 в текстовом виде, но как мы знаем 1С возвращает его в виде двоичных данных.

08.12.2017    12256    frkbvfnjh    19       

Функция сохранения картинок из книги Excel в каталог с определением координат на листе 8

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

Разбор файла *.xlsx как Web-архива, выгрузка изображений без потери качества, с определением положения изображений.

12.11.2017    7062    user634820_zergemoth    1       

Определяем контекст сеанса 1С программно (Тонкий/Толстый клиенты/HTTP-Сервис/Фоновое задание и т.д.) 31

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

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

08.11.2017    15212    azubar    9       

Правила округления 5

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

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

30.10.2017    7609    dakork    4       

#Область ВНЕШНИЕ_ВЫЗОВЫ или MVC в 1С, библиотечность и упрощение интеграции кода 43

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

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

12.10.2017    14397    for_sale    58       

Получение даты, зная день недели и его порядок в месяце 10

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

Иногда бывает необходимость получить "Первый понедельник месяца" или "Вторую пятницу месяца". Есть несколько способов решения вопроса. Опишу один из них.

12.09.2017    8036    987ww765    10       

Разность дат 21

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

Иногда требуется получить разность дат в виде типа: 5 дней 6 месяцев 4 года. Это можно сделать с помощью запроса, получив на выходе сразу 3 нужных числа, без последующих вычислений.

11.08.2017    9664    jun-ko    24       

Простой способ преобразовать UNICODE в строку или в структуру 23

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

Первая функция получает Строку, которая содержит строчки вида «Ключ=Значение». Вторая функция получает Структуру.

07.07.2017    7088    dimasts    5       

"Распределение в запросе" или "избавляемся от перебора" 182

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

Хороший перебор - это отсутствие перебора. Рассмотрим пример замены полного перебора запросом.

16.12.2016    27658    alexandersh    45       

Пример работы с шаблоном Word через ole (клиент - сервер, тонкий клиент) - установка значений и заполнение таблицы 17

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

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

09.11.2016    9944    gortrex    8       

Парсер JSON (Штатные средства 1С 8.3.6) 59

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

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

29.09.2016    45993    dour-dead    21       

Программное создание графических схем (v.2): API для ГрафическойСхемы 73

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

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

27.09.2016    16806    serg_infostart    15       

Вычитание рабочих дней от текущей даты 7

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

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

08.09.2016    9546    semenich_b    7       

Используем механизмы обмена данными БСП для произвольного обмена 147

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции Внешние источники данных БСП (Библиотека стандартных подсистем)

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

23.08.2016    27524    Патриот    22       

Склонение числа прописью 25

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

Склоняет число прописью до 999999 Пример: до склонения "Не позднее 3 (Три) дней", после - "Не позднее 3 (Трех) дней"

18.08.2016    15762    maxvcb    27       

Отборы в отчётах. Нюансы работы компоновщика настроек. 131

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

Открытие отчёта с предустановленным отбором, показанным пользователю. Изменение любых настроек в процессе работы отчёта. Взаимосвязи настроек.

15.08.2016    58878    Yashazz    23       

Автоматическое добавление новых реквизитов на форму (УФ) 38

Статья Программист Нет файла v8 v8::УФ Бесплатно (free) Работа с интерфейсом Универсальные функции

Идея такая: Программист добавил реквизит в объект. В комментарии этого реквизита прописал некое спец. слово (можно не матерное). На форму объекта новый реквизит далее попадает автоматом в спец. группу "Дополнительно".

03.08.2016    16114    Патриот    23       

HOWTO: создание и отладка HTTP-сервиса в 1С:Предприятие 123

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

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

25.07.2016    39198    serg_infostart    19       

Цикл ввода данных, пример решения 41

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

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

12.07.2016    11096    botokash    7       

Поиск несериализуемых значений при помещении в хранилище 12

Статья Программист Нет файла v8 Windows Бесплатно (free) Инструментарий разработчика Практика программирования Универсальные функции

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

02.03.2016    19924    balanton    2       

Универсальные функции с примерами использования 242

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

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

26.02.2016    35276    unichkin    36       

Преобразование числа в строку в запросе 1С 8.x 21

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

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

23.02.2016    32777    lastcontra    19       

Изменения параметра или отбора типа Дата в форме отчета 6

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

Иногда в отчетах стандартных периодов (Начало текущего месяца, начало следующего месяца и т.д.) недостаточно. Приходится ставить произвольную дату и устанавливать периоды вручную (конец месяца, конец недели и т.д.). В публикации выложен листинг кода, который должен ускорить установку параметров и отборов с типом Дата.

08.02.2016    9739    dj_serega    3       

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

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

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

27.01.2016    62494    Serginio    104       

Быстрое визуальное сравнение двух таблиц значений 18

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

Предлагаю простой способ сравнить две таблицы значений.

13.11.2015    11833    Mi4man    14       

Перебор всех строк дерева значений в глубину 2

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

Процедура и функция перебора всех строк дерева значений в глубину.

11.11.2015    11318    kosmo0    6       

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

Статья Программист Нет файла v8 УНФ ERP2 БП3.0 Windows Бесплатно (free) Работа с интерфейсом Универсальные функции

С появлением управляемых форм вообще и БП 3.0 в частности пользователи, которые не хотят портить своё зрение рассматриванием мелкого шрифта, оказались в невыгодном положении. Многих элементов на экране в "тяжёлых" документах вообще оказалось не видно. Все попытки решить вопрос штатными средствами настройки предприятия оказались неэффективны. Вот несколько приёмов, которые буквально в два щелчка мышкой и парой строк кода помогут решить проблему.

05.11.2015    14912    H-Labs    11