Упустим тот момент, что в коде "Объект.Подразделения" может быть СписокЗначений, потому что в конце "я" - множ. число. Дальше это не совсем важно, но стоит учесть... И дальше, что он делает...
В при СозданииНаСервере получает нужные Параметры в Параметр, а в ПриОткрытии перезаписывает этот реквизит "Параметр" настройками Компоновщика, т.е. "затирает". Ну по сути - затирает пустым значением Компоновщика, если там Подразделение не Предопределено. Надеюсь, просветил. Если эта тема таки нераскрыта - продолжу рассказ, т.к. как раз такой темой занимаюсь (терпеть не могу отчеты в документах, но так надо).
AnryMc @ 10.06.24, 13:26
, Я проверял многие УДАЛИТЬ объекты конфигурации, так они там просто "торчат" - на них даже ссылок нет нигде. Сейчас кастрирую УПП 1.3, оставил только нужный функционал - файл .cf стал 60 Мб из 365 Мб. Это для мобилок в основном. Перевел основной режим конфигурации в управляемое приложение - исчез глобальный модуль "Модуль обычного приложения". Но по ссылке открывается и отрабатывает.
//Структура отбора ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(СписокВРаботе); мОтбор = ПостроительЗапроса.Отбор; Для каждого Колонка из ЭлементыФормы.ДокументСписокВРаботе.Колонки Цикл Если Колонка.Видимость Тогда мОтбор.Добавить(Колонка.Имя); КонецЕсли; КонецЦикла;
Где ФормаО.ТаблицаОтбор = Тип Отбор; Дальше разберетесь, думаю. Прикольно, что можно использовать методы ПостроителяЗапроса, немного добавляя (убавляя) параметры - еще не пробовал, но наверное легче чем вручную формировать условия для своего запроса.
nik389 @ Сегодня, 18:01
, Я намагаюся створити функціонал отбору для ТЗ, такий як типовий для звичайних форм списків документів, тощо. Без зайвого навантаження типу СКД и т.і. Просто і лаконічно.
Ну ось є перші результати.
//Структура отбора ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(СписокВРаботе); Для каждого Колонка из ЭлементыФормы.ДокументСписокВРаботе.Колонки Цикл Если Колонка.Видимость Тогда Элем = мОтбор.Добавить(Колонка.Имя); КонецЕсли; КонецЦикла;
Отримав повноцінну структуру усіх можливих отборів по ТЗ. По видимих колонках, бо буду обробляти також накопичуваний відбір "по значенню у поточній колонці".
nik389 @ Сегодня, 16:39
, Щось подібне до стандартної форми настройки відборів для звичайних форм. ПостроительЗапроса - 10% ПостроительОтчета - 50% СКД - 120% Навіщо зайвий функціонал, тормоза і оперативна пам'ять для простої задачі? Тим більше, що наступне використовує попереднє. А досить лише ПостроительЗапроса.
AnryMc @ Сегодня, 15:31
, Як виконати - я знаю. Як показати користувачу налаштування цих отборів? Щоб у формі не було таблиці ПостроительОтчета.Отбор на все хлебало, а відкривалася окрема форма тиму стандартного налаштування отборів.
Для Каждого СтрокаКоллекции Из ТаблицаОтборов Цикл
Як налаштувати цю саму ТаблицаОтборов? Ага, і якщо це не ПостроительОтчета, а ПостроительЗапроса? У ПостроителяЗапроса також є Відбір. Навіщо мені "паровозом куча непотрібного функціоналу?
alex_shkut @ Сегодня, 15:59
, Якраз завдання в тому, щоб дати можливість користувачу вібрати ці самі отбори. Множинні.
Власне завдання: Створити множинний відбір для ТЗ як у списках документів і т.і. Є форма з ТЗ. Форма додана до Документу. Сам відбір доступний у ПострительЗапроса - все гарно. Як створити та відобразити форму налаштування цих відборів як у стандартних списках типу: Використання, Поле, Тип порівняння, значення? В мене проблема сформувати та показати цю форму. Які є ідеї?
alex_shkut @ Сегодня, 15:24
, У мене є ідея винести цю форму у Обробку і там це трохи простіше. Користувач взагалі нічого не помітить, бо явного зв'язку з Документом немає ніякого.
alex_shkut @ Сегодня, 15:27
, І прошу мене не хаяти - "це папереднікі", розгрібаю г...
burza @ 08.03.24, 12:17
, Знает: Для ячейки справа от Номенклатура определите имя: ОбластьКартинка, всуньте туда свою картинку. За размеры пока не парьтесь - потом подгоните.
Если НЕ СтрокаИзСписка.Номенклатура.ОсновноеИзображение.Пустая() Тогда ЭтикеткаОбласть.Рисунки.Изображение.Картинка = СтрокаИзСписка.Номенклатура.ОсновноеИзображение.Хранилище.Получить(); Иначе ЭтикеткаОбласть.Рисунки.Изображение.Картинка = мПустаяКартинка; КонецЕсли;
Думаю, разберетесь... В свойствах Картинки на макете ставь Пропорционально.
burza @ 08.03.24, 12:17
, Я бы не парился с СКД ради такого отчета, но все же:
Вы растягиваете область изображения на всю высоту отчета, а надо создавать отдельную область для каждой строки. Там еще будут приколы, но мы разберемся...
Slon747 @ 15.03.24, 16:49
, В напрямку LibreOffice не дивилися? Я усе через нього роблю.
Процедура ЗагрузитьИзФайла() ТипФайла = 0; //0-файл не прочитан,1- для МС Экселя,2- для ОпенОфиса Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Фильтр = "Табличный документ(*.xls)|*.xls|Табличный документ(*.xlsx)|*.xlsx"; Если не Диалог.Выбрать() Тогда Возврат; КонецЕсли; Если ДанныеФайла.Количество()>0 Тогда Режим = РежимДиалогаВопрос.ДаНет; Текст = "ru = ""Табличная часть будет очищена, продолжить?"";" + " uk = ""Таблична частина буде очищена, продовжити?"""; Ответ = Вопрос(НСтр(Текст), Режим, 0); КонецЕсли; Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; ТабЗн = Новый ТаблицаЗначений; Попытка ТабЗн.Прочитать(Диалог.ПолноеИмяФайла); ТипФайла = 1; Исключение КонецПопытки; Если ТипФайла=0 Тогда Попытка ТабЗн=ОО.ЗагрузитьТЗизФайла(Диалог.ПолноеИмяФайла,1); ТипФайла = 2; Исключение Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не найдено подходящего приложения для загрузки файла"+Символы.ПС+ОписаниеОшибки(); Сообщение.Сообщить(); Возврат; КонецПопытки; КонецЕсли; ДанныеФайла.Очистить(); Шкут_Общий.ДополнитьКолонкиТаблицыЗначений(ДанныеФайла,ТабЗн); ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТабЗн,ДанныеФайла); ДанныеФайла.Колонки.Добавить("Проект",Новый ОписаниеТипов("СправочникСсылка.Проекты")); ДанныеФайла.Колонки.Добавить("Счет",Новый ОписаниеТипов("ДокументСсылка.СчетНаОплатуПокупателю")); ДанныеФайла.Колонки.Добавить("Корр",Новый ОписаниеТипов("ДокументСсылка.КорректировкаДолга"));
ЭлементыФормы.ДанныеФайла.СоздатьКолонки(); Для Каждого Колонка из ЭлементыФормы.ДанныеФайла.Колонки Цикл Колонка.Ширина = 4; КонецЦикла;
КонецПроцедуры
Процедура КоманднаяПанель2ВосстановитьДаты(Кнопка) Колонка = ЭлементыФормы.ДанныеФайла.ТекущаяКолонка; Для Каждого Строка из ДанныеФайла Цикл Если ЗначениеЗаполнено(Строка[Колонка.Имя]) Тогда Попытка Строка[Колонка.Имя] = Дата("19000101")+((Строка[Колонка.Имя]-2)*24*60*60); Исключение КонецПопытки; КонецЕсли; КонецЦикла; КонецПроцедуры
Функция ЗагрузитьТЗизФайла(ПутьКФайлу,текЛист=1,Знач endCol=0) Экспорт
//OpenOffice Calc// Попытка ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); Исключение Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice\LibreOffice не установлена на данном компьютере!"); Возврат Неопределено; КонецПопытки;
Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop"); Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); Свойства.Name = "AsTemplate"; Свойства.Value = Истина; Args = Новый COMSafeArray("VT_VARIANT", 2); Args.SetValue(0, Свойства); Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); Свойства1.Name = "Hidden"; Свойства1.Value = Истина; Args.SetValue(1,Свойства1); Попытка FileProvider=ServiceManager.createInstance("com.sun.star.ucb.FileContentProvider"); URL=FileProvider.getFileURLFromSystemPath("",ПутьКФайлу); Document = Desktop.LoadComponentFromURL(URL, "_blank", 0, Args); Исключение ServiceManager = Неопределено; КонецПопытки; Sheets = Document.getSheets(); Если Sheets.Count<текЛист Тогда Сообщить("Количество страниц в файле меньше, чем запрошено"); ServiceManager = Неопределено; Возврат Неопределено; КонецЕсли; Sheet = Sheets.getByIndex(текЛист-1); Курсор = Sheet.createCursor(); Курсор.gotoEndOfUsedArea(Истина); endCol = Курсор.Columns.Count - 1; endRow = Курсор.Rows.Count - 1; begCol = 0; begRow = 0; нКол = 0; локТабЗнач = Новый ТаблицаЗначений; локТабЗнач.Колонки.Очистить(); КС = Новый КвалификаторыСтроки(); Массив = Новый Массив; Массив.Добавить(Тип("Строка")); ОписаниеТиповСтрока = Новый ОписаниеТипов(Массив, , КС); Пока нКол <= endCol Цикл ИмяКол = "К"+Строка(нкол+1); локТабЗнач.Колонки.Добавить(ИмяКол,ОписаниеТиповСтрока); нКол = нКол + 1; КонецЦикла; Range = Sheet.getCellRangeByPosition(begCol, begRow, endCol, endRow); МассивКом = Новый COMSafeArray("VT_VARIANT", Range.Columns.Count, Range.Rows.Count); МассивКом = Range.getDataArray(); тмпПростойМассив = МассивКом.Выгрузить(); Для каждого массив из тмпПростойМассив Цикл ит = 0; НовСтрока = локТабЗНач.Добавить(); Для каждого ЭлементМассива из массив цикл НовСтрока[ит] = ЭлементМассива; ит = ит + 1; КонецЦикла; КонецЦикла; Document.Close(True); Document = Неопределено;
alex_shkut @ Сегодня, 11:46
, Если на текущий момент документ не открыт (нету ЭтотОбъект) то и печатную форму получить нельзя. Макет. Для прочих состояний используем общие макеты, которые можно получать независимо от форм.
AnryMc @ Сегодня, 10:34
, Не, это толстый клиент. В списке добавлена колонка - на Отправку. Все помеченные надо распечатать водителю в наряд и сменить статус - "В доставке". Так вот возникла проблема получения макета, который доступен только через Объект. Решено Общим макетом.
alex_shkut @ Сегодня, 10:49
, Для новичков - получить макет печатной формы документа невозможно ВНЕ открытого Объекта. Если нужно что-то распечатать когда документ не открыт - используйте Общий макет (произвольный) и туда пихайте все что угодно, на ваш вкус.
volodya1122 @ Сегодня, 9:32
, В модуле списка документов. Я уже примерно понял - нельзя получить макет вне Объекта. Нужно вынести его в общие макеты и оттуда вызывать. Для таких случаев, когда Объекта нет нужно использовать Общие макеты. Щас проверю и отпишусь.
А вот так заработало: Макет = ПолучитьОбщийМакет("НарядНаПеревозку");
До этого у меня не было таких задач, где из списка документов необходимо печатать что нибудь. Тут встала задача пометить в списке документы, распечатать этот список и перенести документы в другое состояние. Ну вроде решилось )
Уже 15 лет работаю с 1С и тут туплю. Переменная не определена (ЭтотОбъект) Процедура или функция с указанным именем не определена (ПолучитьМакет) ЧЯДНТ.
ТекстЗапроса = "ВЫБРАТЬ | м_ТранспортныеСредства.Ссылка КАК Ссылка, | ВодителиВТССрезПоследних.Водитель КАК Водитель, | ТехобслуживаниеТССрезПоследних.ДатаТО КАК ДатаТО, | м_ТранспортныеСредства.ОсновноеТопливо КАК ОсновноеТопливо, | м_ТранспортныеСредства.ДополнительноеТопливо КАК ДополнительноеТопливо, | м_ТранспортныеСредства.Грузоподъемность КАК Грузоподъемность, | ЗаправкиТС.Количество КАК ТопливоКоличество, | ЗаправкиТС.Сумма КАК ТопливоСумма |ИЗ | Справочник.м_ТранспортныеСредства КАК м_ТранспортныеСредства | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТехобслуживаниеТС.СрезПоследних КАК ТехобслуживаниеТССрезПоследних | ПО м_ТранспортныеСредства.Ссылка = ТехобслуживаниеТССрезПоследних.ТранспортноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВодителиВТС.СрезПоследних КАК ВодителиВТССрезПоследних | ПО м_ТранспортныеСредства.Ссылка = ВодителиВТССрезПоследних.ТранспортноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗаправкиТС КАК ЗаправкиТС | ПО м_ТранспортныеСредства.Ссылка = ЗаправкиТС.ТранспортноеСредство |ГДЕ | НЕ м_ТранспортныеСредства.ЭтоГруппа | И НЕ м_ТранспортныеСредства.ПометкаУдаления // | И ЗаправкиТС.Период МЕЖДУ &НачПериод И &КонПериод | |УПОРЯДОЧИТЬ ПО | м_ТранспортныеСредства.Наименование";
Суть питання - якщо я розкоментую відбір по періоду, таблиця пуста. Що я роблю не так?
alex_shkut @ Сегодня, 9:16
, Переробив запит щоб сумувалася кількість і сума, але результат той самий - таблиця пуста.
Vofka @ 03.03.23, 10:34
, Я не він, але у мене там також бан давно. Інколи, дуже рідко захожу на цей форум, це коли вже зовсім нема думок. @Vofka, дуже тобі дякую за цей форум.
alex_shkut @ Сегодня, 16:00
, Я уже сам раскопал. Для колонки устанавливаем ОтображатьИтогиВПодвале = ложь (Чтобы автоматом не пересчитывало сумму) и пишем в Подвал.Текст нужной колонки то, что нужно.
Constantus @ Сегодня, 13:49
, Можно попробовать Если 000002222 ТОГДА 000001111 Если 000001111 ТОГДА 000001111 То есть подменяем все ненужное нужным. Но что-то такой подход настораживает, если работа не разовая. Интуиция подсказывает, что все равно расшифровка покажет регистраторы где 000001111. Кликая по Коду мы передаем в запрос Параметр - 000001111. Запрос выполняется правильно.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!