• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Помогите с 8кой

  • Автор темы ikar-rus
  • Дата начала
I

ikar-rus

Начал перебираться с 7.7 на 8.0 и тут встретил множество проблем....:
Есть справочник: в нем: наименование, реквизит-цена.
Есть документ: реквизиты таб части - наименование, цена.
Может я чего не пойму но в 7ке реквизитам документа можно было назначать тип конкретного реквизита справочника, а 8ке - только целый справочник без разделения на реквизиты!?!?!?!?
Ну допустим, с наименованием это проходит вполне нормально, а как правильно изьять цену????
 
B

b00tch

не бывает типа "реквизит справочника"... бывает "СправочникСсылка" - через него доступны все реквизиты справочника...

примерно так:
ДокументТабличнаяЧасть.Цена = СправочникНоменклатура.Цена;
 
I

ikar-rus

Ну сначала хотелось бы правильно задать тип реквизита документа, а окошко только вот такое
__________1.JPG
и никак не выбрать справочник.цена.

А вот уже в модуле когда приходится руками сопоставлять цену, нужно что-то вроде:
ТекСтрока=ЭлементыФормы.ТабличнаяЧасть1.ТекущаяСтрока;
Элем=ТекСтрока.Наименование;
Точка=Справочники.СтРахода.НайтиПоНаименованию(Элем);
Цена=Точка.Получить(Цена);

p.s. это не конкретный код, а его идея.
Но если у нас забиты несколько одинаковых наименований. Что будет?
 
I

ikar-rus

ТекСтрока=ЭлементыФормы.ТабличнаяЧасть1.ТекущаяСтрока;
ТекЭл=ТекСтрока.Наименование;
Спр=Справочники.СтРасхода.НайтиПоНаименованию(ТекЭл);
Цена=Спр.Цена;
ТекСтрока.Цена=Цена;

Вот в таком варианте при наличии двух одинаковых наименований с разной ценой, извлекается цена которая была забита раньше. (причем мне не нужно искать раньше это было или позже мне нужна цена конкретного товара (одинаковые товары могут находиться в разных ветках иерархии)
 
I

ikar-rus

ТекСтрока=ЭлементыФормы.ТабличнаяЧасть1.ТекущаяСтрока;
ТекЭл=ТекСтрока.Наименование;
Спр=Справочники.СтРасхода.НайтиПоНаименованию(ТекЭл);
Цена=Спр.Цена;
ТекСтрока.Цена=Цена;

Вот в таком варианте при наличии двух одинаковых наименований с разной ценой, извлекается цена которая была забита раньше. (причем мне не нужно искать раньше это было или позже мне нужна цена конкретного товара (одинаковые товары могут находиться в разных ветках иерархии)
 
B

b00tch

тип реквизита документа Цена должен быть тип Число...
цены храни не в справочнике, а в рег. сведений - тогда с одинак. наименованиями проблем не будет...
 
I

ikar-rus

А как же иерархия,группировки?

Еще вопрос: Создаю отчет, в нем запрос. По сути он должен из докумета выбрать все записи товара и суммы, сгрупировать и просумировать, причем все это за определенный период.
1. Не пойму как отсортировать период. пишет Ошибка при вызове метода контекста (Выполнить): Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. Расход.Дата <<?>>МЕЖДУ &НачПериода И &КонПериода

НачПериода и КонПериода имеют тип Дата.

2.В таком варианте запроса никак не пойму как обратиться к полю КОД
Выборка.Код пишет нет такого параметра.

Запрос=Новый Запрос();
Запрос.УстановитьПараметр("НачПериода",ЭлементыФормы.НачПериода);
Запрос.УстановитьПараметр("КонПериода",ЭлементыФормы.КонПериода);
Запрос.Текст="ВЫБРАТЬ
| Расход.Дата,
| Расход.ТабличнаяЧасть1.(
| Код,
| СУММА(Сумма)
| )
|ИЗ
| Документ.Расход КАК Расход
|ГДЕ
| Расход.Дата МЕЖДУ &НачПериода И &КонПериода
|
|СГРУППИРОВАТЬ ПО
| Расход.ТабличнаяЧасть1.(Код)
|АВТОУПОРЯДОЧИВАНИЕ";
Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать();

Пока Выборка.Следующий() Цикл
Область = Макет.ПолучитьОбласть("Строка");
Область.Параметры.Наименование = Выборка.Код;
Область.Параметры.Сумма = Выборка.Сумма;
ТабДок.Вывести(Область);
КонецЦикла;
 
B

b00tch

А как же иерархия,группировки?
- в справочнике... а в рег. сведений измерение типа СправочникСсылка.НашСправочник

1. Не пойму как отсортировать период

в 8-ке запрос не работает с переменными модуля, только со своими параметрами:
Код:
	Запрос.УстановитьПараметр("НачПериода", НачалоДня(НачПериода));
Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода));


Выборка.Код пишет нет такого параметра.
может, у тебя нет параметра Наименование в обл. таб. документа?...
отладчиком посмотри перем. Выборка внутри цикла... какие у нее доступны свойства?
 
I

ikar-rus

Вот два варианта запроса. Но ни один не работает в полной мере правильно.....
1.Все бы хорошо, но зачем он группирует по ДАТЕ??? (это делает конструктор, а если оставить только РасходТабличнаяЧасть1.Код, то пишет ошибка)
Запрос.Текст="ВЫБРАТЬ
| Расход.Дата,
| РасходТабличнаяЧасть1.Код КАК Наименование,
| СУММА(РасходТабличнаяЧасть1.Сумма) КАК Суммарно
|ИЗ
| Документ.Расход.ТабличнаяЧасть1 КАК РасходТабличнаяЧасть1
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Расход КАК Расход
| ПО РасходТабличнаяЧасть1.Ссылка = Расход.Ссылка
|ГДЕ
| Расход.Дата МЕЖДУ &НачПериода И &КонПериода
|
|СГРУППИРОВАТЬ ПО
| Расход.Дата,
| РасходТабличнаяЧасть1.Код";
2. А вот в этом никак не могу добраться до результатов: Выборка.Наименование не работает, как и все остальные варианты вплоть до Выборка.ТабличнаяЧасть1.Колонки.Наименование
Запрос.Текст="ВЫБРАТЬ
| Расход.Дата,
| Расход.ТабличнаяЧасть1.(
| Код КАК Наименование,
| СУММА(Сумма) КАК Суммарно
| )
|ИЗ
| Документ.Расход КАК Расход
|ГДЕ
| Расход.Дата МЕЖДУ &НачПериода И &КонПериода
|
|СГРУППИРОВАТЬ ПО
| Расход.ТабличнаяЧасть1.(Код)
|АВТОУПОРЯДОЧИВАНИЕ";
Вот выборка в отладчике:
__________.JPG
 
B

b00tch

1.Все бы хорошо, но зачем он группирует по ДАТЕ??? (это делает конструктор, а если оставить только РасходТабличнаяЧасть1.Код, то пишет ошибка)

фича конструктора...
используй не СГРУППИРОВАТЬ а ИТОГИ...

2. А вот в этом никак не могу добраться до результатов: Выборка.Наименование не работает

в выборке доступны только поля, указанные в СГРУППИРОВАТЬ...
 
B

b00tch

РегСведений Цены
Имерения:
СтатьяРасхода тип - СправочникСсылка.СтРасхода
Ресурсы:
Цена тип - Число

Код:
ТекСтрока=ЭлементыФормы.ТабличнаяЧасть1.ТекущаяСтрока;
ТекЭл=ТекСтрока.Статьярасхода; //тип - СправочникСсылка.СтРасхода
Отбор = Новый Структура;
Отбор.Установить("Статьярасхода",ТекЭл);
Стр=РегистрыСведений.Цены.ПолучитьПоследнее(,Отбор);
Цена=Стр.Цена;
ТекСтрока.Цена=Цена;
 
I

ikar-rus

Еще вопрос по запросу. Как-то он странно группирует... допустим у меня за месяц два раза всречается хлеб по 11,5 тогда я получаю
Хлеб 23
Хлеб 11,5
Хлеб 11,5
Смотрел выборку в отладчике внутри цыкла, так и не смог найти отличия этих трех значений(что-бы отфильтровать ненужные)
Запрос.Текст="ВЫБРАТЬ
| Расход.Дата,
| РасходТабличнаяЧасть1.Код КАК Наименование,
| РасходТабличнаяЧасть1.Сумма КАК Суммарно
|ИЗ
| Документ.Расход.ТабличнаяЧасть1 КАК РасходТабличнаяЧасть1
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Расход КАК Расход
| ПО РасходТабличнаяЧасть1.Ссылка = Расход.Ссылка
|ГДЕ
| Расход.Дата МЕЖДУ &НачПериода И &КонПериода
|
|УПОРЯДОЧИТЬ ПО
| Наименование
|ИТОГИ
| СУММА(Суммарно)
|ПО
| ОБЩИЕ,
| Наименование ИЕРАРХИЯ";
Кстати так и неполучилось реализовать регистры сведений. Сильно ругается на строчку
Отбор.Установить("Статьярасхода",ТекЭл)
, уж как я ее не крутил...
 
B

b00tch

<!--QuoteBegin-ikar-rus+9:10:2007, 10:59 -->
<span class="vbquote">(ikar-rus @ 9:10:2007, 10:59 )</span><!--QuoteEBegin-->Еще вопрос по запросу. Как-то он странно группирует... допустим у меня за месяц два раза всречается хлеб по 11,5 тогда я получаю
[snapback]81081" rel="nofollow" target="_blank[/snapback]​
[/quote]

в запросе
Код:
| ОБЩИЕ,
соответственно, 1 строчка - общий итог (11,5+11,5)

кстати, Лев соединение ни к чему... достаточно написать после ВЫБРАТЬ
Код:
| РасходТабличнаяЧасть1.Ссылка.Дата


Кстати так и неполучилось реализовать регистры сведений. Сильно ругается на строчку
сорри, конечно же
Код:
Отбор.Вставить("Статьярасхода",ТекЭл);

с другой стороны, неплохой повод научиться интерпретировать сообщения об ошибках и пользоваться синтакс-помощником... хехе
 
I

ikar-rus

Итоги смог разобрать по частям с помощью Выборка.Уровень()

Кстати ... может это только мое мнение, но систакс помошник в 8ке какой-то неудобный...
Наконец забил в документе выборку через регистрыСведений. Теперь пытаюсь сделать заполнение этого регистра из справочника при ИЗМЕНЕНИИ.
Вот что я сделать:
Код:
Процедура СправочникСписокЦенаПриИзменении(Элемент)
ТекЭл=ЭлементыФормы.СправочникСписок.ТекущиеДанные;
Цена=ТекЭл.Цена;
Выборка = Новый Структура("СтатьяРасхода",ТекЭл);
Регистр=РегистрыСведений.Цены;
Объект=Регистр.Получить(Выборка);
...
КонецПроцедуры
Вот в отладцике у меня у Объекта цена в любом случае 0. Регистр сам забивал вручную. Может неправильно выборка делается???
 
B

b00tch

у регистра только одно измерение?
 
I

ikar-rus

да - цена

сорри...
Измерение - СтатьяРасхода
Ресурс - Цена
Реквизитов нет
 
B

b00tch

посмотри отладчиком, что у тебя в ТекЭл в момент вставки в структуру... тип должен совпадать с типом измерения... и значение вообще есть какое нибудь?
регистр кстати непериодический, я надеюсь?
 
I

ikar-rus

вот три принсткрина в отладчике __________.JPG
__________1.JPG
и наконец результат:
__________2.JPG

Измерение регистра не периодическое. тип-справочник.СтРасходы
 
B

b00tch

см. первый скрин:
ТекЭл - (значение) Хлеб - (тип) СправочникОбъект.СтРасхода

а в регистре
Измерение
СтатьяРасхода - (тип) СправочникСсылка.СтРасхода

разницу видишь?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!