//Структура отбора ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(СписокВРаботе); мОтбор = ПостроительЗапроса.Отбор; Для каждого Колонка из ЭлементыФормы.ДокументСписокВРаботе.Колонки Цикл Если Колонка.Видимость Тогда мОтбор.Добавить(Колонка.Имя); КонецЕсли; КонецЦикла;
Где ФормаО.ТаблицаОтбор = Тип Отбор; Дальше разберетесь, думаю. Прикольно, что можно использовать методы ПостроителяЗапроса, немного добавляя (убавляя) параметры - еще не пробовал, но наверное легче чем вручную формировать условия для своего запроса.
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. Запрос выполняется правильно.
В итоге, задача решилась копированием кассовой книги из конфигурации Бухгалтерия с небольшим допиливанием под УПП. И в Бухгалтерии таки используется дополнительный регистр, но он называется - ПоследниеНомераКассовойКниги Логика та же, что я писал раньше.
Constantus @ Вчера, 10:22
, Если посмотреть на решение, то я бы реализовал все это по принципу регистра Контактная информация. Один справочник с видами размеров и регистр со значениями. Номенклатура, ВидРазмера, ЗначениеРазмера. Потому как замучаешься справочники создавать )
А по вопросу - чуток не понял, что пытаемся получить.
Schlesinger @ Вчера, 16:36
, Для начала надо понять, конфигурация типовая или переписаная. Кто-то мог "подправить" роль. Или демобаза очень старая и роль существенно изменена. Или... включена еще одна роль.
Насколько я помню, роль Бухгалтер не позволяет только регламентные операции по закрытию периода. Остальное - можно.
Почти все получилось ))), работает на любой зафиксеынй в регистре период. Если записи на дату нет - книга не формируется. Поправим ) Вернемся к регистру НачальныеНомера, и посчитаем.... бред. Надо поформировать КК и позаписывать номера листов, само устаканится...
А вот и вылезли нюансы. Если сформировать КК за год - нумерация "ползет". Надо контролировать переход через сутки, и записывать в регистр новые номера листов.
В итоге многих размышлений пришло решение - поработать над данным вопросом, он не так-то уж и прост. Много вариаций тут есть. Будет готовое решение - продолжим тему. Но решить это надо по-любому.
И очень даже интересно, почему в такой конфе как УПП это до сих пор не разрешено?
Вот один из моментов в коде ))) МенеджерЗаписи.Период = ДатаКон+1; //Попытка записать Завтра ), а юзер сфрмировал концом года //Жопа в том, что данный документ намного раньше ДатаКон - его надо фиксить Действительно, последний документ в кассе не концом года ) Вот как-то так мыслим...
alex_shkut @ Сегодня, 20:03
, И тут все портит Функция СформироватьСтруктуруНомеровЛистов Она выбирает все периоды движений по Датам, и последовательно присваивает номера листов, не учитывая их количество за день. Просто тупо количество дней работы кассы. Один лист за день - будем бороться...
Цитата(alex_shkut @ 31.07.19, 21:26)
И тут все портит Функция СформироватьСтруктуруНомеровЛистов Она выбирает все периоды движений по Датам, и последовательно присваивает номера листов, не учитывая их количество за день. Просто тупо количество дней работы кассы. Один лист за день - будем бороться...
По большому счету эта функция теперь совсем не нужна - мы будем опираться на "новый" регистр, где в любое время можем поменять нумерацию листов. Фууухххх, тяжко. Почему УПП-шники не уделили этому внимания? Кассовая дисциплина, однако!
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!