И снова здравствуйте!
И снова помогите. Пожалуйста.
Поставила я себе задачу создать "Вид цен " для сигарет. Поскольку идентификатором служат Характеристики, то очень заманчивым показалось вытащить из строкового наименования типа "цена 135" числовое значение. Упёрлась в СКД, естественно. Сначала хотела экспортной функцией из общего модуля отработать. Но данный СКД её никак не хочет есть. Ругается на синтаксическую ошибку. Надо полагать, не может добраться до модуля. А как заставить - так и не разобралась.
Зато есть пречудесный вариант с запросом. Т.е. чудесен он в том смысле, что способен любую таблицу строковых значений перемаслать в числа (спасибо местному гуру ildarovich). Только запрос, прекрасно отрабатывающий в консоли, артачится в СКД. Отдаёт на выходе пустое значение искомого поля. Никак не ругается. Куды копать?
Картинки прикрепила и текст запроса.
---
Запрос в схеме не обращается к БД. Всегда выбирает пустую ссылку на Характеристику.
пустаяссылка.Наименование - это null
---
даже по скринам видно, что в результирующем запросе получилось число. 9 614. Неразрывный пробел наличествует в представлении результата.
---
Запрос отрабатывает безупречно. К нему никаких претензий. Основная беда, как выяснилось, не в способе обращения строки в число, а в том, как получить эту конкретную строку.
---
вот пример отчета на СКД преобразования строки в число.
---
Спасибо огромное! так выручили. Оказывается это столько возможностей дает в СКД!
---
спасибо, помогло!
---
Такой вариант есть
https://youtu.be/HaSM1f44i5Y
---
Не вариант. Выражение ВЫЧИСЛИТЬ возвращает тип "Строка", а мне нужен тип "Число". Если бы преобразование типов стало вдруг возможным стандартными функциями СКД или Запросов, то эта революция прогремела бы так, что никого бы не миновала.))) Увы.
Всё-таки интересно, почему не работает прекрасный запрос в СКД?
---
вычислить("10") вернёт число 10 :-)
---
Отладчик говорит, что там строка. Может, у меня запрос не передаёт правильно подстроку? Может, я, вообще, не догоняю?
Наименование характеристики имеет вид "цена 123".
---
Не там использовали Вычислить. Выражение Представления всегда в итоге строка. Это же представление.
Нужно просто добавить вычисляемое поле и там Вычислить()
Во вложении пример
---
Так работает. Вставлю свои 5 копеек. С целыми числами - работает правильно. Но если с дробными: В запросе должны получаться данные с разделителем дробной части только точка. Если в данных используется запятая - будет выдавать синтаксическую ошибку.
---
Запрос в схеме не обращается к БД. Всегда выбирает пустую ссылку на Характеристику.
пустаяссылка.Наименование - это null
---
Почему же? Он обращается к значению, которое получает в процессе формирования. По логике. Заполняет же он поля именно так. Или нет?
---
Кажется, я чего-то главного не понимаю... Возможно, кто-то сможет (захочет объяснить). Если поле Характеристика является пустой ссылкой (а это, действительно, так), то потом оно заполняется либо выбором вручную, либо из документа-основания. И получает конкретное значение. Каким образом в этом процессе участвует СКД? И как можно передать это конкретное значение поля в другое поле той же СКД? Ведь, судя по всему, все основные поля заполняются как бы одновременно.
Тут мозг и ломается. Потому что я уже научила данную СКД обращаться к функции в модуле. Как же передать конкретное значение поля Характеристика куда бы то ни было? Т.е. как это значение получить?
---
Кажется, я чего-то главного не понимаю... Возможно, кто-то сможет (захочет объяснить). Если поле Характеристика является пустой ссылкой (а это, действительно, так), то потом оно заполняется либо выбором вручную, либо из документа-основания.
Это как же оно заполняется?
Да, добавили возможность использовать отбор, но отбор накладывается на получаемые данные. Какой бы отбор не накладывали на единственное значение поля, которое содержит пустую ссылку, то ничего не отработает, так как выбирать не из чего.
---
Так точно. Похоже, я переоценила свои возможности при постановке себе задачи. Сначала следовало бы пойти... учить матчасть.)))
---
Покажите скрин где вы используете эту схему?
---
Это типовой конфиг 1С:Розницы, данная схема привязана к формированию типового документа УстановкаЦенНоменклатуры и ограничена обязательными полями с обязательными типами значений: номенклатура (ссылка), характеристика (ссылка) и цена (число). В документе можно формировать разные виды цен. "Закупочная" рассчитывается из документа-основания посредстством своей (системной) СКД: "Розничная" просто коэффициентом от закупочной. Моя т.н. "По данным ИБ". У закупочной есть четко привязанный документ-основание "ПоступлениеТоваров", у той, что я пытаюсь вычислить, такой привязки нет. Т.е. Установку цен можно вводить вручную, выбирая номенклатуры и характеристики. В результате конкретные значения этих полей будут следствием выбора.
---
Конечно, я могла бы прицепить эту СКД к документу-основанию. А вот с ручным вводом, на данном этапе, скорей всего не справлюсь.
---
Наверно, тему следовало бы переименовать. Потому что задача преобразования строки в число, в целом, тривиальная. Но полезно то, что тут были предложены несколько способов её решения в узких рамках СКД. Прикладную же задачу формирования цен тоже удалось решить, использовав в качестве шаблона СКД цен поступления и внедрив туда всё-таки бесконечно прекрасный запрос от ildarovich. Всем большое спасибо! В который раз убеждаюсь, что матчасть - наше всё.)))
---
Самое смешное, что вычисляемое поле, которое через Вычислить() переводит строку в число, нельзя потом использовать в группировке в структуре отчета. Хотя если использовать поле в детальных записях, работает.
---
Если я знаю что всегда в наименование будет слово "цена" то в запросе с помощью метода "ПОДСТРОКА(СтрокаЧисел, 6, 6)" оставлю только циферки, если не только слово "цена" возможно воспользуюсь методом ПОДОБНО. Далее в СКД есть закладка "Вычисляемые поля" в которой с помощью метода ВычислитьВыражение(СтрокаЧисел) строковые циферки превращаются в обычные! 👌👌👌
Использовал когда нужно было преврать строку "000001" в число 1