|
Разделить строку на несколько полей печатной формы | ☑ | ||
---|---|---|---|---|
0
Mahazbek
22.03.19
✎
09:24
|
Здравствуйте! Я совсем новичок и это мое первое сообщение на форуме (свист, аплодисменты). Рад присоединиться к команде и всех приветствую!
Недавно из сисадмина я перешел в начинающего программиста 1С, так уж пришлось по работе. С темой 1С был знаком мало, вот разбираюсь потихоньку. Есть задача - написать печатную форму, в которую берутся данные из документа ПоступлениеТоваровУслуг. В форме есть поля с параметрами, которые заполняются данными, полученными в результате запроса: Макет.Параметры.Номер = ВыборкаДетальныеЗаписи.Номер; Макет.Параметры.Дата = Формат(ВыборкаДетальныеЗаписи.Дата, "ДФ=dd.MM.yyyy"); Макет.Параметры.Контрагент = ВыборкаДетальныеЗаписи.Контрагент; Макет.Параметры.Комментарий = ВыборкаДетальныеЗаписи.Комментарий; <-- Вот это проблема В поля подставляются значения, тут все ок. Однако есть поле "Комментарий", строка с текстом. Текст выглядит примерно так: Текст Такой# Текст Другой# Текст Третий В одной строке текст разделен решеткой для того, чтобы выводить эти данные в три поля печатной формы, в каждом поле разный текст, пример: Макет печатной формы Поле 1 - Текст Такой Поле 2 - Текст Другой Поле 3 - Текст Третий Все из одной строки. Прошу помочь, если кому не сложно, подсказать каким путем это делается, так как еще не знаю даже какие инструменты есть в платформе. Заранее благодарю всех! |
|||
1
Web00001
22.03.19
✎
09:32
|
Хорошо бы указать конфигурацию которую вы используете
в типовых конфигурациях обычно есть такая функция: СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок Она вернет массив из трех элементов В итоге это будет выглядет так: Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаКомментарий, "#"); Макет.Параметры.Поле1 = Массив[0]; Макет.Параметры.Поле2 = Массив[1]; Макет.Параметры.Поле3 = Массив[2]; |
|||
2
ДенисЧ
22.03.19
✎
09:32
|
СтрРазделить() например
|
|||
3
Web00001
22.03.19
✎
09:34
|
(0)Про работу с макетами я писал вот здесь http://wiki-1c.ru/doku.php/1c:общие:табличный_документ
|
|||
4
Mahazbek
22.03.19
✎
09:35
|
Спасибо за оперативность! 1С:Предприятие 8.3 (8.3.13.1644) УСХП 1.3
|
|||
5
Web00001
22.03.19
✎
09:44
|
>>УСХП 1.3
Тогда глобальный поиск РазложитьСтрокуВМассивПодстрок я не знаю где она лежит в УСХП >>Рад присоединиться к команде и всех приветствую! Примите мои искренние соболезнования |
|||
6
Mahazbek
22.03.19
✎
11:03
|
Не осилил пока массивы )
Зато нашлось другое решение: Комментарий = ВыборкаДетальныеЗаписи.Комментарий; Инд1 = Найти(Комментарий, "#"); Строка1 = СокрЛП(Лев(Комментарий, Инд1 - 1)); ОстСтроки = СокрЛП(Сред(Комментарий, Инд1 + 1)); Инд2 = Найти(ОстСтроки, "#"); Строка2 = СокрЛП(Лев(ОстСтроки, Инд2 - 1)); Строка3 = СокрЛП(Сред(ОстСтроки, Инд2 + 1)); Макет.Параметры.Комментарий1 = Строка1; Макет.Параметры.Комментарий2 = Строка2; Макет.Параметры.Комментарий3 = Строка3; |
|||
7
1С Ассенизатор ПРОФ
22.03.19
✎
11:36
|
(6) Ответили же выше.
"в типовых конфигурациях обычно есть такая функция: СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок" Поищите глобальным поиском по "РазложитьСтрокуВМассивПодстрок". Не нужно велосипед изобретать. |
|||
8
Mahazbek
22.03.19
✎
16:35
|
(7) Я это сделал, начался длительный поиск, в результате - тысяча строк, содержащими "РазложитьСтрокуВМассивПодстрок". Просто не понял, что с этим делать.
|
|||
9
Garykom
гуру
22.03.19
✎
16:44
|
(6) Зачем так долго через операции с подстроками?
Когда можно проще через СтрРазделить() на новых платформах без режима совместимости или СтрЗаменить() и СтрПолучитьСтроку() на старых платформах 1С. |
|||
10
FIXXXL
22.03.19
✎
16:46
|
(8) скопировать полный вызов и заменить параметр функции на свой
|
|||
11
ptiz
22.03.19
✎
16:52
|
(8) В (1) уже дан почти готовый код, не надо никаких глобальных поисков.
|
|||
12
Mahazbek
26.03.19
✎
14:44
|
Спасибо вам, разобрался с массивом из решения (1) Web00001. Через СокрЛП работает коряво, а с массивом все гладко )). Сейчас разбираюсь, почему макет открывается если использовать обработку через Файл - открыть обработку, затем выбрать документ и не открывается, если привязать ее к документу. Ошибка "Недостаточно фактических параметров".
|
|||
13
Mahazbek
26.03.19
✎
14:47
|
Может стоит выложить код, когда все будет работать? Вдруг у кого такая же задача и он тоже новичок? ) Ему поможет
|
|||
14
Mahazbek
26.03.19
✎
15:54
|
Собственно, вот код:
Функция Печать(Ссылка) Экспорт ИмяМакета = "Макет"; ТабДокумент = Новый ТабличныйДокумент; Макет = ПолучитьМакет(ИмяМакета); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПоступлениеТоваровУслуг.Ссылка, | ПоступлениеТоваровУслуг.Номер, | ПоступлениеТоваровУслуг.Дата, | ПоступлениеТоваровУслуг.Контрагент, | ПоступлениеТоваровУслуг.Комментарий, | ПоступлениеТоваровУслуг.Товары.( | Количество | ) |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Макет.Параметры.Номер = ВыборкаДетальныеЗаписи.Номер; Макет.Параметры.Дата = Формат(ВыборкаДетальныеЗаписи.Дата, "ДФ=dd.MM.yyyy"); Макет.Параметры.Контрагент = ВыборкаДетальныеЗаписи.Контрагент; СтрокаКомментарий = ВыборкаДетальныеЗаписи.Комментарий; Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаКомментарий, "#"); Макет.Параметры.Поле1 = Массив[0]; Макет.Параметры.Поле2 = Массив[1]; Макет.Параметры.Поле3 = Массив[2]; ИтогКол = Ссылка.Товары.Итог("Количество"); Макет.Параметры.Количество = ИтогКол; ; КонецЦикла; ТабДокумент.Вывести(Макет); ТабДокумент.АвтоМасштаб = Истина; ТабДокумент.Показать(); КонецФункции |
|||
15
Mahazbek
26.03.19
✎
15:58
|
Не удалось сформировать внешнюю печатную форму! Недостаточно фактических параметров
|
|||
16
edem911
26.03.19
✎
16:02
|
(15)После подключения? есть реквизит СсылкаНаОбъект?
|
|||
17
edem911
26.03.19
✎
16:04
|
(16) Если есть реквизит СсылкаНаОбъект, должно быть просто Печать() Экспорт, а вместо Ссылки использую СсылкаНаОбъект
|
|||
18
edem911
26.03.19
✎
16:04
|
||||
19
Mahazbek
26.03.19
✎
16:32
|
Спасибо, помогла замена ссылки на СсылкаНаОбъект!
Функция Печать() Экспорт ИмяМакета = "Макет"; ТабДокумент = Новый ТабличныйДокумент; Макет = ПолучитьМакет(ИмяМакета); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПоступлениеТоваровУслуг.Ссылка, | ПоступлениеТоваровУслуг.Номер, | ПоступлениеТоваровУслуг.Дата, | ПоступлениеТоваровУслуг.Контрагент, | ПоступлениеТоваровУслуг.Комментарий, | ВложенныйЗапрос.Количество |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество, | ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка | ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары | ГДЕ | ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка | | СГРУППИРОВАТЬ ПО | ПоступлениеТоваровУслугТовары.Ссылка) КАК ВложенныйЗапрос | ПО ПоступлениеТоваровУслуг.Ссылка = ВложенныйЗапрос.Ссылка |ГДЕ | ПоступлениеТоваровУслуг.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Макет.Параметры.Номер = ВыборкаДетальныеЗаписи.Номер; Макет.Параметры.Дата = Формат(ВыборкаДетальныеЗаписи.Дата, "ДФ=dd.MM.yyyy"); Макет.Параметры.Контрагент = ВыборкаДетальныеЗаписи.Контрагент; СтрокаКомментарий = ВыборкаДетальныеЗаписи.Комментарий; Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаКомментарий, "#"); Макет.Параметры.Поле1 = Массив[0]; Макет.Параметры.Поле2 = Массив[1]; Макет.Параметры.Поле3 = Массив[2]; ИтогКол = ВыборкаДетальныеЗаписи.Количество;//СсылкаНаОбъект.Товары.Итог("Количество"); Макет.Параметры.Количество = ИтогКол; КонецЦикла; ТабДокумент.Вывести(Макет); ТабДокумент.АвтоМасштаб = Истина; ТабДокумент.Показать(); КонецФункции |
|||
20
Mahazbek
26.03.19
✎
16:38
|
Здесь как-то можно сообщения редактировать, чтобы не плодить?
|
|||
21
edem911
26.03.19
✎
17:46
|
(20) Нет, что написано на мисте(пером) не вырубишь топором)
|
|||
22
Mahazbek
27.03.19
✎
10:49
|
Обнаружил, что форма не открывается, если комментарий не содержит решеток, либо пустой. Недостаточно фактических параметров.
|
|||
23
Ёпрст
27.03.19
✎
11:04
|
(22)
Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаКомментарий, "#"); Для к = 1 ПО Массив.Количество() Цикл Макет.Параметры["Поле"+к] = Массив[к-1]; КонецЦикла; |
|||
24
Mahazbek
27.03.19
✎
11:32
|
(23) Вау, спасибо, помогло! Пытаюсь понять, как это работает )
|
|||
25
Mahazbek
08.04.19
✎
08:39
|
ИтогКол = ВыборкаДетальныеЗаписи.Количество;
Макет.Параметры.Количество = ИтогКол; Как-то можно всегда выводить количество в килограммах? В документах встречаются тонны и штуки. |
|||
26
ДенисЧ
08.04.19
✎
08:47
|
(25) Так возьми единицу и пересчитай по коэффицентам...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |