Определение длины строки в запросе 1С
Как извесно боль запросов 1С, в невозможности «штатно» определить длину строки в запросе. Вот один из обходных «велосипедов»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
&НаСервере Процедура ПроанализироватьНаСервере(имя) ТекстДерево = Дерево("ацукацукацук.Поле_1_1", -1, 300); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | " + ТекстДерево + " КАК Длина |ИЗ | РегистрСведений.ацукацукацук КАК ацукацукацук |УПОРЯДОЧИТЬ ПО | Длина УБЫВ"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл сообщить(ВыборкаДетальныеЗаписи.Длина); КонецЦикла; КонецПроцедуры &НаСервере Функция Дерево(Реквизит, Начало, Конец) Экспорт Если Начало + 1 = Конец Тогда Возврат Строка(Конец); КонецЕсли; Середина = Начало + Цел((Конец - Начало) / 2); СтрокаДерево = "ВЫБОР КОГДА ПОДСТРОКА(" + Реквизит + ", " + (Середина + 1) + ", 3) = """" ТОГДА " + Дерево(Реквизит, Начало, Середина) + " ИНАЧЕ " + Дерево(Реквизит, Середина, Конец) + " КОНЕЦ"; Возврат СтрокаДерево; КонецФункции |
1С: Выделение цветом ячеек в таблице значений на форме
Задача: раскрасить ячейки в ТЗ на форме в зависимости от условий.
Решение: будем использовать условное оформление, которое назначается перед выводом формы на экран. Например в процедуре «ПриСозданииНаСервере»
1 2 3 4 5 6 7 8 9 10 11 |
ЭлементОформления = УсловноеОформление.Элементы.Добавить(); Оформление = УсловноеОформление.Элементы.Добавить(); Оформление.Использование = Истина; Поле1 = Оформление.Поля.Элементы.Добавить(); Поле1.Поле = Новый ПолеКомпоновкиДанных("тчСумма"); Отбор = Оформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.тч.СуммаПениНачисленная"); Отбор.ПравоеЗначение = 0; Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; Отбор.Использование = Истина; Оформление.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Аквамарин); |
Сворачивание в трей Microsoft Outlook
Казалось бы удобная вещь. Сворачивание в трей по закрытию программы, чтобы она фоново висела и проверяла почту. Ан нет — нет такой возможности сделать через GUI. Только через реестр. Для этого нужно в ветке Компьютер\HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Preferences добавить переменную MinToTray формата DWORD равную 1
После чего, после перезагрузки ПК, Outlook будет сворачиваться в трей при закрытии.
1С: Удаление записи из регистра накопления по регистратору и измерению (отбор)
Задача: удалить записи из регистра накопления по регистратору + условию. Т.е. есть несколько записей с одним регистратором, но разными измерениями. Необходимо удалить только нужные. Казалось бы тривиальная задача..но.. «штатными » средставами это сделать не удалось.
Решение:
- Сделаем отбор по регистратору
- Переберем выборку, отберем те записи, которые необходимо удалить
- Удалим их
Код примерно такой:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
НаборЗаписей = РегистрыНакопления.vscРасчетыСАбонентами.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(Регистратор); НаборЗаписей.Прочитать(); УдаляемыеЗаписи = Новый Массив; Для Каждого Запись Из НаборЗаписей Цикл если Запись.ЛицевойСчет=объект.ЛицевойСчет тогда УдаляемыеЗаписи.Добавить(Запись); конецесли; конеццикла; Для Каждого УдаляемаяЗапись Из УдаляемыеЗаписи Цикл НаборЗаписей.Удалить(УдаляемаяЗапись); КонецЦикла; НаборЗаписей.Записать(); |
UPDATE:
А можно и еще проще и быстрее:
1 2 3 4 5 6 7 |
НаборЗаписей = РегистрыСведений.vscРасчетыСАбонентами.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(Регистратор); НаборЗаписей.Прочитать(); ТЗНабора=НаборЗаписей.Выгрузить(); ТЗНабора = ТЗНабора.Скопировать(Новый Структура("ЛицевойСчет", ЛицевойСчет)); НаборЗаписей.Загрузить(ТЗНабора); |