..касающиеся всякого по 7.7, в т.ч. Formex и т.д.
Обсуждения здесь не писать! Если надо обсуждение - то ссылку на уже существующую старую ветку или просто пост внутри это ветки со ссылкой на обсуждение в другой ветке.
@АЛьФ Прошу закрепить вверху форума.
Редко встречающаяся инфа/дока по методу ИТЗ
ЗаполнитьКолонкуПоАлгоритму([Индекс = ''''], Колонка, ИнкрементируемоеЗначение, Инкремент)
Назначение:
заполняет колонку таблицы Инкрементируемым значением.
Параметры:
Индекс - тип: Строка, Число. Идентификатор или номер индекса, по которому
упорядочиваются и фильтруются строки заполняемой таблицы. По умолчанию
используется основной индекс.
Колонка - тип: Строка, Число. Идентификатор или номер заполняемой колонки.
ИнкрементируемоеЗначение - тип: Число. Значение, которым будет заполнена
колонка с учетом инкремента.
Инкремент - тип: Число. Значение, которым будет инкрементированно
"ИнкрементируемоеЗначение".
(пример задали 1,2 получили 1,3,5 до КоличестваСтрок в индексе с учетом
фильтра).
Для более сложного алгоритма использовать можно так: Написал @Arbuz (https://forum.dorex.pro/index.php?msg=2592)
_вм =СоздатьОбъект("ВыполняемыйМодуль");
_стр ="
|Перем Парам;
|Процедура ВНачало(__знач)
| Парам =__знач;
|КонецПроцедуры
|
|Функция NextValue()
| Парам =Парам +1;
| Возврат Парам;
|КонецФункции
|";
_вм.УстановитьМодуль(_стр);
_вм.КомпилироватьМодуль();
_вм.ВыполнитьМодуль();
_вм.ВНачало(0);
ИТЗ.ЗаполнитьКолонкуПоАлгоритму(, 1, _вм);
Если взять файл в кодировке UTF8, прочитать первую строку штатным методом объекта "Текст" (d кодировке 1251) и сделать
Стр = глСервис.EncodeFromUTF8(ТутПерваяСтрока);
то на выходе в Стр в первом символе получим мусор какой-то и этот первый символ лишний, его надо отрезать. По крайне мере это так если файл начинается с кода: EF BB BF
А вот Кнопка с картинкой не из Библиотеки картинок очень прикольным способом делается, Написал @Djelf (https://forum.dorex.pro/index.php?msg=1212)
//Кнопка //:АссоциативныйВектор
АФ=РФ.ДобавитьАтрибут(Кнопка.Идентификатор,10); // картинка
АФ.Заголовок = Кнопка.Заголовок;
АФ.Подсказка = Кнопка.Подсказка;
АФ.Описание = Кнопка.Подсказка;
АФ.Формула = Кнопка.Формула;
Картинка = Система.ПолучитьOLEКартинку(Кнопка.Картинка);
АФ.Значение.УстановитьКартинку(Картинка);
АФ.Значение.РежимРисования(Кнопка.РежимРисования);
АФ.Стиль = 1342193675; // стань же кнопкой!
ПЕРЕКОДИРОВКА С ИСПОЛЬЗОВАНИЕМ 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; //прочитаем без перекодировки
оБуфер.ПрочитатьСтроку(ТекСтр, оБуфер.Размер());
оБуфер = "";
Возврат ТекСтр;
КонецФункции //ИзменитьКодировку
ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРЕДОПРЕДЕЛЕННОЙ ПРОЦЕДУРЫ ВводНаОсновании()
По СП - у процедуры всего один параметр. Но ничто не мешает определить, например, вот так:
//--------------------------------------------------------------------
Процедура ВводНаОсновании(ДокОснование, Переоформление=0,РежимВвода=0)
РежимВвода = 77;
Предупреждение("РежимВвода="+РежимВвода+" - 77?");
Что получится:
- если процедура вызывается платформой (или кодом ОткрытьФорму("Документ.ЧтоТо",Параметры,ДокументОснование)), то РежимВвода изменить внутри процедуры не удастся и никаких исключений не получаем при этом...
- если процедура вызывается программно в модуле формы типа
ВводНаОсновании(ДокументОснование,0,77)
то РежимВвода вполне себе нормально изменяется...
Скорее всего и в прочих предопределенных процедурах аналогично (не проверял)...
ПОЛУЧИТЬ ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ ЧЕГО-ТО...
Есть Документ.ПриходнаяНакладная.Товар,
где Товар - нетипизированный справочник.
.
Чорный запрос с выражением
|Код = Документ.ПриходнаяНакладная.Товар.Код;
Возвращает интересную штуку - какой-то внутренний код (id?)
(https://wdfiles.ru/plugins/imageviewer/site/thumb.php?s=2Pg4z)
РОДСТВЕННАЯ ВЕТКА
ветка по FORMEX (https://forum.dorex.pro/index.php?topic=94.0)
ПОЛУЧИТЬ ПАРАМЕТРЫ ШРИФТА ФОРМЫ
обсуждалось здесь (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,"да","нет")+"
|");
ОПРЕДЕЛЕНИЕ СОСТОЯНИЯ КЛАВИШ
https://infostart.ru/1c/tools/1787209/
https://www.1cpp.ru/forum/YaBB.pl?num=1248963712/0#0
ТабличноеПоле, переключение на Слой Формы
Процедура тп_ПриНажатииКлавиши(тп,ВиртКод,Данные,Клавиатура,ФСО)
Если ВиртКод = 124 Тогда //F13
Форма.ИспользоватьСлой("Общий",2);
Форма.Закладки.ТекущаяСтрока(1);
Форма.Обновить();
КонецЕсли;
КонецПроцедуры
Процедура тп_Выбор(тп,СтрокаТП,КолонкаТП,РегионТП)
Сервис.SendKeys("{F13}");
КонецПроцедуры
Описание поблемы.
Проблема: При событии тп "Выбор" переключение слоев глючит - слои наслаиваются.
Решение: Отложенный перенос этого события в событие ПриНажатииКлавиши, там это работает нормально.
Возможные проблемы: клавиатуры пианистов, у которых есть клавиша F13
P.S. Слишком быстро отбивает повторное редактирование, 4g отрубился, и усё..
Вывод числового значения с использованием Формат()
Если в Формат опустить задание общей длины числа, то форматированное значение будет БЕЗ лидирующих пробелов, а если задавать явно длину числа - то вывод будет с лидирующими пробелами:
"<"+Формат(123.45,"Ч15.2")+">" = < 123.45>
"<"+Формат(123.45,"Ч.2")+">" = <123.45>
А вот штучка, когда значение "не влазит" в разрядную сетку:
"<"+Формат(0,"Ч(0)15.2.'")+">" = <'999'999'999.99> // причем увеличение длины не дает результата...
"<"+Формат(0,"Ч(0).2.'")+">" = <0.00>
Цитата: Djelf от 18 ноября 2024, 16:01Описание поблемы.
Проблема: При событии тп "Выбор" переключение слоев глючит - слои наслаиваются.
Решение: Отложенный перенос этого события в событие ПриНажатииКлавиши, там это работает нормально.
Я в таких случаях пользуюсь однократным таймером.
Также таймер пригождается, когда на какое-то событие нужно выполнить что-то, занимающее много времени. Чтобы поток событий тек спокойно :)
Например, обработка активации ячейки в объекте ПолеТабличногоДокумента:
Перем оТаймер;
Перем сзДанныеДляТаймера;
//===========================================================
Процедура Таймер_ПриАктивизацииЯчейки() Экспорт
Если оТаймер <> Неопределено Тогда
оТаймер.ОбработкаОжидания("Таймер_ПриАктивизацииЯчейки", 0);
КонецЕсли;
оТаймер = Неопределено;
ТекСтрока = сзДанныеДляТаймера.Получить("ТекСтрока");
Обл = сзДанныеДляТаймера.Получить("Обл");
Расшифровка = сзДанныеДляТаймера.Получить("Расшифровка");
//...
КонецПроцедуры
Процедура тдТЧПриАктивизацииЯчейки(Источник, Таблица, Действие, ТекСтрока, ТекСтолбец, НомерВида) Экспорт
Если Форма.АктивныйЭлемент() <> "тдТЧ" Тогда //обновление ТЧ при выборе счета - в этот момент не нужно реагировать
Возврат;
ИначеЕсли фНеРеагироватьНаСобытия = 1 Тогда
Возврат;
КонецЕсли;
Если Действие <> 1 Тогда //реагировать нужно только на активацию ячейки (Действие == 1)
Возврат;
КонецЕсли;
Обл = Таблица.Область(ТекСтрока, ТекСтолбец);
Расшифровка = Обл.Расшифровка();
сзДанныеДляТаймера = СоздатьОбъект("СписокЗначений");
сзДанныеДляТаймера.Установить("ТекСтрока", ТекСтрока);
сзДанныеДляТаймера.Установить("Обл", Обл);
сзДанныеДляТаймера.Установить("Расшифровка", Расшифровка);
оТаймер = СоздатьОбъект("РасширениеФормы");
оТаймер.ОбработкаОжидания("Таймер_ПриАктивизацииЯчейки", 200);
КонецПроцедуры
ОТКЛЮЧИТЬ ВЫЗОВ ПОМОЩИ ПО F1
Для обработки нажатия кнопки F1 используем Ф-штатные, например, ПриНажатииКнопкиКлавиатуры().
Чтобы отключить показ "помощи", выполняемый системой, дополнительно в ГМ ставим
Процедура ПриПолученииКомандыГлавнымОкном(Команда, НулевойПараметр, ФСО)
Если Команда = 57670
Тогда // нажата F1
ФСО = 0;
Возврат;
КонецЕсли;
КонецПроцедуры // ПриПолученииКомандыГлавнымОкном()
МОДИФИЦИРУЕМ ИНТЕРФЕЙС ТЗ НА ФОРМЕ
АтрибутФормы = РФорма.ПолучитьАтрибут("ТЗФорма");
АтрибутФормы.ИзменитьСтиль(2097152); //без вертикального скроллбара
АтрибутФормы.ИзменитьСтиль(8388608); //без двойной рамки
Цитата: Злоп от 13 декабря 2024, 01:41ОТКЛЮЧИТЬ ВЫЗОВ ПОМОЩИ ПО F1
В новых версиях Винды вызов помощи вызывает ошибку. Поэтому помимо F1 у нас перекрыты и некоторые еще команды ("Содержание" и "О программе"):
Процедура ПриПолученииКомандыГлавнымОкном(КодКоманды, ПараметрКоманды, СтандартнаяОбработка)
Если КодКоманды = 57670 Тогда
Сообщить("Все вопросы о работе 1С по телефону: 224");
СтандартнаяОбработка = 0;
ИначеЕсли КодКоманды = 57666 Тогда
Сообщить("Все вопросы о работе 1С по телефону: 224");
СтандартнаяОбработка = 0;
ИначеЕсли КодКоманды = 32808 Тогда
Сообщить("1С:Предприятие версии 7.70.027");
СтандартнаяОбработка = 0;
ИначеЕсли КодКоманды = 32805 Тогда
Сообщить("Блокировка окна 1С отключена");
СтандартнаяОбработка = 0;
КонецЕсли;
КонецПроцедуры
КОДЫ СТАНДАРТНЫХ КОМАНД/ИКОНОК
Процедура ПриПолученииКомандыГлавнымОкном(пКоманда, lParam, пФСО)
Если пКоманда = 0 Тогда
ИначеЕсли пКоманда = 32786 Тогда// Новый
ИначеЕсли пКоманда = 32784 Тогда// Открыть
ИначеЕсли пКоманда = 32862 Тогда// Просмотр
ИначеЕсли пКоманда = 32790 Тогда// Копировать
ИначеЕсли пКоманда = 32877 Тогда// на основании
Иначе
КонецЕсли;
КонецПроцедуры
ВЫГРУЗКА 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);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Цитата: Злоп от 13 января 2025, 23:14ВЫГРУЗКА DLL
Почему не Сервис.ВыгрузитьВнешнююКомпоненту("TableDoc.dll")?
Цитата: АЛьФ от 15 января 2025, 09:11Цитата: Злоп от 13 января 2025, 23:14ВЫГРУЗКА DLL
Почему не Сервис.ВыгрузитьВнешнююКомпоненту("TableDoc.dll")?
Выгружать то оно выгружает, но подменить не получается, файл занят.
Я с 1sqlte эксперементировал, вроде все ресурсы высвобождаюся, но подменить файл не получается.
Цитата: АЛьФ от 15 января 2025, 09:11Цитата: Злоп от 13 января 2025, 23:14ВЫГРУЗКА DLL
Почему не Сервис.ВыгрузитьВнешнююКомпоненту("TableDoc.dll")?
По недомыслию и от бездуховности, не помнил такой метод. Да и нужды не было в этом (в выгрузке).
РЕЖИМ ОТКРЫТИЯ ФОРМЫ СПИСКА, ПОЛУЧИТЬ В САМОЙ ФОРМЕ...?
некоторые особенности здесь: https://forum.dorex.pro/index.php?topic=182.msg2547#msg2547
.
например,
"Еще одна странность: ОткрытьПодбор("Товары") работает также как ОткрытьПодбор("Справочник.Товары") - хотя в документации такая возможность не описана.
Недокументрированное КонтекстПодбора не подошло, так как это обращение к контексту открытой формы из родительской формы."
ПРОСЬБА ОБСУЖДЕНИЙ ЗДЕСЬ НЕ ПИСАТЬ
при необходимости: ответ со ссылкой на ветку (новую если надо завести) для обсуждения
ПОЛУЧИТЬ ПАРАМЕТРЫ СТРАНИЦЫ ИЗ ОКНА ПЕЧАТНОЙ ФОРМЫ
Перехватили форму окна печатной формы.
Надо вытащить параметры страницы, установленные для этой формы.
Установленные Таб.ПараметрыСтраницы() можно вытащить через tabledoc.dll
ТабМенеджер = СоздатьОбъект("МенеджерТабличногоДокумента");
ТабМенеджер.УстановитьТаблицу(КонтТекущегоОкна);
ПараметрыСтраницы = ТабМенеджер.ПараметрыСтраницы;
ПолеСлева = ПараметрыСтраницы.Left;
ПолеСправа = ПараметрыСтраницы.Right;
ПолеСверху = ПараметрыСтраницы.Top;
ПолеСнизу = ПараметрыСтраницы.Bottom;
Ориентация = ПараметрыСтраницы.Orient;
ИмяПринтера = ПараметрыСтраницы.DefaultPrinter;
ПОЛУЧЕНИЕ ИМЕНИ ИСПОЛНЯЕМОГО КОНТЕКСТА
получение имени функции/процедуры/модуля исполняемого контекста
здесь: https://forum.dorex.pro/index.php?topic=49.msg539#msg539
FORMEX: ГЛОБАЛЬНАЯ ПРОЦЕДУРА ПриАктивацииОкна(Контекст)
В als до 2.05.198 включительно не описана глобальная ПриАктивацииОкна(Контекст), а она есть (аналог локальной)
РЕКВИЗИТ "СТРОКА НЕОГРАНИЧЕННОЙ ДЛИНЫ"
Реквизиты "строка неограниченной длины" у объекта (а также общие реквизиты документов) должны стоять последними в списке реквизитов, см. https://1cpp.ru/forum/YaBB.pl?num=1234264157
ПОЛУЧИТЬ ОПИСАНИЕ ВНЕШНЕЙ ОБРАБОТКИ
ИмяОбъекта = ВРег("Обработка.Загружаемая")+_GetPerformanceCounter();
глСервис.ЗагрузитьВнешнююОбработку(РасположениеФайла(),ИмяОбъекта);
//ОТЛАДКА Текст = глСервис.СписокВсехФорм(); Текст.Показать(ИмяОбъекта);
Описание = глСервис.ПолучитьОписаниеОбъекта(ИмяОбъекта+".ФОРМА");
Сообщить(Описание);
ОСОБЕННОСТИ ПОЛУЧЕНИЯ ОПИСАНИЯ ДЛЯ ОБЪЕКТОВ КОНФИГУРАЦИИ
т.е. например, Описание для объекта конфигурации "Справочник.Номенклатура" или "Документ.РасходнаяНакладная"
Общего рабочего варианта - нет...
ОСОБЕННОСТИ ФИЛЬТРА НА ИТЗ 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
Быстро моргнуть окошком-сообщением при надобности можно так:
Предупреждение("Завершено!",-1); // таймер = -1, предупреждение появится и сразу же закроется (быстрее чем 1 сек)
Графы отбора VS общие реквизиты
Ковычки: а чем графы отбора лучше общих реквизитов ?
Епрст: лежат в отдельной табличке, не пухнет 1sjourn и меньше времени на запись оной.
Ну да, ну да..
Не в отдельной табличке, а в 1scrdoc, там же где и вся подчиненность документов
Так что, что то пухнет и замедляется, что это
Графы не лучше и не хуже общих реквизитов. Они имеют разное назначение
ФОРМАТЫ ЗАДАНИЯ ДАТ
константы типа "Дата" и преобразование дат функцией Дата() корректно отрабатывают если в качестве разделителей заданы любые знаки, отличные от цифр.
'31/12/2025'
'31-12-2025'
'31+12+2025'
'31.12.2025'
'31ю12ю2025'
- все это нормально типизируется в дату
все указанные выше значения нормально отрабатывают и функцией Дата(), например, Дата("31ю12ю2025") вполне корректно отработает...
ПРАВИЛЬНАЯ ПРОВЕРКА НАЛИЧИЯ КАТАЛОГА
так делать не надо:
Если ФС.СуществуетФайл(КакойТоКаталог)=0 Тогда
это будет работать правильно кроме единственного варианта, когда каталог - корень диска, типа D:\
делать надо так:
Если ФС.СуществуетФайл(КакойТоКаталог+"NUL")=0 Тогда
это будет работать правильно везде
РАСПАКОВЩИК СТАНДАРТНЫХ УСТАНОВОЧНЫХ x16 ПАКЕТОВ 1С 7.7
https://dml.compkaluga.ru/forum/index.php?showtopic=54199
https://infostart.ru/1c/tools/122516/
ПОДМЕНИТЬ ШТАТНЫЙ ВЫБОР ПЕРИОДА В ЖУРНАЛАХ ДОКУМЕНТОВ
Используем Formex, в ГМ делаем вставку в предопределенную процедуру.
Процедура ПриПолученииКомандыГлавнымОкном(Команда, НулевойПараметр, ФСО)
Если Команда = 32881 Тогда // нажата на тулбаре журнала кнопка выбора периода журнала
КонтекстЖурнала = ""; глСервис.АктивныйКонтекст(КонтекстЖурнала);
ДатаН = КонтекстЖурнала.НачалоИнтервала();
ДатаК = КонтекстЖурнала.КонецИнтервала();
глВвестиПериод(ДатаН,ДатаК); // здесь вызываем модально СВОЮ красивую обработку выбора периода
КонтекстЖурнала.УстановитьИнтервал(ДатаН,ДатаК);
ФСО = 0;
Возврат;
КонецЕсли;
КонецПроцедуры // ПриПолученииКомандыГлавнымОкном()
ПОДМЕНИТЬ ШТАТНЫЙ ВЫБОР ПЕРИОДА В ЖУРНАЛАХ ДОКУМЕНТОВ, продолжение
Ветка обсуждения (https://forum.dorex.pro/index.php?topic=260.0)
Поправочка.
Описанное выше не работает в системных предопределенных журналах, которых нет в перечне журналов документов в дереве метаданных, но их можно выбрать из перечня журналов, там они идентифицируются как "(Прочие)" и "(Полный)". Формы этих журналов формексом не отлавливаются (не имеют собственного контекста?), поэтому код надо вот так (чтобы не упал по ошибке на КонтекстЖурнала.НачалоИнтервала()):
Процедура ПриПолученииКомандыГлавнымОкном(Команда, НулевойПараметр, ФСО)
Если Команда = 32881 Тогда
КонтекстЖурнала = ""; глСервис.АктивныйКонтекст(КонтекстЖурнала);
Если ПустоеЗначение(КонтекстЖурнала) = 1 Тогда Возврат; КонецЕсли; // тут штатный выбор периода
ДатаН = КонтекстЖурнала.НачалоИнтервала();
ДатаК = КонтекстЖурнала.КонецИнтервала();
глВвестиПериод(ДатаН,ДатаК); // здесь вызываем модально СВОЮ обработку выбора периода
КонтекстЖурнала.УстановитьИнтервал(ДатаН,ДатаК);
ФСО = 0;
Возврат;
КонецЕсли;
КонецПроцедуры // ПриПолученииКомандыГлавнымОкном()
ТЕКСТ НА КНОПКЕ В НЕСКОЛЬКО СТРОК
Была такая тема: https://1cpp.ru/forum/YaBB.pl?num=1222937598 (https://1cpp.ru/forum/YaBB.pl?num=1222937598)
Процедура ПослеОткрытия()
ФормаРасш = СоздатьОбъект("РасширениеФормы");
Атр = ФормаРасш.ПолучитьАтрибут("кн1"); // ну или что-то там с именем кнопки.
Атр.ИзменитьСтиль(11,8192+256);//выравнивание влево
Атр.ИзменитьСтиль(11,8192);//выравнивание по центру
Атр.Заголовок = "тест1"+РазделительСтрок+"тест2";
КонецПроцедуры // ПослеОткрытия()