Zaval @ Сегодня, 21:28 , Ув. Завал, спасибо за ответ. Но в моём вопросе также звучала просьба о помощи подсказать альтернативное решение данной задачи, если кто знает.
Дело в том, что мне трудно сформулировать саму задачу.... Хотя, действительно: "у элемента справочника А в ТЧ НЕ могут содержаться как строки, удовлетворяющие отбору, так и не удовлетворяющие".
Результат, который мне нужно (пример): у элемента справочника значения в ТЧ1: -ЗНЧ1 -ЗНЧ2 значения в ТЧ2: -знч1
и при выборе значений табличных полей на форме: ТП1(ЗНЧ1, ЗНЧ2) и ТП2(знч1) = элемент справочника показан. ТП1(ЗНЧ1, ЗНЧ2, ЗНЧ3) и ТП2(знч1) = элемент справочника скрыт. ТП1(ЗНЧ1, ЗНЧ2) и ТП2() = элемент справочника показан. ТП1(ЗНЧ2) и ТП2(знч1) = элемент справочника показан.
Пока данный функционал работает через задний проход:
СписокДляОтбора=Новый СписокЗначений; //Сообщить(ВыборкаДетальныеЗаписи.Количество()); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл СписокДляОтбора.Добавить(ВыборкаДетальныеЗаписи.Ссылка); КонецЦикла;
////////////////////////////////////////////////////////////////////////////////////////// Для Каждого СтрокаСферы Из СферыПримененияОтбор Цикл Счетчик = СписокДляОтбора.Количество() - 1; Пока Счетчик >= 0 Цикл ОбъектСпр=СписокДляОтбора[Счетчик].Значение.ПолучитьОбъект(); Если ОбъектСпр.СферыПрименения.Найти(СтрокаСферы.Значение, "Сфера")=Неопределено Тогда СписокДляОтбора.Удалить(Счетчик); КонецЕсли; Счетчик = Счетчик - 1; КонецЦикла; КонецЦикла;
Для Каждого СтрокаХарактеристики Из ТоварХарактеристикаОтбор Цикл Счетчик = СписокДляОтбора.Количество() - 1; Пока Счетчик >= 0 Цикл ОбъектСпр=СписокДляОтбора[Счетчик].Значение.ПолучитьОбъект(); Если ОбъектСпр.ХарактеристикаТовара.Найти(СтрокаХарактеристики.Значение, "Характеристика")=Неопределено Тогда СписокДляОтбора.Удалить(Счетчик); КонецЕсли; Счетчик = Счетчик - 1; КонецЦикла; КонецЦикла;
Добрый день! Помогите, пожалуйста, решить проблему. Возникла проблема, при реализации отбора списка справочника по ТЧ элементов, используя несколько табличных полей на обычной форме списка.
Более-менее вышел на результат, используя следующий код:
Процедура ОтборСправочникСписок()
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СистемыОкраски.Ссылка КАК Ссылка |ИЗ | Справочник.СистемыОкраски КАК СистемыОкраски |ГДЕ | СистемыОкраски.СферыПрименения.Сфера В(&Сфера) | И СистемыОкраски.ХарактеристикаТовара.Характеристика В(&Характеристика)";
Запрос.УстановитьПараметр("Сфера", СферыПримененияОтбор); //ТП на форме Запрос.УстановитьПараметр("Характеристика", ТоварХарактеристикаОтбор); //ТП на форме
СписокДляОтбора=Новый СписокЗначений; //Сообщить(ВыборкаДетальныеЗаписи.Количество()); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл СписокДляОтбора.Добавить(ВыборкаДетальныеЗаписи.Ссылка); КонецЦикла;
Но данный алгоритм: -не удаляет из отбора элементы, в которых нет элемента списка из ТП ("Поры открытые" на скриншоте). -при СферыПримененияОтбор.Количество()=0 и ТоварХарактеристикаОтбор.Количество()=0, удаляет из отбора все элементы и не отображает их в СправочникСписк.
Возможно есть способ попроще, натолкните на мысль, пожалуйста.
Ув., форумчане! Прошу помочь разобраться в следующем: (конфигурация не типовая, приложение обычное)
-из обработки печатаю Каталог товаров: титульный лист с реквизитами компании и тело каталога (шапка - лого компании, подвал - служебная информация, контакты). -титульный лист должен быть на всю страницу А4 (ТабДок.ВсеПоля=0), шапка и подвал должны присутствовать на каждой странице тела каталога (из-за нулевых полей колонтитулы отпадают, использую ПроверитьВывод() и вставляю подвал до разделителя, шапку - после него).
ТабДок = Новый ТабличныйДокумент; Макет = ПолучитьМакет ("КаталогТоваров1");
Если НЕ ТабДок.ПроверитьВывод(массивБлокаСтрок) Тогда ТабДок.Вывести(ОбластьРазделительСТ); ТабДок.Вывести(ОбластьОснСтрПодвал); ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); ТабДок.Вывести(ОбластьОснСтрШапка); НомерСтраницы=НомерСтраницы+1; Иначе ТабДок.Вывести(ОбластьРазделительСТ); КонецЕсли;
КонецЦикла;
ТабДок.Защита=Истина; Табдок.ПолеСлева=0; Табдок.ПолеСправа=0; Табдок.ПолеСверху=0; Табдок.ПолеСнизу=0; Табдок.АвтоМасштаб=Истина; Если ВПДФ=Ложь Тогда ТабДок.ОтображатьСетку = Ложь; ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать("Каталог Товаров для"+Контрагент);
Иначе ВремФайл=ПолучитьИмяВременногоФайла("Каталог Товаров для"+Контрагент+" ("+Формат(ТекущаяДата(),"ДФ=yyyy-MM-dd")+").pdf"); ТабДок.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF); ЗапуститьПриложение(ВремФайл); КонецЕсли;
Вопрос 1. ПроверитьВывод() всё отлично проверяет, НО: в случае, когда страница забивается под завязку и срабатывает автоматический разрыв страницы - ни подвал на предыдущей, ни шапка на следующей не появляются. Каким образом можно словить этот момент?
Вопрос 2. Подвал: одна область, 2 строки. как его разместить в самом низу листа? перепробовал много чего, а в результате: то обе строки после данных о товаре, то первая в конце листа, вторая в начале следующего, плюс шапка пропадает.
Процедура Печать() //............... ТЗ_Цен=Новый ТаблицаЗначений; ТЗ_Цен.Колонки.Добавить("СуммаКГВСмеси"); ТЗ_Цен.Колонки.Добавить("Цена"); РекурсияДереваКомпонентов(ДЗ_Компонентов, 0, ТЗ_Цен); //............... КонецПроцедуры Процедура РекурсияДереваКомпонентов(ДЗ_Компонентов, ИндексВетки, ТЗ, СуммаЦен=0, СуммаКГ=0) КоличествоВеток=ДЗ_Компонентов.Строки.Количество(); //Количество элементов верхнего уровня Для Каждого СтрокаВВетке Из ДЗ_Компонентов.Строки[ИндексВетки].Строки Цикл //Перебор нижнего уровня в рамках одной ветки Сумма=СуммаЦен+СтрокаВВетке.Цена*СтрокаВВетке.Вес; //Суммируем значение цены КГ=СуммаКГ+СтрокаВВетке.Вес; Если КоличествоВеток-1=ИндексВетки Тогда //Если добрались до последней ветки, тогда... Нов=ТЗ.Добавить(); //...добавляем новую запись в таблицу значений Нов.Цена=Сумма; Нов.СуммаКГВСмеси=КГ; Иначе РекурсияДереваКомпонентов(ДЗ_Компонентов, ИндексВетки+1, ТЗ, Сумма, КГ); //...иначе ныряем в следующую ветку с новой Суммой КонецЕсли; КонецЦикла; КонецПроцедуры
Вес в кг, объём в литрах. Для товара1 100кг=72л по цене 200 за кг.
Задача-минимум: перебрать дерево таким образом, чтобы на выходе получить Массив или таблицу значений со всеми возможными комбинациями цен за 1кг из которой можно будет вытянуть максимальное и минимальное значение цены.
Количество кг в смеси: 100+25+40=165
Пример варианотов цен из дерева: 200*100+140*25+230*40=32700 грн/за 165 кг 200*100+130*25+230*40=32450 грн/за 165 кг 200*100+120*25+230*40=32200 грн/за 165 кг
Возможные цены: 32700 /165=198,18 грн за 1 кг смеси 32450 /165=196,67 грн за 1 кг смеси 32200 /165=195,15 грн за 1 кг смеси
Процедура КнопкаВыполнитьНажатие(Кнопка) Если ПроверитьЗаполнение()=Ложь ИЛИ СмесьКТ.Количество()=0 Тогда Сообщить("Ошибка заполнения!"); Возврат; ИначеЕсли Окр(СмесьНМНК.Итог("ПроцентВоВладельце")/СмесьКТ.Количество(), 2)=100 Тогда
//Получение непонятно чего //////////////////////////////////////////////// Объект = Документ.ПолучитьОбъект(); Строка=Объект.ТЧ_СмесиКТ.Добавить(); Строка.СмесьНМНК = Наименование;
Имею ввиду, у документа создать произвольную форму, и разместить там необходимые данные Объекта для работы, тогда передавать данные между формами не нужно.
От этого варианта я отказался ещё на этапе планирования. Дело в том, что мне нужно вызвать одно окно для редактирования одной строки ТЧ_НаборыНоменклатуры и одной или более строк подчинённой ей ТЧ_СоставНаборовНоменклатуры. после этого обновить родительскую форму документа, добавив нужные строки. Мне казалось, дело будет за парой строк кода инициализации формы документа и циклом вставки строк в ТЧ. А нет, судя по всему.
Документ ЗаказПокупателя: -ТЧ_НаборыНоменклатуры, (содержит ссылки на стандартные наборы из справочника и наборные в ручную) -ТЧ_СоставНаборовНоменклатуры (содержит список входящих в набор материалов)
Связь между набором и его составом осуществляется через УникальныйИдентификатор, реквизит ТЧ "ИД". Для того чтобы пользователь составил нестандартный набор, он вызывает обработку по кнопке СоздатьНабор;
Далее в обработке в двух похожих табличных частях (как в документе) создаётся или редактируется набор и по кнопке выполнить необходимо заполнить данными этих ТЧ табличные части документа владельца. Совет и помощь мне нужны на этом этапе. Как в обработке поймать форму открытого документа и начинить его данными из обработки?
На вопрос "почему это нельзя сделать в документе сразу?"; -в обработке пользователь может настраивать смесь, пользуясь большим количеством данных: пропорции, плотности, единицы, цены, остатки и т.д. -вторая табличная часть ТЧ_СоставНаборовНоменклатуры может содержать большое количество строк, а это затрудняет восприятие информации пользователем. Вероятность того, что пользователь ошибётся, нужно свести к нулю.
Добрый день. Устал бороться с поисковиками. Прошу помощи специалистов! Платформа 8.3 (обычное), конф-я самописная.
Суть вопроса. Из документа вызывается форма обработки, в которой настраиваются данные для заполнения ТЧ документа. В обработку могу передать значения реквизитов, а назад, по кнопке выполнить, вернуть обработанные данные в табличную часть не получается. Идей ноль. Направьте хотя бы на верную сторону.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!