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

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

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

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

С чем боремся

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

  1. Отсутствует возможность вызова хранимых процедур с возвратом значений для OUTPUT-параметров.
  2. Также нет возможности получить возвращаемый набор данных из хранимой процедуры.
  3. Недоступно выполнение произвольных SQL-скриптов
  4. И другие специфические ограничения.

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

Внимание! Все, что Вы увидите дальше - это воистину костыли, которых еще поискать! Не рекомендую использовать их на рабочем окружении, только если ну очень сильно нужно. В остальных случаях лучше использовать ADO.

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

Полигон для испытаний

Все дальнейшие действия будут выполняться на простой базе данных, развернутой на SQL Server. Вот скрипт, если захотите создать ее у себя.

 
 Скрипт создания базы данных из примеров

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

Просто напиши запрос

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

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

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

Для начала решим простую задачу - добавить таблицу, которая будет показывать текущие активные соединения и текст выполняемого запроса. Для SQL Server запрос может выглядеть так.

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

Для этого добавим новую таблицу в источник, но в качестве вида таблицы указать "Выражение". В само выражение вставим SQL-запрос (см. под спойлером выше). Что же в таком простейшем примере может пойти не так? А вот что!

Ошибка с переносом строк SQL-запроса во внешнем источнике данных

Идем в конфигуратор и видим странную картину.

Вот и перенос строк появился :)

Окей! Смирились, простили, сделали запрос одной строкой без переносов. Да, неудобно, но что поделать. Пробуем еще раз получить данные.

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

SELECT TOP 1000
    T1.Поле1,
    T1.Поле2,
    -- Перечисление полей источника
    T1.ПолеN
FROM 
    -- Здесь SQL-запрос из выражения
AS T1

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

Попробуем еще раз обратиться к таблице.

И, ура! Все получилось. Обратите внимание - мы поймали запрос, который сами и выполняем. Просто в тестовой базе больше никого нет :).

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

Где же возвращаемые параметры

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

В тестовой базе создана процедура с таким определением.

CREATE PROCEDURE [dbo].[ProcWithOutputParams]
	@inputParam INT,
	-- Выходные параметры определены со значением по умолчанию = NULL
	-- Это сделано для того, чтобы ее можно было вызвать без указания
	-- выходных параметров
	@outputParam int = NULL OUTPUT,
	@outputParamOther int = NULL OUTPUT
AS
BEGIN
	SET @outputParam = @inputParam + 10;
	SET @outputParamOther = @outputParam * 100;
END

Вызвать эту процедуру без выходных параметров просто - нужно добавить функцию внешнего источника и определить выражение "dbo.ProcWithOutputParams(&1)".

Вызов хранимой процедуры стандартными средствами

Но нам это не подходит, т. к. не позволяет получить назад выходные параметры. Даже если попытаться определить их в выражении "dbo.ProcWithOutputParams(&1, &2, &3)", то при вызове платформа просто не вернет значения в переменные.

	Перем1 = 100;
	Перем2 = 0;
	Перем3 = 0;
	
	ВнешниеИсточникиДанных.ПримерИсточникаДанных.ProcWithOutputParams(Перем1, Перем2, Перем3);

	// Перем2 и Перем3 останутся с исходными значениями.

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

 
 Процедура для произвольного выполнения SQL-команд

Эта процедура позволит выполнять произвольные TSQL-команды. Но это еще не все. Мы до сих пор не можем возвращать данные. Возьмем самый доступный в этой ситуации способ - будем использовать глобальную временную таблицу. в которую будем вставлять результаты команд и считывать их отдельным SELECT'ом. Вот так будет выглядеть эта таблица.

 
 Глобальная временная таблица для сохранения результата команд

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

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

 
 Вызов хранимой процедуры с получением выходных параметров

Код получился достаточно объемным. Можно инкапсулировать некоторую функциональность в общем модуле таким способом.

 
 Общий модуль "ПомощникРаботыСВнешнимИсточникомДанных"

Теперь код вызова будет выглядеть более лаконично.

 
 Инкапсуляция в действии

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

Вернуть набор из процедуры

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

Как же нам получить этот набор данных через внешний источник на стороне 1С? Сделать SELECT к хранимой процедуре нельзя, нужен альтернативный вариант.

На самом деле все просто - модифицируем предыдущий пример и получим такую SQL-команду.

 
 SQL-команда для получения набора записей хранимой процедуры
 
 Выполнение SQL-команды через внешний источник данных

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

Выполнение любого скрипта

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

Например, с помощью внешнего источника данных теперь можно делать то, что раньше казалось недоступным!

Обновление статистики

КомандаSQL = "
|USE [PerfMonitoring];
|UPDATE STATISTICS [dbo].[PerformanceMeasurements] WITH FULLSCAN;";
		
РезультатXML = ПомощникРаботыСВнешнимИсточникомДанных.ВыполнитьПроизвольныйСкрипт(КомандаSQL);

Удаление таблицы

КомандаSQL = "
|USE [PerfMonitoring];
|DROP TABLE [dbo].[KeyOperations];";
	
РезультатXML = ПомощникРаботыСВнешнимИсточникомДанных.ВыполнитьПроизвольныйСкрипт(КомандаSQL);

Удаление базы данных

КомандаSQL = "
|USE [PerfMonitoring];
|DROP DATABASE [PerfMonitoring];";
		
РезультатXML = ПомощникРаботыСВнешнимИсточникомДанных.ВыполнитьПроизвольныйСкрипт(КомандаSQL);

Опасность

Подобный подход работы с базой имеет ряд существенных недостатков:Остановитесь!

  1. Сложность сопровождения, ведь вместо обычных SQL-скриптов приходиться предусматривать маневры для возврата значений на сторону 1С.
  2. Множество избыточных действий могут влиять на производительность (использование временных таблиц, преобразование результатов запросов в XML и обратно и др.).
  3. Большой удар по безопасности, т.к. теперь из кода 1С можно выполнить любую SQL-команду. Конечно, правами учетной записи SQL-сервера можно себя обезопасить, но для этого также потребуется время и ресурсы на настройку и сопровождение.
  4. Также неграмотное составление SQL-команд может привести к неоптимальной работе SQL Server. Например, если вместо передачи значений в запрос использовать не параметры, а явное указание значения. В этом случае кэширование планов запросов не будет эффективно работать. Вот интересный материал про динамические SQL-запросы.

Вот и все

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

СтрокаСоединения = "DRIVER={SQL Server};SERVER=<ИмяСервера>;UID=<Логин>;PWD=<Пароль>;Trusted_Connection=False;APP=PerfMonitoring;DATABASE=PerfMonitoring;LANGUAGE=русский";

ПараметрХранимойПроцедуры = 100;

Connection  = Новый COMОбъект("ADODB.Connection");
Connection.CursorLocation = 3;
Connection.CommandTimeout = 60;
Connection.ConnectionTimeOut = 60;
Connection.Open(СтрокаСоединения);	

Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;

Command.CommandText = "ProcWithOutputParams";
Command.CommandType = 4; // adCmdStoredProc	

ТипINT = 3; // adinteger
ТипПараметраВходящего = 1;
ТипПараметраИсходящего = 2;

Command.Parameters.Append(Command.CreateParameter("@inputParam", ТипINT, ТипПараметраВходящего));
Command.Parameters.Append(Command.CreateParameter("@outputParam", ТипINT, ТипПараметраИсходящего));
Command.Parameters.Append(Command.CreateParameter("@outputParamOther", ТипINT, ТипПараметраИсходящего));
Command.Parameters("@inputParam").Value = ПараметрХранимойПроцедуры; 
Command.Execute();

outputParam = Command.Parameters("@outputParam").Value;
outputParamOther = Command.Parameters("@outputParamOther").Value;

Сообщить("outputParam: " + outputParam);
Сообщить("outputParamOther: " + outputParamOther);

Так стоит ли усложнять? После этого все то, что мы делали выше, кажется бессмысленным. Но решать конечно же только Вам!

Другие ссылки

164

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

Комментарии
Избранное Подписка Сортировка: Древо
1. Infector 142 14.03.19 12:34 Сейчас в теме
Лучший трюк с внешним источником, который довелось провернуть - имитация движений документа с записью в необъектную таблицу. Как способ интеграции хорошо заходит.

А чаще действительно пользуем ADO, как автор в конце описал. Тем более несредственное подключение и выполнение запроса, возвращающего таблицу значений, унифицируется до одной функции.
YPermitin; +1 Ответить
2. YPermitin 5134 14.03.19 12:42 Сейчас в теме
3. genayo 14.03.19 12:45 Сейчас в теме
(1) Ждём от вас статью про ADO :))
4. YPermitin 5134 14.03.19 12:47 Сейчас в теме
(3) не вижу интересных тем по нему. Или они есть?)
5. genayo 14.03.19 13:00 Сейчас в теме
(4) Информации много не бывает. В (1) вот упоминается, что работа с ADO унифицируется до одной функции - многим было бы полезно, думаю.
KEV8383; YPermitin; +2 Ответить
6. YPermitin 5134 14.03.19 13:09 Сейчас в теме
(5) ну так то конечно может быть:)
7. Infector 142 14.03.19 13:25 Сейчас в теме
(5)
Функция СоединитьСерверSQL() Экспорт
	
	Настройки   =	вичи_ПовтИспСеанс.ВернутьНастройкиСвязиOMS();
	
	Server		=   Настройки.СерверSQL;
	Base		=   Настройки.CATALOG;
	User		=   Настройки.ЛогинSQL;
	Pass		=	Настройки.ПарольSQL; 
	булWinLogin = 	Ложь;
		
	con = Новый  COMОбъект("ADODB.Connection");
	con.ConnectionTimeout	= 5;
	con.CommandTimeout		= 0;
	con.CursorLocation		= 3;
	con.Provider			= "MSDASQL";
	Если (не ПустаяСтрока(User))и(не булWinLogin) тогда
		con.ConnectionString	= "driver={SQL Server};server="+Server+";uid="+User+";pwd="+Pass+";Database="+Base+";";
	иначеЕсли не ПустаяСтрока(User) тогда
		con.ConnectionString	= "Driver={SQL Server Native Client 11.0};Server="+Server+";Database="+Base+";Trusted_Connection=yes;uid="+User+";pwd="+Pass+";";
	иначе
		con.ConnectionString	= "Driver={SQL Server Native Client 11.0};Server="+Server+";Database="+Base+";Trusted_Connection=yes;";
	КонецЕсли;
	Попытка
		con.Open();
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
	
	Возврат con;
	
КонецФункции
Показать


Функция ПолучитьТаблицуДанныхSQL(ТекстЗапроса, con)  Экспорт
	Таблица = Новый ТаблицаЗначений;
	cmd	= Новый COMОбъект("ADODB.Command");
	cmd.CommandTimeout = 0;
	cmd.ActiveConnection = con;	
	cmd.CommandText	= ТекстЗапроса;
	rs = cmd.Execute();
	Для НомерСтолбца = 0 По Rs.Fields.Count-1 Цикл
		ИмяНовойКолонки = Rs.Fields(НомерСтолбца).Name;
		Таблица.Колонки.Добавить(ИмяНовойКолонки);
	КонецЦикла;
	Если Не Rs.eof Тогда
		rs.MoveFirst();
	КонецЕсли;
	Пока Не Rs.eof Цикл	
		НоваяСтрока = Таблица.Добавить();
		Для каждого Колонка из Таблица.Колонки Цикл
			ИмяКолонки = Колонка.Имя;
			Значение = Rs.Fields.Item(ИмяКолонки).Value;
			Если значение <> Null Тогда
				НоваяСтрока[ИмяКолонки] = Значение;
			КонецЕсли;		
		КонецЦикла;
		rs.MoveNext();
	КонецЦикла;
	Возврат Таблица;
КонецФункции

Показать


Соединение = СоединитьСерверSQL();
Т1 = ПолучитьТаблицуДанныхSQL(ТекстЗапроса1, Соединение);
Т2 = ПолучитьТаблицуДанныхSQL(ТекстЗапроса2, Соединение);

Попытка
   Соединение.Close();
Исключение
КонецПопытки;

Показать

Основная забота - слепить запросы и обработать то, что они вернут. Но пользоваться возможностями SQL и сводить на уровне 1С запросы к примитивнейшим тоже не запрещено. Полезно, когда есть возможность привлечь к труду ненавидящих 1С по религиозным мотивам или не разбирающихся в ней совершенно, но знающих SQL и написавших на нем свою маленькую базу.
Текст = "exec [VRUS_DW].GTD.getgtdLinesbyDocNum '%НомерГТД%'";	
Текст = СтрЗаменить(Текст, "'%НомерГТД%'", "'10101010/180219/0001010'");
 Т = ПолучитьТаблицуДанныхSQL(Текст , Соединение);
kote; CnupT; jif; DAAbramov; genayo; YPermitin; +6 Ответить
8. YPermitin 5134 14.03.19 13:27 Сейчас в теме
9. w.r. 466 14.03.19 13:42 Сейчас в теме
Был тут один "трюк" с внешими источниками в платформе 8.3.12, из-за которого мне пришлось переписывать обмены с внешней СУБД MS SQL с внешних источников на ADODB. После обновления с 8.3.10 на 8.3.12 перестала работать запись во внешние источники:

Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
Ошибка SDBL:
В схеме базы данных нет таблицы с именем EDBT33382


Ошибка зафиксирована была мной 8.10.2018

И ответ от 1С

Ошибка платформы 10197269.
Исправлена в 8.3.14, но должна быть перенесена на 8.3.12.
Ошибка исправлена в 8.3.14.907
Сроков переноса исправлений в 8.3.12 пока сообщить не можем.


И, конечно, ничего не перенесли. А не обновляться на 8.3.12 я не мог, так как обновления требовала конфигурация на новой БСП. 8.3.14.907 - это на тот момент была какая-то внутренняя альфа или пре-бета версия, недоступная для скачивания. Тогда я еще раз проклял про себя 1С и начал переписывать обмены
YPermitin; +1 Ответить
10. YPermitin 5134 14.03.19 13:46 Сейчас в теме
(9) возможно, это будет еще один сигнал всем, кто планирует сейчас использовать внешние источники.
11. w.r. 466 14.03.19 13:48 Сейчас в теме
(10) самое интересное, что еще с 8.3.5, когда я только написал обмены на внешних источниках, и по 8.3.10 все отлично работало - это 3 года, а потом в 8.3.12 сломали
16. Mortum 15.03.19 15:50 Сейчас в теме
(9) надо было немножко подождать, потому что на 30.11.2018 баг был оперативно исправлен после баг-репорта на testplatform@1c.ru.
19. w.r. 466 15.03.19 16:35 Сейчас в теме
(16) мы не могли ждать почти 2 месяца (оперативность однако) пока исправят баг
YPermitin; +1 Ответить
12. geka-geka 1 14.03.19 14:23 Сейчас в теме
Есть ли какой-нибудь трюк, чтобы в запросе соединить несколько таблиц внешних источников?
13. YPermitin 5134 14.03.19 14:26 Сейчас в теме
(12) разве что сделать говую таблицу, в которой сделать произвольный запрос. В этом запросе на уровне SQL и объединить.

Ну или в СКД использовать несколько наборов данных. И с помощью средств СКД как-раз и объединить.
17. Mortum 15.03.19 15:57 Сейчас в теме
(12) Есть. ВнешнийИсточникДанных.ИмяВнешнегоИсточника.Таблица.ИмяТаблицы1 КАК ИмяТаблицы1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.ИмяВнешнегоИсточника.Таблица.ИмяТаблицы2 КАК ИмяТаблицы2
Даже временные таблицы можно: ПОМЕСТИТЬ ВнешнийИсточникДанных.ИмяВнешнегоИсточника.ВременнаяТаблица.ИмяВТ
YPermitin; +1 Ответить
21. YPermitin 5134 15.03.19 16:52 Сейчас в теме
(17) то есть теперь работает соединение таблиц из разных источников или таблиц одного источника?
22. Mortum 15.03.19 22:30 Сейчас в теме
(21) из одного да. Из нескольких никак, но тут платформа даже при сильном желании ничего не сможет.
acanta; YPermitin; +2 Ответить
14. Aletar 15.03.19 06:02 Сейчас в теме
А скажите, пожалуйста, вот если я делаю запись через внешние источники данных, т.е.

НаборЗаписей = ВнешниеИсточникиДанных.<...>.СоздатьНаборЗаписей();
....
НаборЗаписей.Записать();


Как задать время ожидания на блокировке? Как установить LOCK_TIMEOUT для запроса операции записи?
YPermitin; +1 Ответить
15. YPermitin 5134 15.03.19 07:17 Сейчас в теме
(14) к сожалению, нет.

Тут надо либо использовать ADO, либо обходные пути из публикации. Тогда будет возможность установить таймаут на ожидании блокировки.
18. Mortum 15.03.19 16:03 Сейчас в теме
(14) возможно получится в строке соединения к ВИД указать таймаут, но это уже от драйвера внешней базы зависит.
YPermitin; +1 Ответить
20. YPermitin 5134 15.03.19 16:51 Сейчас в теме
(18) тут про параметр LOCK_TIMEOUT для SQL Server. К сожалению его только в скрипте можно.
23. Darklight 19 18.03.19 12:53 Сейчас в теме
ADO - это, конечно, хорошо, но доступно только через СOM со всеми вытекающими. И без COM придётся извращаться с внешними источниками.
YPermitin; +1 Ответить
24. YPermitin 5134 18.03.19 12:57 Сейчас в теме
(23) не спорю, но иногда все же лучше, чем внешний источник.

Но иногда и нет :)
25. acanta 67 18.03.19 13:02 Сейчас в теме
(23) а внешние источники Com не используют точно? А что тогда?
26. Darklight 19 18.03.19 13:10 Сейчас в теме
(25)Используются драйвер-внешняя-библиотека, указываемый при создании строки подключения (аналогично работает со своей СУБД и сама платформа). Работа с ним не подразумевает обязательного применения COM, но, если будет использован драйвер ODBC или OLE -то он, вроде как сам использует COM технологию.
YPermitin; +1 Ответить
27. DonAlPatino 128 19.03.19 10:32 Сейчас в теме
Я правильно понимаю, что ADO - это исключительно Windows вариант? Если сервер под Linux, то только внешние источники и odbc?
YPermitin; +1 Ответить
28. YPermitin 5134 19.03.19 17:56 Сейчас в теме
(27) да, ADO - это технология для Windows-платформы. Если сервер 1С под Linux, то вариантов связать 1С с внешним источником:

1. Внешние источники данных со всеми ограничениями + ODBC. Кстати, есть и ODBC-драйвер для Linux
(https://www.codesynthesis.com/~boris/blog/2011/12/02/microsoft-sql-server-odbc-driver-linux/) Но такую связку я не тестировал.
Подробнее хорошо описано здесь: https://infostart.ru/public/522751/

2. Делать прослойку в виде веб-сервиса для базы и уже через нее взаимодействовать из 1С. Веб-сервис можно сделать на .NET, Java, GO. Вообщем, к чему душа ближе. На MSDN для .NET все хорошо расписано.

3. Есть менее популярные варианты в виде внешних компонент, использования сторонних утилит и др. Но сопровождать это все будет потом не просто.
29. DonAlPatino 128 20.03.19 15:04 Сейчас в теме
(28) Мы из ЗУПа во внешнюю базу данные по 20 тыс сотрудников и гпхашникам льём. Причем в другой датацентр. Были проблемы с каналом (пропадал 20ый-30ый пакет) - так выгрузка через ODBC стала идти 8 часов вместо одного. Вот надеялся, что переход на ADO поможет. А это получается "vendor-lock". Пункты 2 и 3 как-то не выглядят рабочими при таких вводных вообще...
YPermitin; +1 Ответить
30. YPermitin 5134 20.03.19 15:17 Сейчас в теме
(29) все верно, но вы уже в "vendor-lock" режиме, когда сели на 1С :)

Если серьезно, то при необходимости выгрузки очень больших объемов данных во внешнюю базу я бы использовал BULK-операции, в том числе если канал связи не очень хороший. Посмотрите в сторону BCP для SQL Server или COPY для PG. Это выгрузка и загрузка.

Для передачи данных использовать RoboCopy или другие аналоги.

Если скорость выгрузки не является узким местом, то можно и стандартными средствами 1С выгружать в файл.

Если экосистема одна, например оба сервера SQL Server, то их можно залинковать и передавать данные собственными средствами (реаликация и т.д.)

В комментарии подробно сложно все это описать, но как вводная пойдет :)
31. DonAlPatino 128 20.03.19 16:14 Сейчас в теме
(30) BULK сейчас смотрим. А вот насчет передачи данных репликацией между SQL серверами... это будет лучше-быстрее чем те же ODBC или ADO?
YPermitin; +1 Ответить
32. YPermitin 5134 21.03.19 15:55 Сейчас в теме
(31) это будет надежней на мой взгляд, т.к. передачу на себя возьмет сам SQL Server. При настройке репликации есть возможность указать качество мвязи и др. параметры. В том числе и конкретные таблицы или условия передачи.

На MSDN есть отличные материалы по этой теме.
33. akpaevj 21.03.19 22:11 Сейчас в теме
(31) Можно поэкспериментировать с "EXEC sp_addlinkedserver" и "EXEC AT". Удобно для работы с удаленными серверами. Для быстрой загрузки можно попробовать порционно вставлять инструкциями
INS ERT IN TO ..... VALUES (.....), (.....), .....
главное длину запроса не превысить
YPermitin; +1 Ответить
34. YPermitin 5134 22.03.19 07:02 Сейчас в теме
(33) линковка серверов очень удобна. Сам использую :)
36. DonAlPatino 128 22.03.19 10:23 Сейчас в теме
(34)Я правильно понимаю что при линковке мы вроде как кидаем данные на ближайший сервер MS SQL, но по факту они сразу переправляются на удаленный? А внутри это ближе к репликации данных между серверами или все тому же ODBC/ADO?
37. akpaevj 22.03.19 13:53 Сейчас в теме
(36)
Я правильно понимаю что при линковке мы вроде как кидаем данные на ближайший сервер MS SQL, но по факту они сразу переправляются на удаленный? А внутри это ближе к репликации данных между серверами или все тому же ODBC/ADO?

При линковке мы формируем Dynamic statement и отправляем его для исполнения на удаленном сервере.
Если проводить параллели, то это ближе к ADO. Репликация подразумевает под собой автоматический перелив данных/транзакций на slave экземпляр. В отличие от BULK инструкций при линковке не требуется дополнительный шаг загрузки/выгрузки файла, но требуется валидация данных для исключения SQL Injections. Требования к каналу связи +- одинаковы, те же данные переливать. В любом случае, все это обмен средствами СУБД, т.е. консистентность данных на удаленном хосте на вашей совести.
YPermitin; +1 Ответить
39. akpaevj 22.03.19 14:36 Сейчас в теме
(36) И как в статье сказано, лучше избегать установки в запросы константных значений что-бы избежать ad-hoc workload и соответственно роста объема кэша планов и деградации производительности при выполнении таких запросов. Если конечно не включен параметр Optimize for Ad-hoc Workload
YPermitin; +1 Ответить
35. DonAlPatino 128 22.03.19 10:21 Сейчас в теме
(30) Про BULK - я правильно понимаю что из 1С мы выгружаем данные в файл, потом перекидываем файл в другой датацентр и там грузим BULK INSERT? Или есть способ напрямую из 1С данные неким здоровым пакетом бросить?
38. akpaevj 22.03.19 13:56 Сейчас в теме
(35) Транспорт данных на удаленный хост - на вкус и цвет=) Можно веб-сервис состряпать, голубями отправлять, курьером на флешке, ftp и еще куча разных задорных способов)
44. DonAlPatino 128 01.04.19 11:58 Сейчас в теме
(38) Мда... переделали с внешних источников на csv и bulk вставку. Непосредственно загрузка данных стало где-то минута вместо 40 минут... В общем "внешние источники" для точечных изменений...
YPermitin; +1 Ответить
45. YPermitin 5134 01.04.19 12:04 Сейчас в теме
(44) bulk тоже не универсальный способ. Например если для внешнего контингента данные нужно предоставлять, то через SQL это не совсем правильно и безопасно. Ниже в комментариях уже говорили.

А так рад, что у вас все получилось!
40. newbigrator 26.03.19 22:21 Сейчас в теме
Вопрос оффтоп, но рядом с темой.
Допустим надо каждую ночь писать большой обьем данных из 1С во внешнюю таблицу СГЛ. Насколько правильно и успешно такое можно будет сделать через механизм Вненших Источников Данных?
YPermitin; +1 Ответить
41. YPermitin 5134 27.03.19 14:44 Сейчас в теме
(40) если стандартными возможностями через наборы записей внешнего источника данных, то это не самый быстрый путь.

Эффективные способы:
1. Выгрузка в CSV или внутренний формат BCP и его загрузка в приемник. То есть использование Bulk Insert, подробнее смотрите в предыдущей статье.
2. Можно сделать выгрузку только измененных данных, если задача позволяет. Тогда и штатные механизмы могут помочь.
42. rukalico 31.03.19 15:29 Сейчас в теме
(41) А не правильнее ли в таких ситуациях вообще использовать веб сервисы. Поднимаем веб сервис согласно спецификации, в том числе получаем возможность раздавать xml схему. А дальше кому нужно тянет данные и главное АПИ описан и стандартизирован.
А так через СГЛ писать куда то самим это брать на себя обязательства по выгрузке и фактор АПИ теряется.
YPermitin; +1 Ответить
43. YPermitin 5134 31.03.19 21:36 Сейчас в теме
(42) никто не спорит. Все что сказано в статье это не замена всех возможных способов интеграции, а уж тем более веб-сервисов.

Все таки цели разные. Bulk Insert - это больше для внутреннего пользования, внутрикорпоративного, где нужно оптимизировать определенные операции на уровне SQL Server / PostgreSQL.

Веб-сервисы (SOAP) / HTTP-сервисы для другого - это создание интеграций, в т.ч. и с документированным API, который можно использовать и для внутренних целей, так и для внешних (для клиентов и др.).

То есть все зависит от задачи.
46. v3rter 20.06.19 12:49 Сейчас в теме
Вопрос: будут ли эти трюки легальны для лицензии SQL Runtime? С одной стороны, на SQL-сервере мы выходим за пределы функционала 1С, но с другой стороны, все полученные данные используются исключительно из 1С. Вопрос не самый простой и не праздный, считаю.

Цитирую с сайта одного из партнеров (для тех, кто не в курсе):
"1С" предлагает совместный продукт: лицензии Microsoft SQL Server, предназначенные для использования совместно с системой "1С:Предприятие 8". Эти лицензии бывают 2-х видов: Runtime и Full-use.
Лицензии Runtime можно использовать только с "1С:Предприятие 8".
Лицензии Full-use – без ограничения на право использования. Пользователь может использовать Microsoft SQL Server, приобретенный вместе или для "1С:Предприятие 8", вместе с другими приложениями и в любых целях до тех пор, пока продолжает пользоваться продуктом "1С:Предприятие 8".
Лицензии на сервер и клиентский доступ должны быть в одной категории – или Runtime, или Full-use.
YPermitin; +1 Ответить
47. YPermitin 5134 20.06.19 13:58 Сейчас в теме
(46) к сожалению, у меня нет ответа на этот вопрос.

Я могу исходить лишь из здравого смысла. В части лицензирования он не всегда работает :)
48. AlexBober78 21.06.19 18:42 Сейчас в теме
Очень интересно.
Главное, такую функцию по выполнению всего-чего-угодно в базе лучше хорошенько прятать как можно дальше...
YPermitin; +1 Ответить
49. YPermitin 5134 22.06.19 12:31 Сейчас в теме
(48)
прятать


Да :)
Как и много чего еще.
52. sparhh 27.06.19 12:57 Сейчас в теме
(49) Но ведь эта функция при правильной настройке прав получит доступ только к требуемой базе и по идее не такая уж и дыра.
Или чем такой подход отличается от выполнения такого же произвольного кода через ADO?
50. ADirks 181 26.06.19 09:28 Сейчас в теме
Кстати, про сложные запросы. Можно же использовать view'шки, и в 1С обращаться именно к ним.
Например

CREATE VIEW ActiveSessions as
SELECT
s.session_id,
r.status,
r.cpu_time,
Substring(st.TEXT,(r.statement_start_offset / 2) + 1,
((CASE r.statement_end_offset
WHEN -1
THEN Datalength(st.TEXT)
ELSE r.statement_end_offset
END - r.statement_start_offset) / 2) + 1) AS statement_text,
r.command,
s.login_name,
s.host_name,
s.program_name
FROM
sys.dm_exec_sessions AS s
JOIN sys.dm_exec_requests AS r ON r.session_id = s.session_id
CROSS APPLY sys.Dm_exec_sql_text(r.sql_handle) AS st

И в 1С уже будет
SELECT ... FROM ActiveSessions

Даже какое-то количество SP'шек можно переделать на view'шки. И безопасность меньше пострадает.
51. sparhh 27.06.19 10:17 Сейчас в теме
Если требуется писать во внешние источники, то что данный механизм может предложить?

Потребовалось писать данные по справочнику во внешнюю таблицу, ID - PrimaryKey.
Запись\обновление строки таблицы сгл сделал так -

_ID = Строка(СсылкаНаЭлемент.УникальныйИдентификатор());

ОбъектСГЛ = ТаблицаСГЛ.НайтиПоПолю("_ID", _ID);
Если ЗначениеЗаполнено(ОбъектСГЛ) Тогда 
	ОбъектСГЛ = ОбъектСГЛ.ПолучитьОбъект();	
Иначе
	ОбъектСГЛ = ТаблицаСГЛ.СоздатьОбъект();
	ОбъектСГЛ._ID = Строка(СсылкаНаЭлемент.УникальныйИдентификатор());
КонецЕсли;
Показать


В таком случае выполняется 3! запроса для случая изменения строки + это вообще построчный insert.
Есть ли возможность типовыми средствами сделать оптимальную запись?

--
В СКЛ есть команда MERGE для случая вставки+обновления, можно ли через 1С ее вызвать в объектном варианте?
--
Или же как автор показал в одном из "трюков" остается только вариант добавлять хранимую процедуру для произвольного выполнения команд и через нее мерджить.
Оставьте свое сообщение

См. также

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

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

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

05.09.2019    9975    ids79    42       

Обмен данными. Консистентность vs Многопоточность 25

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

Рассмотрим теоретические основы обмена данными. Какие бывают обмены, какие гарантии при этом даются, зачем идти на компромиссы и что при этом может пойти не так. Есть ли идеальная схема?

03.09.2019    3140    m-rv    1       

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

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

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

08.08.2019    10357    ids79    24       

Подсистема "Варианты отчетов". Используете ли Вы ее правильно? 210

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

Небольшая история про использование подсистемы "Варианты отчетов" из БСП. Используете ли Вы ее правильно?

04.06.2019    14224    YPermitin    49       

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

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

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

25.04.2019    4813    m-rv    2       

Как настроить правильную техподдержку (helpdesk, service desk на коленке) 38

Статья Программист Бизнес-аналитик Руководитель проекта Нет файла v8 УУ Управление взаимоотношениями с клиентами (СRM) Документооборот и делопроизводство Монитор заказов Учет рабочего времени Бесплатно (free) Управление услугами и сервисом

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

24.04.2019    7184    siddy    0       

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

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

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

16.04.2019    7347    m-rv    16       

Копирование числовых ячеек из 1С в Excel 26

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

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

15.01.2019    10426    itriot11    21       

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

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

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

14.11.2018    31731    GeterX    93       

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

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

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

10.11.2018    20813    ids79    40       

Git + 1С. Часть 1. Как подключиться к команде разработки и начать использовать Git 268

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

Первая статья из цикла инструкций по работе с Git в 1С-разработке. Рассмотрим, как настроить рабочее место, как получить свою "копию" проекта для разработки и приступить к полезным действиям. Все примеры будут изложены в рамках трёх практических кейсов: 1. Моя команда дорабатывает типовую конфигурацию, использует приватный репозиторий на BitBucket, в котором версионируются внешние отчеты/обработки, расширения конфигураций и правила обмена; 2. Я участвую в стартап-команде, которая разрабатывает свою конфигурацию с использованием Git и GitLab; 3. Я принимаю участие в развитии OpenSource-продукта на GitHub как заинтересованный разработчик (контрибьютор).

18.10.2018    33573    stas_ganiev    72       

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

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

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

15.10.2018    20431    tormozit    100       

Из Excel в 1С запросом 33

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

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

14.08.2018    13524    m-rv    5       

Повышаем эффективность разработки правил обмена 123

Статья Программист Нет файла v8 КД ОС Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    19296    olegtymko    47       

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

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

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

01.06.2018    21163    m-rv    21       

Строим графы средствами 1С (без GraphViz) 42

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

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    16946    slozhenikin_com    19       

Распределение расходов пропорционально продажам 9

Статья Программист Пользователь Нет файла v8 v8::ОУ УТ10 УУ Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Бесплатно (free) Практика программирования

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    11320    Rustig    9       

Универсальный обмен между идентичными конфигурациями через REST интерфейс OData. Часть І: Справочники 96

Статья Программист Нет файла v8 Бесплатно (free) Перенос данных из 1C8 в 1C8

Сейчас все чаще интеграции различных конфигураций проектируются через HTTP-сервисы - они и работают быстрее, и "войти" в режим отладки гораздо проще, тем самым обойдя "черный ящик" универсального обмена через xml, например. Более года назад я начал работать в компании, в которой разработчики работали с конфигурациями 1С в режиме совместимости еще 8.2.16 (менять режим совместимости в типичных базах мы не хотели) - а как Вы наверное знаете, если интересовались HTTP-сервисами в 1С, их использование в режиме совместимости 8.3.4 и ниже недопустимо - и здесь я уже не надеялся на разработку и использование HTTP-сервисов. Но позже меня заинтересовал такой "сервис" как REST интерфейс OData, так как его можно использовать не меняя режим совместимости конфигурации - именно он и стал для меня идеальным вариантом решения "нетривиальных" задач.

11.05.2018    16212    V.Stavinsky    11       

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

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

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

19.02.2018    35546    ildarovich    44       

Этюды по программированию. Взаимодействие с Microsoft Word 109

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

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

11.12.2017    25824    milkers    23       

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

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

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

05.12.2017    21302    itriot11    34       

1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена) 720

Статья Программист Нет файла v8 КД Бесплатно (free) Перенос данных из 1C8 в 1C8 Практика программирования Обмен через XML

Что такое КД3? Как начать использовать? Полезные дополнения к документации. Что нужно исправить в типовых обработках и конфигурации. Как изменить правила обмена не снимая конфигурацию с поддержки. Как отлаживать правила обмена?

19.11.2017    137460    MaxS    251       

Обзор имеющихся библиотек OneScript 299

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) OneScript

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

14.11.2017    30786    nixel    85       

Программные перечисления, ч.2: приемы кэширования при разработке 66

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

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

30.10.2017    21040    unichkin    17       

Легкий способ обновления измененной конфигурации 41

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

Легкий способ обновления измененной конфигурации. Сервис подготовки расширения конфигурации

25.10.2017    18539    avk72    63       

Работа с Excel 288

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

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

23.10.2017    24652    arakelyan    39       

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

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

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

10.09.2017    34203    tormozit    72       

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

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

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

04.09.2017    43111    m-rv    60       

Как просто запомнить алгоритм программного вывода в СКД 205

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

Порой нужно быстро вывести на экран таблицу значений, используя СКД \ получить данные отчета в таблицу значений.. Несмотря на очевидность алгоритма - раньше мне проще было загуглить программный вывод, благо эта инфа есть везде. Но постепенно понял как его можно быстро вспомнить, и лишний раз ничего не искать. Конечно эта статья не для Гуру :) Но я думаю - что любой неопытный в СКД программист сделает для себя небольшое открытие...

01.09.2017    41481    unichkin    15       

Как формируется GUID? 463

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

"Коллеги, есть идеи, как получить последнюю созданную характеристику? Реквизиты полностью идентичны(код, наименование, и т.п.)."(c) "Насколько я знаю, ссылка не обеспечивает последовательность, а только уникальность."(c) "Я сделал по Максимум(Ссылка). Но, чета, мне кажется, это неправильно."(c) "Слышал что в ГУИд содержится как раз время создания и по всей логике вещей сортировка по ссылке должна сортировать по моменту создания объекта"(c) Сколько раз вы слышали такие фразы? На удивление я не обнаружил информации по этой теме, пришлось разбираться самому...

16.06.2017    52346    kuzyara    55       

Использование инструментов разработчика для отладки обменов КД 2.0 67

Статья Программист Нет файла v8 КД Бесплатно (free) Перенос данных из 1C8 в 1C8

Пара трюков, благодаря которым жить становится намного проще...

05.05.2017    22567    unichkin    3       

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

Статья Программист Нет файла v8 КД Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

Поскольку к конвертации обращаюсь время от времени и какие-то детали забываются, хочу выделить несколько пунктов, чтобы "было где посмотреть". Статья сделана преимущественно «для себя», так что просьба не судить строго. (Примечание читающим/комментирующим: код в примерах очень сильно сокращен.)

16.03.2017    61811    perepetulichka    25       

Online телефонный справочник из 1С: Зарплата и управление персоналом 33

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

В интернете представлено много реализаций online телефонных справочников организаций. Есть справочники, которые использует для хранения информации базу Active Directory (LDAP), есть справочники, которые реализованы с использованием СУБД (например, MySQL). Но я не нашел справочника, который использует информацию из базы 1С. Далее я рассмотрю данную разработку.

10.03.2017    19052    ruha    14       

Библиотека стандартных подсистем (Механизм БСП) 74

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

Конфигурации в 1С пишутся для пользователей и по их «правилам» (клиент всегда прав), поэтому в основном все конфигурации разные, но достаточно часто в них используются одни и те же объекты, которые незначительно отличаются друг от друга. Действительно, сложно представить конфигурацию, где не фигурировали бы такие сущности как номенклатура, контрагенты, пользователи, валюта. И некоторые задачи являются типичными: возможность базового разграничения прав, работа с электронной почтой, задачи пользователям и т.д. Но...!

03.03.2017    51281    V.Stavinsky    21       

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

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

Предлагаю познакомиться с инструментом "Автоматизированная проверка конфигураций" и получить практику его применения

18.01.2017    43438    3    Vladimir Litvinenko    20       

Отладка подключаемых обработок 195

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

На самом деле для этого не нужно ни изменять конфигурацию, ни пользоваться вспомогательной обработкой-отладчиком.. Все просто :)

04.01.2017    43522    unichkin    77       

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

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

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

10.12.2016    29893    unichkin    45       

РИБ 200 узлов. Середина пути 116

Статья Системный администратор Программист Нет файла v8 Розница Россия Бесплатно (free) Распределенная БД (УРИБ, УРБД)

Между настройкой и поддержкой РИБ на 2 узла и на 10 большой разницы нет, а вот когда число удаленных точек переваливает за сотню, приходится решать уже совсем другие вопросы

25.10.2016    34130    comol    215       

Использование git для доработки типовых конфигураций 1С 230

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

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

11.10.2016    186163    pumbaE    31       

Отладка конфигураций на мобильной платформе 107

Статья Программист Нет файла v8 Бесплатно (free) Мобильная разработка

Настройка и подключение отладчика для отладки конфигураций на мобильной платформе.

25.09.2016    35005    spezc    44       

Обновление доработанной Бухгалтерии предприятия. Как проверить и убедиться, что все сделано хорошо? 89

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

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

05.09.2016    24802    kraynev-navi    33       

Старые обработки в новом (Управляемом) интерфейсе 101

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

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

12.08.2016    57974    valerasv    7       

Регистры сведений 1С. Как это устроено. 714

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

Основная идея публикации - собрать в одном месте информацию о внутреннем устройстве такой абстрактной сущности, как "Регистр сведений 1С" и ответить на ряд вопросов: Что происходит при записи регистра в различных режимах? Что такое на самом деле "СрезПервых" и "СрезПоследних"? Как оптимально выбрать структуру регистра? Это та информация, владея которой, начинаешь лучше понимать как это работает и как правильно использовать регистры сведений.

05.08.2016    146835    Sergey.Noskov    154       

Простая и быстрая эмуляция операций с битовыми строками 67

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

Битовые строки могли бы упростить реализацию некоторых алгоритмов на языке платформы «1С: Предприятие 8». Но пока в платформе операций с битовыми строками нет. В то же время уже сделанные попытки смоделировать эти операции преобразованиями над числами опираются на циклы обработки отдельных битов, что плохо сказывается на скорости их работы. Предлагается новое простое решение, основанное на представлении битовых строк строками символов «0» и «1». Приводится примеры кода выполнения основных логических операций AND, OR, XOR, NO без использования циклов. В качестве прикладной задачи рассмотрено получение последовательных значений кода Грэя, который можно использовать для ускорения перебора вариантов.

22.06.2016    25949    ildarovich    14