1С: выполнение запроса в другой базе

Задача: из текущей базы получить данные другой базы

Решение: используем COM соедниение

Функция ПолучитьПодключениеКСервернойБД()
	ПараметрыСоед = "Srvr='"+объект.Сервер+"';Ref='"+объект.ИмяБазы+"';Usr='"+объект.Логин+"';Pwd='"+объект.Пароль+"';";
	V83COMConnector= Новый COMОбъект("V83.COMConnector");
	Попытка
		Base1С = V83COMConnector.Connect(ПараметрыСоед);
		сообщить(Base1С);
	Исключение
		сообщить ("Ошибка подключения!");
		Base1С=неопределено;
	КонецПопытки;
    возврат Base1С;
КонецФункции

функция ПолучитьОстаткиВТекущейБазе(Дата1,ЛицевойСчет)
//получаю остатки
		Запрос = Новый Запрос;
		Запрос.Текст = 
			"ВЫБРАТЬ
			|	vscРасчетыСАбонентамиОстаткиИОбороты.Тариф КАК Тариф,
			|	vscРасчетыСАбонентамиОстаткиИОбороты.ВидУслуги КАК ВидУслуги,
			|	vscРасчетыСАбонентамиОстаткиИОбороты.ВидНачисления КАК ВидНачисления,
			|	vscРасчетыСАбонентамиОстаткиИОбороты.ДоговорНаПоставку КАК ДоговорНаПоставку,
			|	vscРасчетыСАбонентамиОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток,
			|	vscРасчетыСАбонентамиОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
			|	vscРасчетыСАбонентамиОстаткиИОбороты.РасходКонечныйОстаток КАК РасходКонечныйОстаток
			|ИЗ
			|	РегистрНакопления.vscРасчетыСАбонентами.ОстаткиИОбороты(ДАТАВРЕМЯ(2000, 1, 1, 0, 0, 0), &Дата1, , , ) КАК vscРасчетыСАбонентамиОстаткиИОбороты
			|ГДЕ
			|	vscРасчетыСАбонентамиОстаткиИОбороты.ЛицевойСчет = &ЛицевойСчет
			|	И vscРасчетыСАбонентамиОстаткиИОбороты.ВидРасчетов <> ЗНАЧЕНИЕ(Перечисление.vscВидыРасчетов.Корректировка)
			|
			|СГРУППИРОВАТЬ ПО
			|	vscРасчетыСАбонентамиОстаткиИОбороты.Тариф,
			|	vscРасчетыСАбонентамиОстаткиИОбороты.ВидУслуги,
			|	vscРасчетыСАбонентамиОстаткиИОбороты.ВидНачисления,
			|	vscРасчетыСАбонентамиОстаткиИОбороты.ДоговорНаПоставку,
			|	vscРасчетыСАбонентамиОстаткиИОбороты.СуммаНачальныйОстаток,
			|	vscРасчетыСАбонентамиОстаткиИОбороты.СуммаКонечныйОстаток,
			|	vscРасчетыСАбонентамиОстаткиИОбороты.РасходКонечныйОстаток";
		
		Запрос.УстановитьПараметр("Дата1", КонецДня(Дата1)+1);
		Запрос.УстановитьПараметр("ЛицевойСчет", ЛицевойСчет);
		
		РезультатЗапроса = Запрос.Выполнить();
		
		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

возврат ВыборкаДетальныеЗаписи;

конецфункции

Обратить внимание! В качестве передаваемых параметров нельзя использовать объекты. ТОЛЬКО примитивные типы. Типа строка,номер и т.д.

Boulder Dash в консоли..

Дождались! Теперь в культовый Boulder Dash можно поиграть на сервере в консоли SSH. Что для этого сделать?

1. Скачать исходники здесь: https://sourceforge.net/projects/ascii-dash/files/
2. Распаковать. Заменить файл sounds.cpp, моим «патченным». Патч отключает использование звуковой карты (какая на сервере может быть звуковая карта??)
3. Скомпилировать согласно иструкции из readme.txt

Наслаждайтесь…

 

Windows со встроенным SSH клиентом

Сегодня стало для меня открытием, что Windows 10 содержит в «базе» SSH и Telnet клиенты. С одним нюансом — подключается к удаленным серверам с кодировкой локали cp1251. Соответственно, чтобы полноценно работать на удаленном клиенте, нужно поставить локаль ru_RU.cp1251, при помощи:

apt-get install locales
dpkg-reconfigure locales

Выбрать помимо en_US.UTF8, еще и ru_RU.cp1251

Определение длины строки в запросе 1С

Как извесно боль запросов 1С, в невозможности «штатно» определить длину строки в запросе. Вот один из обходных «велосипедов»:

&НаСервере
Процедура ПроанализироватьНаСервере(имя)	
		
	
	ТекстДерево = Дерево("ацукацукацук.Поле_1_1", -1, 300); 
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|    " + ТекстДерево + " КАК Длина
		|ИЗ
		|	РегистрСведений.ацукацукацук КАК ацукацукацук
		|УПОРЯДОЧИТЬ ПО
    	|    Длина УБЫВ";
		
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		сообщить(ВыборкаДетальныеЗаписи.Длина);
	КонецЦикла;	


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

&НаСервере
Функция Дерево(Реквизит, Начало, Конец) Экспорт
    Если Начало + 1 = Конец Тогда
        Возврат Строка(Конец);
    КонецЕсли;
    Середина = Начало + Цел((Конец - Начало) / 2);
    СтрокаДерево = "ВЫБОР КОГДА ПОДСТРОКА(" + Реквизит + ", " + (Середина + 1) + ", 3) = """" ТОГДА " 
        + Дерево(Реквизит, Начало, Середина) + " ИНАЧЕ " + Дерево(Реквизит, Середина, Конец) + " КОНЕЦ";
    Возврат СтрокаДерево;
КонецФункции