Форум Кладовочки АЛьФ`а

Общие вопросы => 7.7 => Тема начата: Злоп от 03 ноября 2024, 01:02

Название: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 03 ноября 2024, 01:02
..касающиеся всякого по 7.7, в т.ч. Formex и т.д.
Обсуждения здесь не писать! Если надо обсуждение - то ссылку на уже существующую старую ветку или просто пост внутри это ветки со ссылкой на обсуждение в другой ветке.

@АЛьФ Прошу закрепить вверху форума.
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 03 ноября 2024, 01:09
Редко встречающаяся инфа/дока по методу ИТЗ

ЗаполнитьКолонкуПоАлгоритму([Индекс = ''''], Колонка, ИнкрементируемоеЗначение, Инкремент)
Назначение: 
заполняет колонку таблицы Инкрементируемым значением. 
Параметры: 
Индекс - тип: Строка, Число. Идентификатор или номер индекса, по которому
упорядочиваются и фильтруются строки заполняемой таблицы. По умолчанию
используется основной индекс. 
Колонка - тип: Строка, Число. Идентификатор или номер заполняемой колонки. 
ИнкрементируемоеЗначение - тип: Число. Значение, которым будет заполнена
колонка с учетом инкремента. 
Инкремент -  тип: Число. Значение, которым будет инкрементированно
"ИнкрементируемоеЗначение". 
(пример задали 1,2 получили 1,3,5 до КоличестваСтрок в индексе с учетом
фильтра).

Для более сложного алгоритма использовать можно так: Написал @Arbuz (https://forum.dorex.pro/index.php?msg=2592)

_вм =СоздатьОбъект("ВыполняемыйМодуль");
    _стр ="
    |Перем Парам;
    |Процедура ВНачало(__знач)
    |    Парам =__знач;
    |КонецПроцедуры
    |
    |Функция NextValue()
    |    Парам =Парам +1;
    |    Возврат Парам;
    |КонецФункции
    |";
    _вм.УстановитьМодуль(_стр);
    _вм.КомпилироватьМодуль();
    _вм.ВыполнитьМодуль();
    _вм.ВНачало(0);

    ИТЗ.ЗаполнитьКолонкуПоАлгоритму(, 1, _вм);
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 03 ноября 2024, 01:42
Если взять файл в кодировке UTF8, прочитать первую строку штатным методом объекта "Текст" (d кодировке 1251) и сделать
Стр = глСервис.EncodeFromUTF8(ТутПерваяСтрока);
то на выходе в Стр в первом символе получим мусор какой-то и этот первый символ лишний, его надо отрезать. По крайне мере это так если файл начинается с кода: EF BB BF
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 03 ноября 2024, 02:10
А вот Кнопка с картинкой не из Библиотеки картинок очень прикольным способом делается, Написал @Djelf (https://forum.dorex.pro/index.php?msg=1212)

//Кнопка //:АссоциативныйВектор
АФ=РФ.ДобавитьАтрибут(Кнопка.Идентификатор,10); // картинка
АФ.Заголовок = Кнопка.Заголовок;
АФ.Подсказка = Кнопка.Подсказка;
АФ.Описание  = Кнопка.Подсказка;
АФ.Формула   = Кнопка.Формула;
Картинка        = Система.ПолучитьOLEКартинку(Кнопка.Картинка);
АФ.Значение.УстановитьКартинку(Картинка);
АФ.Значение.РежимРисования(Кнопка.РежимРисования);
АФ.Стиль = 1342193675; // стань же кнопкой!
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 04 ноября 2024, 17:01
ПЕРЕКОДИРОВКА С ИСПОЛЬЗОВАНИЕМ BinaryData
Написал <Ветер в поле> (https://forum.dorex.pro/index.php?msg=2615)
...Я всегда использовал BinaryData из 1cpp для перекодировки. А для перекодировки единичных строк просто написал функцию для перекодировки из любой систем в любую с использованием того же BinaryData

// Кодировки: 0 - windows-1251, 1 - OEM, 2 - UTF-16, 3 - UTF-8
Функция ИзменитьКодировку(Стр, ИсхКодировка, КонКодировка) Экспорт
    Перем ТекСтр;
   
    оБуфер = СоздатьОбъект("BinaryData");
    оБуфер.Кодировка = КонКодировка;
   
    Если ИсхКодировка = 0 Тогда
        оБуфер.ЗаписатьСтроку(Стр, 1);
       
    Иначе
        оБуферИсх = СоздатьОбъект("BinaryData");
        оБуферИсх.ЗаписатьСтроку(Стр, 1);
        оБуферИсх.Перейти(0, 0);
        оБуферИсх.Кодировка = ИсхКодировка;
       
        Если ИсхКодировка >= 2 Тогда //UTF-16 или 8
            Пока оБуферИсх.ПрочитатьСтроку(ТекСтр, 0) = 1 Цикл
                оБуфер.ЗаписатьСтроку(ТекСтр, 0);
            КонецЦикла;
           
        Иначе
            оБуферИсх.ПрочитатьСтроку(ТекСтр, оБуферИсх.Размер());
            оБуфер.ЗаписатьСтроку(ТекСтр, 1);
        КонецЕсли;
       
        оБуферИсх = "";
    КонецЕсли;
   
    оБуфер.Перейти(0, 0);
    оБуфер.Кодировка = 0; //прочитаем без перекодировки
    оБуфер.ПрочитатьСтроку(ТекСтр, оБуфер.Размер());
   
    оБуфер = "";
   
    Возврат ТекСтр;
   
КонецФункции //ИзменитьКодировку
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 09 ноября 2024, 21:30
ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРЕДОПРЕДЕЛЕННОЙ ПРОЦЕДУРЫ ВводНаОсновании()
По СП - у процедуры всего один параметр. Но ничто не мешает определить, например, вот так:

//--------------------------------------------------------------------
Процедура ВводНаОсновании(ДокОснование, Переоформление=0,РежимВвода=0)
   РежимВвода = 77;
   Предупреждение("РежимВвода="+РежимВвода+" - 77?");

Что получится:
- если процедура вызывается платформой (или кодом ОткрытьФорму("Документ.ЧтоТо",Параметры,ДокументОснование)), то РежимВвода изменить внутри процедуры не удастся и никаких исключений не получаем при этом...
- если процедура вызывается программно в модуле формы типа
ВводНаОсновании(ДокументОснование,0,77)
то РежимВвода вполне себе нормально изменяется... 

Скорее всего и в прочих предопределенных процедурах аналогично (не проверял)...
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 09 ноября 2024, 21:34
ПОЛУЧИТЬ ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ ЧЕГО-ТО...
Есть Документ.ПриходнаяНакладная.Товар,
где Товар - нетипизированный справочник.
.
Чорный запрос с выражением
|Код = Документ.ПриходнаяНакладная.Товар.Код;

Возвращает интересную штуку - какой-то внутренний код (id?)
(https://wdfiles.ru/plugins/imageviewer/site/thumb.php?s=2Pg4z)
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 09 ноября 2024, 21:35
РОДСТВЕННАЯ ВЕТКА
ветка по FORMEX (https://forum.dorex.pro/index.php?topic=94.0)
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 10 ноября 2024, 13:58
ПОЛУЧИТЬ ПАРАМЕТРЫ ШРИФТА ФОРМЫ
обсуждалось здесь (https://forum.dorex.pro/index.php?topic=174.0)

РасшФормы = СоздатьОбъект("РасширениеФормы");
ВП = РасшФормы.ВнутреннееПредставление;
//ОТЛАДКА Сообщить(РазделительСтрок+ВП);

//{"Dialogs",
//{"Frame",
//{"-11","0","0","0","400","0","0","0","204","1","2","1","34","MS Sans Serif","320","165"," ","","","128","","1","1","6","29","-1","0","128",
ВП = СтрПолучитьСтроку(ВП,3);
//ОТЛАДКА Сообщить(РазделительСтрок+ВП);

ВП = СокрЛП(СтрЗаменить(ВП,"{",РазделительСтрок));
ВП = СтрЗаменить(ВП,",",РазделительСтрок);
ВП = СтрЗаменить(ВП,"""","");

ШрифтПоУмолчанию = Число(СтрПолучитьСтроку(ВП,22));
ШрифтИмя = СтрПолучитьСтроку(ВП,14);
ШрифтРазмер = Число(СтрПолучитьСтроку(ВП,1));
ШрифтЖирный = Число(СтрПолучитьСтроку(ВП,5));
ШрифтНаклонный = Число(СтрПолучитьСтроку(ВП,6));
ШрифтПодчеркнутый = Число(СтрПолучитьСтроку(ВП,7));
ШрифтЗачеркнутый = Число(СтрПолучитьСтроку(ВП,8));

ШрифтРазмерПриведенный = ШрифтРазмер * (-0.77273);
ШрифтРазмерПриведенныйДробь = ШрифтРазмерПриведенный - Цел(ШрифтРазмерПриведенный);
ШрифтРазмерПриведенныйДробь = ?(ШрифтРазмерПриведенныйДробь<0.5,0,0.5);
ШрифтРазмерПриведенный = Цел(ШрифтРазмерПриведенный)+ШрифтРазмерПриведенныйДробь;

Сообщить("Форма, шрифт:
|"+СимволТабуляции+"шрифт по умолчанию: "+?(ШрифтПоУмолчанию<>0,"да","нет")+"
|"+СимволТабуляции+"имя: "+ШрифтИмя+"
|"+СимволТабуляции+"размер: "+ШрифтРазмер+"(?"+ШрифтРазмерПриведенный+"пт)
|"+СимволТабуляции+"начертание: "+?(ШрифтЖирный=400,"нормальный","жирный")+"
|"+СимволТабуляции+"наклонный: "+?(ШрифтНаклонный<>0,"да","нет")+"
|"+СимволТабуляции+"подчеркнутый: "+?(ШрифтПодчеркнутый<>0,"да","нет")+"
|"+СимволТабуляции+"зачеркнутый: "+?(ШрифтЗачеркнутый<>0,"да","нет")+"
|");
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 12 ноября 2024, 01:04
ОПРЕДЕЛЕНИЕ СОСТОЯНИЯ КЛАВИШ
https://infostart.ru/1c/tools/1787209/
https://www.1cpp.ru/forum/YaBB.pl?num=1248963712/0#0
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Djelf от 18 ноября 2024, 15:43
ТабличноеПоле, переключение на Слой Формы


Процедура тп_ПриНажатииКлавиши(тп,ВиртКод,Данные,Клавиатура,ФСО)
Если ВиртКод = 124 Тогда //F13
Форма.ИспользоватьСлой("Общий",2);
Форма.Закладки.ТекущаяСтрока(1);
Форма.Обновить();
КонецЕсли;
КонецПроцедуры

Процедура тп_Выбор(тп,СтрокаТП,КолонкаТП,РегионТП)
    Сервис.SendKeys("{F13}");
КонецПроцедуры

Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Djelf от 18 ноября 2024, 16:01
Описание поблемы.
Проблема: При событии тп "Выбор" переключение слоев глючит - слои наслаиваются.
Решение: Отложенный перенос этого события в событие ПриНажатииКлавиши, там это работает нормально.
Возможные проблемы: клавиатуры пианистов, у которых есть клавиша F13

P.S. Слишком быстро отбивает повторное редактирование, 4g отрубился, и усё..
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 11 декабря 2024, 20:06
Вывод числового значения с использованием Формат()

Если в Формат опустить задание общей длины числа, то форматированное значение будет БЕЗ лидирующих пробелов, а если задавать явно длину числа - то вывод будет с лидирующими пробелами:
"<"+Формат(123.45,"Ч15.2")+">" = <         123.45>
"<"+Формат(123.45,"Ч.2")+">" = <123.45>

А вот штучка, когда значение "не влазит" в разрядную сетку:
"<"+Формат(0,"Ч(0)15.2.'")+">" = <'999'999'999.99> // причем увеличение длины не дает результата...
"<"+Формат(0,"Ч(0).2.'")+">" = <0.00>
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: ADirks от 12 декабря 2024, 11:56
Цитата: Djelf от 18 ноября 2024, 16:01Описание поблемы.
Проблема: При событии тп "Выбор" переключение слоев глючит - слои наслаиваются.
Решение: Отложенный перенос этого события в событие ПриНажатииКлавиши, там это работает нормально.

Я в таких случаях пользуюсь однократным таймером.
Также таймер пригождается, когда на какое-то событие нужно выполнить что-то, занимающее много времени. Чтобы поток событий тек спокойно :)

Например, обработка активации ячейки в объекте ПолеТабличногоДокумента:
Перем оТаймер;
Перем сзДанныеДляТаймера;
//===========================================================


Процедура Таймер_ПриАктивизацииЯчейки() Экспорт
    Если оТаймер <> Неопределено Тогда
        оТаймер.ОбработкаОжидания("Таймер_ПриАктивизацииЯчейки", 0);
    КонецЕсли;
    оТаймер = Неопределено;

    ТекСтрока = сзДанныеДляТаймера.Получить("ТекСтрока");
    Обл = сзДанныеДляТаймера.Получить("Обл");
    Расшифровка = сзДанныеДляТаймера.Получить("Расшифровка");
   
    //...
КонецПроцедуры

Процедура тдТЧПриАктивизацииЯчейки(Источник, Таблица, Действие, ТекСтрока, ТекСтолбец, НомерВида) Экспорт
    Если Форма.АктивныйЭлемент() <> "тдТЧ" Тогда //обновление ТЧ при выборе счета - в этот момент не нужно реагировать
        Возврат;
    ИначеЕсли фНеРеагироватьНаСобытия = 1 Тогда
        Возврат;
    КонецЕсли;
   
    Если Действие <> 1 Тогда //реагировать нужно только на активацию ячейки (Действие == 1)
        Возврат;
    КонецЕсли;
   
    Обл = Таблица.Область(ТекСтрока, ТекСтолбец);
    Расшифровка = Обл.Расшифровка();
    сзДанныеДляТаймера = СоздатьОбъект("СписокЗначений");
    сзДанныеДляТаймера.Установить("ТекСтрока", ТекСтрока);
    сзДанныеДляТаймера.Установить("Обл", Обл);
    сзДанныеДляТаймера.Установить("Расшифровка", Расшифровка);

    оТаймер = СоздатьОбъект("РасширениеФормы");
    оТаймер.ОбработкаОжидания("Таймер_ПриАктивизацииЯчейки", 200);
КонецПроцедуры
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 13 декабря 2024, 01:41
ОТКЛЮЧИТЬ ВЫЗОВ ПОМОЩИ ПО F1
Для обработки нажатия кнопки F1 используем Ф-штатные, например, ПриНажатииКнопкиКлавиатуры().
Чтобы отключить показ "помощи", выполняемый системой, дополнительно в ГМ ставим

Процедура ПриПолученииКомандыГлавнымОкном(Команда, НулевойПараметр, ФСО)

Если Команда = 57670
Тогда // нажата F1
ФСО = 0;
Возврат;
КонецЕсли;

КонецПроцедуры // ПриПолученииКомандыГлавнымОкном()
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 13 декабря 2024, 01:43
МОДИФИЦИРУЕМ ИНТЕРФЕЙС ТЗ НА ФОРМЕ

АтрибутФормы = РФорма.ПолучитьАтрибут("ТЗФорма");
АтрибутФормы.ИзменитьСтиль(2097152); //без вертикального скроллбара
АтрибутФормы.ИзменитьСтиль(8388608); //без двойной рамки
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: АЛьФ от 13 декабря 2024, 12:48
Цитата: Злоп от 13 декабря 2024, 01:41ОТКЛЮЧИТЬ ВЫЗОВ ПОМОЩИ ПО F1

В новых версиях Винды вызов помощи вызывает ошибку. Поэтому помимо F1 у нас перекрыты и некоторые еще команды ("Содержание" и "О программе"):
Процедура ПриПолученииКомандыГлавнымОкном(КодКоманды, ПараметрКоманды, СтандартнаяОбработка)
    Если КодКоманды = 57670 Тогда
        Сообщить("Все вопросы о работе 1С по телефону: 224");
        СтандартнаяОбработка = 0;
    ИначеЕсли КодКоманды = 57666 Тогда
        Сообщить("Все вопросы о работе 1С по телефону: 224");
        СтандартнаяОбработка = 0;
    ИначеЕсли КодКоманды = 32808 Тогда
        Сообщить("1С:Предприятие версии 7.70.027");
        СтандартнаяОбработка = 0;
    ИначеЕсли КодКоманды = 32805 Тогда
        Сообщить("Блокировка окна 1С отключена");
        СтандартнаяОбработка = 0;
    КонецЕсли;
КонецПроцедуры
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 14 декабря 2024, 23:47
КОДЫ СТАНДАРТНЫХ КОМАНД/ИКОНОК
Процедура ПриПолученииКомандыГлавнымОкном(пКоманда, lParam, пФСО)
Если пКоманда = 0 Тогда
ИначеЕсли пКоманда = 32786 Тогда// Новый
ИначеЕсли пКоманда = 32784 Тогда// Открыть
ИначеЕсли пКоманда = 32862 Тогда// Просмотр
ИначеЕсли пКоманда = 32790 Тогда// Копировать
ИначеЕсли пКоманда = 32877 Тогда// на основании
Иначе
КонецЕсли;
КонецПроцедуры
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 13 января 2025, 23:14
ВЫГРУЗКА DLL
Процедура ВыгрузитьDLL()
DWX = СоздатьОбъект("DynamicWrapperX");
DWX.Register("Kernel32", "LoadLibrary", "i=s", "r=h");
DWX.Register("Kernel32", "FreeLibrary", "i=h", "r=t");
DWX.Register("Kernel32", "GetModuleHandle", "i=s", "r=h");
hDLL = DWX.GetModuleHandle("TableDoc.dll");
Если hDLL <> 0 Тогда
Если DWX.FreeLibrary(hDLL) = 1 Тогда
hDll = DWX.LoadLibrary("TableDoc.dll");
Сообщить(hDll);
КонецЕсли;
КонецЕсли;
КонецПроцедуры

Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: АЛьФ от 15 января 2025, 09:11
Цитата: Злоп от 13 января 2025, 23:14ВЫГРУЗКА DLL
Почему не Сервис.ВыгрузитьВнешнююКомпоненту("TableDoc.dll")?
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Djelf от 15 января 2025, 16:08
Цитата: АЛьФ от 15 января 2025, 09:11
Цитата: Злоп от 13 января 2025, 23:14ВЫГРУЗКА DLL
Почему не Сервис.ВыгрузитьВнешнююКомпоненту("TableDoc.dll")?
Выгружать то оно выгружает, но подменить не получается, файл занят.
Я с 1sqlte эксперементировал, вроде все ресурсы высвобождаюся, но подменить файл не получается.
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 15 января 2025, 21:16
Цитата: АЛьФ от 15 января 2025, 09:11
Цитата: Злоп от 13 января 2025, 23:14ВЫГРУЗКА DLL
Почему не Сервис.ВыгрузитьВнешнююКомпоненту("TableDoc.dll")?
По недомыслию и от бездуховности, не помнил такой метод. Да и нужды не было в этом (в выгрузке).
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 16 января 2025, 00:40
РЕЖИМ ОТКРЫТИЯ ФОРМЫ СПИСКА, ПОЛУЧИТЬ В САМОЙ ФОРМЕ...?
некоторые особенности здесь: https://forum.dorex.pro/index.php?topic=182.msg2547#msg2547
.
например,
"Еще одна странность: ОткрытьПодбор("Товары") работает также как ОткрытьПодбор("Справочник.Товары") - хотя в документации такая возможность не описана.
Недокументрированное КонтекстПодбора не подошло, так как это обращение к контексту открытой формы из родительской формы."
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 16 января 2025, 00:43
ПРОСЬБА ОБСУЖДЕНИЙ ЗДЕСЬ НЕ ПИСАТЬ
при необходимости: ответ со ссылкой на ветку (новую если надо завести) для обсуждения
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 16 января 2025, 00:47
ПОЛУЧИТЬ ПАРАМЕТРЫ СТРАНИЦЫ ИЗ ОКНА ПЕЧАТНОЙ ФОРМЫ
Перехватили форму окна печатной формы.
Надо вытащить параметры страницы, установленные для этой формы.
Установленные Таб.ПараметрыСтраницы() можно вытащить через tabledoc.dll

            ТабМенеджер = СоздатьОбъект("МенеджерТабличногоДокумента");
            ТабМенеджер.УстановитьТаблицу(КонтТекущегоОкна);
                ПараметрыСтраницы = ТабМенеджер.ПараметрыСтраницы;
                    ПолеСлева = ПараметрыСтраницы.Left;
                    ПолеСправа = ПараметрыСтраницы.Right;
                    ПолеСверху = ПараметрыСтраницы.Top;
                    ПолеСнизу = ПараметрыСтраницы.Bottom;
                    Ориентация = ПараметрыСтраницы.Orient;
                    ИмяПринтера = ПараметрыСтраницы.DefaultPrinter;
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 16 января 2025, 00:57
ПОЛУЧЕНИЕ ИМЕНИ ИСПОЛНЯЕМОГО КОНТЕКСТА
получение имени функции/процедуры/модуля исполняемого контекста
здесь: https://forum.dorex.pro/index.php?topic=49.msg539#msg539
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 16 января 2025, 20:47
FORMEX: ГЛОБАЛЬНАЯ ПРОЦЕДУРА ПриАктивацииОкна(Контекст)
В als до 2.05.198 включительно не описана глобальная ПриАктивацииОкна(Контекст), а она есть (аналог локальной)
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 16 января 2025, 22:43
РЕКВИЗИТ "СТРОКА НЕОГРАНИЧЕННОЙ ДЛИНЫ"
Реквизиты "строка неограниченной длины" у объекта (а также общие реквизиты документов) должны стоять последними в списке реквизитов, см. https://1cpp.ru/forum/YaBB.pl?num=1234264157
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 17 января 2025, 22:30
ПОЛУЧИТЬ ОПИСАНИЕ ВНЕШНЕЙ ОБРАБОТКИ
   ИмяОбъекта = ВРег("Обработка.Загружаемая")+_GetPerformanceCounter();
   глСервис.ЗагрузитьВнешнююОбработку(РасположениеФайла(),ИмяОбъекта);
   //ОТЛАДКА Текст = глСервис.СписокВсехФорм(); Текст.Показать(ИмяОбъекта);
   Описание = глСервис.ПолучитьОписаниеОбъекта(ИмяОбъекта+".ФОРМА");
   Сообщить(Описание);
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 17 января 2025, 23:34
ОСОБЕННОСТИ ПОЛУЧЕНИЯ ОПИСАНИЯ ДЛЯ ОБЪЕКТОВ КОНФИГУРАЦИИ
т.е. например, Описание для объекта конфигурации "Справочник.Номенклатура" или "Документ.РасходнаяНакладная"

Общего рабочего варианта - нет...
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 17 февраля 2025, 13:40
ОСОБЕННОСТИ ФИЛЬТРА НА ИТЗ C ИНДЕКСОМ ПО УБЫВАНИЮ

На примере колонки с числовыми значениями.
Если индекс построен по убыванию, то мин-макс значения фильтра следует задавать согласно установленному порядку в индексе (условно: мин.значение - значение вверху таблицы, макс.значение - значение внизу таблицы).

//*******************************************
Процедура Сформировать()
ОчиститьОкноСообщений();

Сообщить("Прямой индекс");
ИТЗ = СоздатьОбъект("ИндексированнаяТаблица");
ИТЗ.НоваяКолонка("НомерПартии");
ИТЗ.ДобавитьИндекс("НомерПартии","НомерПартии");

ИТЗ.НоваяСтрока(); ИТЗ.НомерПартии = 1;
ИТЗ.НоваяСтрока(); ИТЗ.НомерПартии = 2;
ИТЗ.НоваяСтрока(); ИТЗ.НомерПартии = 3;
ИТЗ.НоваяСтрока(); ИТЗ.НомерПартии = 4;
ИТЗ.НоваяСтрока(); ИТЗ.НомерПартии = 5;

ИТЗ.УстановитьФильтр(3,4,"НомерПартии");  // хотим получить значения в диапазоне [3,4]
ИТЗ.ВыбратьСтроки("НомерПартии");
Пока ИТЗ.ПолучитьСтроку("НомерПартии") = 1 Цикл
Сообщить(ИТЗ.НомерПартии);
КонецЦикла;
Сообщить("Прямой индекс (ожидали 3,4): готово! ок");

Сообщить("Обратный индекс");
ИТЗ = СоздатьОбъект("ИндексированнаяТаблица");
ИТЗ.НоваяКолонка("НомерПартии");
ИТЗ.ДобавитьИндекс("НомерПартии","НомерПартии-");

ИТЗ.НоваяСтрока(); ИТЗ.НомерПартии = 1;
ИТЗ.НоваяСтрока(); ИТЗ.НомерПартии = 2;
ИТЗ.НоваяСтрока(); ИТЗ.НомерПартии = 3;
ИТЗ.НоваяСтрока(); ИТЗ.НомерПартии = 4;
ИТЗ.НоваяСтрока(); ИТЗ.НомерПартии = 5;

ИТЗ.УстановитьФильтр(3,4,"НомерПартии"); // хотим получить значения в диапазоне [3,4]
ИТЗ.ВыбратьСтроки("НомерПартии");
Пока ИТЗ.ПолучитьСтроку("НомерПартии") = 1 Цикл
Сообщить(ИТЗ.НомерПартии);
КонецЦикла;
Сообщить("Обратный индекс (ожидали 4,3): готово! ..трабл");

ИТЗ.УстановитьФильтр(4,3,"НомерПартии");  // хотим получить значения в диапазоне [3,4]
ИТЗ.ВыбратьСтроки("НомерПартии");
Пока ИТЗ.ПолучитьСтроку("НомерПартии") = 1 Цикл
Сообщить(ИТЗ.НомерПартии);
КонецЦикла;
Сообщить("Обратный индекс (ожидали 4,3): готово! ок");


КонецПроцедуры // Сформировать()

Со строковыми значениями - аналогично работает.
Если отбирать по фильтру на диапазон значений ссылочного типа, например номенклатуру от ТоварЧтоТо до ТоварЕщеТо - пока непонятно что будет, не проверял.

Обсуждения, если надо, ведем в отдельной ветке!  https://forum.dorex.pro/index.php?topic=232
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 08 марта 2025, 03:06
Быстро моргнуть окошком-сообщением при надобности можно так:
Предупреждение("Завершено!",-1); // таймер = -1, предупреждение появится и сразу же закроется (быстрее чем 1 сек)
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 11 марта 2025, 00:37
Графы отбора VS общие реквизиты
Ковычки: а чем графы отбора лучше общих реквизитов ?
Епрст: лежат в отдельной табличке, не пухнет 1sjourn и меньше времени на запись оной.
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: trad от 11 марта 2025, 14:02
Ну да, ну да..
Не в отдельной табличке, а в 1scrdoc, там же где и вся подчиненность документов
Так что, что то пухнет и замедляется, что это
Графы не лучше и не хуже общих реквизитов. Они имеют разное назначение
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 19 марта 2025, 02:35
ФОРМАТЫ ЗАДАНИЯ ДАТ
константы типа "Дата" и преобразование дат функцией Дата() корректно отрабатывают если в качестве разделителей заданы любые знаки, отличные от цифр.
'31/12/2025'
'31-12-2025'
'31+12+2025'
'31.12.2025'
'31ю12ю2025'
- все это нормально типизируется в дату
все указанные выше значения нормально отрабатывают и функцией Дата(), например, Дата("31ю12ю2025") вполне корректно отработает...
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 02 апреля 2025, 01:55
ПРАВИЛЬНАЯ ПРОВЕРКА НАЛИЧИЯ КАТАЛОГА

так делать не надо:
Если ФС.СуществуетФайл(КакойТоКаталог)=0 Тогдаэто будет работать правильно кроме единственного варианта, когда каталог - корень диска, типа D:\

делать надо так:
Если ФС.СуществуетФайл(КакойТоКаталог+"NUL")=0 Тогдаэто будет работать правильно везде
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 23 апреля 2025, 16:48
РАСПАКОВЩИК СТАНДАРТНЫХ УСТАНОВОЧНЫХ x16 ПАКЕТОВ 1С 7.7
https://dml.compkaluga.ru/forum/index.php?showtopic=54199
https://infostart.ru/1c/tools/122516/
 
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 16 мая 2025, 02:15
ПОДМЕНИТЬ ШТАТНЫЙ ВЫБОР ПЕРИОДА В ЖУРНАЛАХ ДОКУМЕНТОВ

Используем Formex, в ГМ делаем вставку в предопределенную процедуру.
Процедура ПриПолученииКомандыГлавнымОкном(Команда, НулевойПараметр, ФСО)

  Если Команда = 32881 Тогда // нажата на тулбаре журнала кнопка выбора периода журнала
    КонтекстЖурнала = ""; глСервис.АктивныйКонтекст(КонтекстЖурнала);
    ДатаН = КонтекстЖурнала.НачалоИнтервала();
    ДатаК = КонтекстЖурнала.КонецИнтервала();
    глВвестиПериод(ДатаН,ДатаК); // здесь вызываем модально СВОЮ красивую обработку выбора периода
    КонтекстЖурнала.УстановитьИнтервал(ДатаН,ДатаК);
    ФСО = 0;
    Возврат;
  КонецЕсли;

КонецПроцедуры // ПриПолученииКомандыГлавнымОкном()
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 16 мая 2025, 13:23
ПОДМЕНИТЬ ШТАТНЫЙ ВЫБОР ПЕРИОДА В ЖУРНАЛАХ ДОКУМЕНТОВ, продолжение
Ветка обсуждения (https://forum.dorex.pro/index.php?topic=260.0)

Поправочка.
Описанное выше не работает в системных предопределенных журналах, которых нет в перечне журналов документов в дереве метаданных, но их можно выбрать из перечня журналов, там они идентифицируются как "(Прочие)" и "(Полный)". Формы этих журналов формексом не отлавливаются (не имеют собственного контекста?), поэтому код надо вот так (чтобы не упал по ошибке на КонтекстЖурнала.НачалоИнтервала()):
Процедура ПриПолученииКомандыГлавнымОкном(Команда, НулевойПараметр, ФСО)

  Если Команда = 32881 Тогда
    КонтекстЖурнала = ""; глСервис.АктивныйКонтекст(КонтекстЖурнала);
    Если ПустоеЗначение(КонтекстЖурнала) = 1 Тогда Возврат; КонецЕсли; // тут штатный выбор периода
    ДатаН = КонтекстЖурнала.НачалоИнтервала();
    ДатаК = КонтекстЖурнала.КонецИнтервала();
    глВвестиПериод(ДатаН,ДатаК); // здесь вызываем модально СВОЮ обработку выбора периода
    КонтекстЖурнала.УстановитьИнтервал(ДатаН,ДатаК);
    ФСО = 0;
    Возврат;
  КонецЕсли;

КонецПроцедуры // ПриПолученииКомандыГлавнымОкном()
Название: Re: КОПИЛКА: здесь всякие редкости, полезности, тонкости, неочевидности.
Отправлено: Злоп от 16 мая 2025, 22:36
ТЕКСТ НА КНОПКЕ В НЕСКОЛЬКО СТРОК
Была такая тема: https://1cpp.ru/forum/YaBB.pl?num=1222937598 (https://1cpp.ru/forum/YaBB.pl?num=1222937598)

Процедура ПослеОткрытия()
   ФормаРасш = СоздатьОбъект("РасширениеФормы");
   Атр = ФормаРасш.ПолучитьАтрибут("кн1");  // ну или что-то там с именем кнопки.
   Атр.ИзменитьСтиль(11,8192+256);//выравнивание влево
   Атр.ИзменитьСтиль(11,8192);//выравнивание по центру
   Атр.Заголовок = "тест1"+РазделительСтрок+"тест2";
КонецПроцедуры // ПослеОткрытия()