Имя: Пароль:
1C
1С v8
1С: Специалист по платформе
,
0 DCKiller
 
17.09.14
07:30
Скоро экзамен, но есть еще ряд невыясненных вопросов, на которые хотелось бы получить ответ. Просьба на форум chistov.spb.ru не отсылать, я прекрасно осведомлен о его существовании, но, к сожалению, там отвечают не так активно, как хотелось бы. Тему создаю здесь просто потому, что тут движухи больше, и шансов выцепить того же GROOVY, к примеру, на порядок выше.

Итак, вопросы:
1. С точки зрения экзаменатора - чем правильнее пользоваться в запросах для передачи некоторого предопределенного значения: передавать его как &Параметр, или же лучше использовать ЗНАЧЕНИЕ(...)? Или поровну?

2. В условиях задач по СПР иногда говорится "в одном документе м.б. данные за разные расчетные периоды". В то же время, если по тому же условию задачи сказано, что ставка оклада должна находиться в периодическом регистре сведений (чтобы в базе хранилась ее история), но получать оклад нужно на начало расчетного периода, то...

"ВЫБРАТЬ
ТаблицаДокумента.Сотрудник,
ЕСТЬNULL(Оклады.Ставка, 0) КАК Ставка
ИЗ
Документ.НачислениеЗарплаты.Начисления КАК ТаблицаДокумента
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.Оклады КАК Оклады
ПО
Оклады.Сотрудник = ТаблицаДокумента.Сотрудник
И НАЧАЛОПЕРИОДА(Оклады.Период, МЕСЯЦ) = НАЧАЛОПЕРИОДА(ТаблицаДокумента.ДатаНачала, МЕСЯЦ)"

...не снимут ли балл за такой запрос для получения ставок оклада? Дело в том, что в описании ошибок на экзамене говорится, что обращение к самой таблице регистра вместо виртуальной без крайней необходимости является грубой ошибкой. Хотелось бы понять - данный случай является "крайней необходимостью" или же нет?

3. Опять-таки в задаче по СПР - нужно ли контролировать, чтобы в пределах одного расчетного периода по одному и тому же виду начислений не ввели документ дважды? И если говорится, что данные по какому-то виду начислений м.б. введены задним числом, как это обрабатывать?

Пока вроде бы все. Возможно, что-то еще вспомнится из того, что вызвало вопросы при решении билетов. Заранее благодарен.
1 DCKiller
 
17.09.14
07:50
Да, и вот еще вопрос: имеет ли смысл индексировать ВТ по колонке, которая заполнена одним-единственным значением?
2 DCKiller
 
17.09.14
08:55
ап
3 боксер
 
17.09.14
09:02
Оклады разве не периодический? используй срез последних
4 mzelensky
 
17.09.14
09:27
(3) Читай внимательней:

"в одном документе м.б. данные за разные расчетные периоды"

Ему не подходит срез последних.
5 scanduta
 
17.09.14
09:30
Все норм не беспокойся. За индексирование ВТ тоже не переживай, за это особо оценки не снижают.

Главное чтобы все работало и грубых ошибок не было
6 1cVandal
 
17.09.14
09:31
(4) и? срез последних можно на каждую дату сделать самому
7 Крошка Ру
 
17.09.14
09:32
(0) Святые ёжики! Ну что за вопросы? Ещё спроси, что на экзамен одевать и не снимут ли балл за отсутствие галстука.
Ну какая разница как передавать предопределенное значение в запрос? Чисто с точки зрения удобства написания кода, лучше  ЗНАЧЕНИЕ() - один раз забил в запрос и забыл, но это моё ИМХО, у других может по-другому.
Нужно ли контролировать повторный документ? Ну будет время - сделай, не хватит - лучше сделать работающий документ без контроля, чем неработающий с контролем.
Проштудируй способы работы с основными прикладными объектами и по оптимизации запросов какие-нибудь материалы найди - и всё нормально пройдет.
8 DCKiller
 
17.09.14
09:37
(6) Получается, генерить текст запроса по каждой строке док-та к отдельной дате, которая в эту строку забита? Вот это-то и беспокоит больше всего. Бо не есть визуально красивое решение...

(7) >> Чисто с точки зрения удобства написания кода, лучше  ЗНАЧЕНИЕ()

Ну, тут вопрос не в том, что кому удобнее и лучше, а что правильнее с т.з. экзаменатора. Мне ЗНАЧЕНИЕ тоже больше нарвится :), но вот есть у меня подозрение насчет того, что эта штука каждый раз в момент генерации записи запроса обращается к базе. В то время как параметр берется из памяти, и его один раз передал - и все, больше программа за ним в базе не лезет. Но это, повторяю, чисто мое подозрение.
9 Maxus43
 
17.09.14
09:45
>>но вот есть у меня подозрение
неправильное подозрения

с точки зрения экзаменатора - поровну
10 боксер
 
17.09.14
09:46
(8)так если у тебя оклад установлен раньше чем период то запрос твой неправильный. надо выбирать последний т.е. использовать функцию максимум по периоду из оклады до ТаблицаДокумента.ДатаНачала
т.е. 3 варианта:
1)доработать твой запрос
2)генерить текст запроса по каждой строке док-та к отдельной дате исползуя срез последних
3)ну или  в цикле получать дату на каждого
я за первый
11 MrStomak
 
17.09.14
09:48
(8) Что за "момент записи запроса"?
Странные предположения конечно, и то и другое формирует запрос с параметрами, просто через значение они неявно задаются.
12 боксер
 
17.09.14
09:50
т.е. твой запрос как вложенный в него вместо оклада период максимальный выбирай с условием
И Оклады.Период<= ТаблицаДокумента.ДатаНачала
а потом на этот период уже оклад соединяя с РС оклады, а потом как твой с тч документа
13 DCKiller
 
17.09.14
09:54
(10) >> если у тебя оклад установлен раньше чем период то запрос твой неправильный

В условиях задач обычно говорится, что значение оклада берется на начало расчетного периода. Т.е. период действия записи вида начисления начинается, к примеру, 10.02, - следовательно, значение оклада берется на 01.02.
14 DCKiller
 
17.09.14
09:55
+(13) расчетный период месяц, если чо
15 DCKiller
 
17.09.14
09:55
(9) ОК, спасибо за разъяснения.
16 боксер
 
17.09.14
09:59
(13)если мне оклад с середины повысили, а ты начислил за месяц по старому я бы с тобой поспорил :-)
ну ладно, тогда в (12) делай по своему
и Оклады.Период <= НАЧАЛОПЕРИОДА(ТаблицаДокумента.ДатаНачала, МЕСЯЦ)
в (0) у тебя все равно не правильно. будет работать если на каждый месяц всем устанавливать новый оклад
17 DCKiller
 
17.09.14
10:01
(16) Это понятно, просто предполагается ли, что каждый месяц будет назначаться отдельная ставка оклада, или нет, следует уточнять на экзамене. В условии задачи об этом, как правило, ничего не сказано.
18 боксер
 
17.09.14
10:06
алгоритм данной задачи типовой почти на всех собеседованиях в спрашивают. типа
получить курсы валют по документам например поступление товаров выбранным за определенный период
валюта из документа, курсы из периодического регистра сведений курсы валют
валюты получать на дату документа
конструктором делается на раз
19 боксер
 
17.09.14
10:26
ну вот тряхнул стариной, хотя можно его оптимизировать в т.ч. через пакетный запрос, но так нагляднее.У тябя аналогично вместо курса ставка и свои отборы:

ВЫБРАТЬ
    ПТУ.Дата,
    ПТУ.ВалютаДокумента,
    КурсыВалют.Курс
ИЗ
    (ВЫБРАТЬ
        ПоступлениеТоваровУслуг.Дата КАК Дата,
        ПоступлениеТоваровУслуг.ВалютаДокумента КАК ВалютаДокумента,
        МАКСИМУМ(КурсыВалют.Период) КАК Период
    ИЗ
        Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
            ПО ПоступлениеТоваровУслуг.ВалютаДокумента = КурсыВалют.Валюта
                И ПоступлениеТоваровУслуг.Дата >= КурсыВалют.Период
    ГДЕ
        ПоступлениеТоваровУслуг.Дата МЕЖДУ &Дата1 И &Дата2
        И ПоступлениеТоваровУслуг.Проведен
        И ПоступлениеТоваровУслуг.ВалютаДокумента <> &ВалютаРубль
    
    СГРУППИРОВАТЬ ПО
        ПоступлениеТоваровУслуг.Дата,
        ПоступлениеТоваровУслуг.ВалютаДокумента) КАК ПТУ
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
        ПО ПТУ.ВалютаДокумента = КурсыВалют.Валюта
            И ПТУ.Период = КурсыВалют.Период
20 DCKiller
 
17.09.14
11:20
(19) спс, возьму на заметку
21 DCKiller
 
26.09.14
07:08
Сдано!!!!

Оценка 4. Всем спасибо!!!
22 vis_tmp
 
26.09.14
07:15
Поздравляю!