Доступ к другой БД 1С через V83.COMConnector

Задача: перенести содержимое регистра из одной БД в другую.

Решение: одним из способов (помимо обработки ВыгрузкаЗагрузкаДанныхXML.epf) является прямая загрузка через COM подключение. Вышло примерно так:

// соединяемся с БД	
		V8=Новый COMОбъект("V83.COMConnector");
		Попытка
			База=V8.Connect("Srvr=""fserferfw""; Ref=""ewrfwe""; Usr=""werfwerfwe""; Pwd=""werfwerfwer"";")
		Исключение
			сообщить("Чтото пошло не так..");
		КонецПопытки;
	
	// делаем выборку из нашего регистра
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 10
		|	ОчередьРаботыСВотцапСрезПоследних.Телефон КАК Телефон,
		|	ОчередьРаботыСВотцапСрезПоследних.ЛицевойСчет КАК ЛицевойСчет,
		|	ОчередьРаботыСВотцапСрезПоследних.ЛицевойСчет.Код КАК ЛицевойСчетКод,
		|	ОчередьРаботыСВотцапСрезПоследних.Период КАК Период,
		|	ОчередьРаботыСВотцапСрезПоследних.Сообщение КАК Сообщение,
		|	ОчередьРаботыСВотцапСрезПоследних.ДатаОбработки КАК ДатаОбработки
		|ИЗ
		|	РегистрСведений.ОчередьРаботыСВотцап.СрезПоследних КАК ОчередьРаботыСВотцапСрезПоследних
		|ГДЕ
		|	ОчередьРаботыСВотцапСрезПоследних.Результат = &Результат";	
	Запрос.УстановитьПараметр("Результат", перечисления.ГринРезультатЗапроса.Успешно);	
	РезультатЗапроса = Запрос.Выполнить();	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл							
			МенеджерЗаписи =База.РегистрыСведений.ОчередьРаботыСВотцап.СоздатьМенеджерЗаписи();			
			МенеджерЗаписи.ЛицевойСчет = База.справочники.vscЛицевыеСчета.НайтиПоКоду(ВыборкаДетальныеЗаписи.ЛицевойСчетКод);
			МенеджерЗаписи.Телефон = ВыборкаДетальныеЗаписи.Телефон;
			МенеджерЗаписи.Действие =  База.перечисления.ГринДействияСВотцап.ПроверкаНаличияВотцап;
			МенеджерЗаписи.Результат=  База.перечисления.ГринРезультатЗапроса.Успешно;
			МенеджерЗаписи.ДатаОбработки=ВыборкаДетальныеЗаписи.ДатаОбработки;
			МенеджерЗаписи.Период=ВыборкаДетальныеЗаписи.Период;
			МенеджерЗаписи.Статус= База.перечисления.СтатусОчередиВотцап.Обработан;
			МенеджерЗаписи.Записать();  		
		
	КонецЦикла;

1C: нормализация номера сотового телефона

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

Функция ПроверитьКорректностьТелефона(телефона) экспорт
	телефон=телефона;
	answer=Новый Структура("error,result,errortxt,code",false,"","",0);
	телефон=СтрЗаменить(телефон," ","");
	телефон=СтрЗаменить(телефон,"(","");
	телефон=СтрЗаменить(телефон,")","");
	телефон=СтрЗаменить(телефон,"-","");
	телефон=СтрЗаменить(телефон,"+","");
	если СтрДлина(телефон)=10 тогда телефон="7"+телефон;конецесли;	
	если СтрДлина(телефон)=11 тогда 
		если Лев(телефон, 1)="8" тогда
			телефон=Сред(телефон,2);
			телефон="7"+телефон;
		конецесли;	
	конецесли;	
	если СтрДлина(телефон)<>11 тогда
		answer.error=true;
		answer.errortxt="Не верный номер телефона";
		answer.code=501;
	конецесли;	
	
	answer.result=телефон;
	возврат answer;
конецфункции

На выходе: answer.error true/false. Если false, то в answer.result — нормализованый номер телефона

1c: Значение поля не соответствует установленному отбору при изменении запись регистра

Такая ошибка чаще всего означает что вы пытаетесь изменить запись регистра, изменяя измерение. А так нельзя. Если нужно изменить измерение — запись нужно предварительно удалить, а затем записать вновь

1С: проверка пароля пользователя

Задача: проверить соответствие имени пользователю, введённый им пароль. Пользователи хранятся в стандартном справочнике «Пользователи»

Решение: в 1С нет штатных методов проверки пароля, т.к. пароль как таковой не хранится, а хранится его хэш. Следовательно для того чтобы проверить введенный пароль, необходимо сравнить «старый» хэш с хэшэм введеного пароля. Но есть нюанс — никто не знает по какому алгоритму генерируется хэш при сохранении пароля. Следовательно подходит лишь один алгоритм:

  1. Получаем хэш текущего пароля
  2. Начинаем транзакцию
  3. Сохраняем введеный пароль пароль у пользователя
  4. Получаем хэш введенного пароля
  5. Отменяем транзакцию (тем самым отменяем изменения у пользователя)
  6. Сравниваем первый хэш со вторым. Если равны — значит пароль соответствует.

Воплощение:

// Функция по входящим body.login и body.password выдает или error=true
// или возращает полное имя, уникальный идентификатор и список доступных для проведения инвентаризации документов
Функция Auth(body)
    answer = Новый Структура("error, result",false,"");		
    ПользовательИнформационнойБазы = ПользователиИнформационнойБазы.НайтиПоИмени(body.login);
	Если ПользовательИнформационнойБазы = Неопределено Тогда
    	answer.error=true;
		answer.result="Пользователь не найден в БД";
		возврат answer;
	Иначе
			ХэшНастоящегоПароля = ПользовательИнформационнойБазы.СохраняемоеЗначениеПароля;
			НачатьТранзакцию();		    
		    ПользовательИнформационнойБазы.Пароль = body.password;
		    ПользовательИнформационнойБазы.Записать();		    
		    ХешВведенногоПароля = ПользователиИнформационнойБазы.НайтиПоИмени(body.login).СохраняемоеЗначениеПароля;
		    ОтменитьТранзакцию();
		                                      
		    Если ХешВведенногоПароля = ХэшНастоящегоПароля Тогда
		        answer.error=false;
				answer.result=Новый Структура("UserName,UserId,MyInvent",ПользовательИнформационнойБазы.ПолноеИмя,ПользовательИнформационнойБазы.УникальныйИдентификатор,Новый Массив());
		    Иначе
				answer.error=true;
				answer.result="Не верный пароль пользователя";
				возврат answer;
		    КонецЕсли;	
	конецесли;
 возврат answer;                   
КонецФункции	

ТиС: ошибка обмена с сайтом Bitrix

Словил ошибку:

bitrix Произошла ошибка на стороне сервера. Получен неизвестный статус импорта.Ответ сервера:MySQL Query Error!Ответ сервера: MySQL Query Error!

Возможно эти ошибки уйдут, если проверите: 

1) Нет места на ж/д на хостинге
2) Превышено количество файлов/папок в каталоге upload
3) Уже фоново выполняется в 1с процесс обмена. Остановите все фоновые задачи
1 15 16 17 18 19 50