|
Правильное условие Если | ☑ | ||
---|---|---|---|---|
0
capllary
11.02.15
✎
09:03
|
Как правильно прописать вот это:
Если СтрокаТаблицы.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаНочныеЧасы И СтрокаТаблицы.Сотрудник Из СписокСотрудников Тогда |
|||
1
piter3
11.02.15
✎
09:04
|
забавно вырвать кусок кода и спрашивать
|
|||
2
capllary
11.02.15
✎
09:05
|
СписокСотрудников это полученный запросом список значений.
|
|||
3
capllary
11.02.15
✎
09:05
|
Вот эту часть как грамотно оформить: И СтрокаТаблицы.Сотрудник Из СписокСотрудников Тогда
|
|||
4
n0ther
11.02.15
✎
09:06
|
(0) lol. Синтаксис помощник в руки, в зависимости от типа СписокСотрудников
|
|||
5
Mankubus
11.02.15
✎
09:07
|
(0) надо чтобы сотрудник был в списке?
|
|||
6
capllary
11.02.15
✎
09:08
|
(5) Да, проверка на наличие сотрудника в этом списке.
|
|||
7
Mankubus
11.02.15
✎
09:09
|
(6) читай в СП списокЗначений
|
|||
8
РеализоВано
11.02.15
✎
09:09
|
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс элемента (нумерация с 0). |
|||
9
Mankubus
11.02.15
✎
09:11
|
(8) не, надо НайтиПоЗначению
|
|||
10
Wern
11.02.15
✎
09:12
|
(9) Если это список значений а не массив, а может это вообще тз с одной колонкой.
|
|||
11
capllary
11.02.15
✎
09:13
|
(10) Это точно список значений.
|
|||
12
capllary
11.02.15
✎
09:14
|
Есть идея разделить все это, то есть отделать Если СтрокаТаблицы.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаНочныеЧасы Тогда, а внутри прописать что-то типа Пока СтрокаТаблицы.Сотрудник В СписокСотрудников Цикл и т.д.
|
|||
13
Mankubus
11.02.15
✎
09:15
|
(12) ловите наркомана)
|
|||
14
FIXXXL
11.02.15
✎
09:15
|
Найти юзай
только не строку целиком, а значение из строки |
|||
15
РеализоВано
11.02.15
✎
09:15
|
А запросом выбрать сразу то что нужно, не...???
|
|||
16
piter3
11.02.15
✎
09:15
|
(15) +1
|
|||
17
FIXXXL
11.02.15
✎
09:16
|
(15) запрос в цикле??? ай=яй-яй :)
|
|||
18
salvator
11.02.15
✎
09:16
|
(12) Не ну что за люди. Синтакс-помощник лень открыть. И в (9) ответили уже явно. Все равно чего-то надо еще.
|
|||
19
piter3
11.02.15
✎
09:16
|
(17)просто запрос не?
|
|||
20
РеализоВано
11.02.15
✎
09:16
|
(17) Какой цикл?? сразу одним запросом все что нужно из таблиц
|
|||
21
РеализоВано
11.02.15
✎
09:17
|
(20) И глумится дальше на данными как ТС угодно
|
|||
22
ShoGUN
11.02.15
✎
09:21
|
Что вы к этой строчке прицепились? :) Человек то ли только из клюшек вынырнул, то ли вообще с 1с на "Вы"...
Тут надо кусок кода смотреть, а не одну строчку. |
|||
23
ShoGUN
11.02.15
✎
09:21
|
А так-то (9), с учётом (11).
|
|||
24
capllary
11.02.15
✎
09:22
|
Получилось, правда не без порно:
Если СтрокаТаблицы.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаНочныеЧасы Тогда Пока СписокСотрудников.Следующий() Цикл Если СтрокаТаблицы.Сотрудник = СписокСотрудников.Сотрудник Тогда СтрокаТаблицы.Показатель1 = 999; КонецЕсли; КонецЦикла; КонецЕсли; |
|||
25
capllary
11.02.15
✎
09:24
|
Не, все равно пока не то. Поменялось только одно значение, первое.
|
|||
26
ShoGUN
11.02.15
✎
09:25
|
(24) Ты гонишь либо что "получилось", либо в (11).
|
|||
27
ShoGUN
11.02.15
✎
09:26
|
Нет у списка значений метода Следующий()
|
|||
28
Wern
11.02.15
✎
09:26
|
(24) А ты говорил что это список значений. "СписокСотрудников.Следующий()" не работает со списками значений, а работает с выборками. Так что где то ты обманываешь.
|
|||
29
capllary
11.02.15
✎
09:26
|
(26) Да, походу на выходе из запроса не список значений.
|
|||
30
ShoGUN
11.02.15
✎
09:27
|
(29) По ходу рано ещё код писать, надо ЖКК полистать сначала.
|
|||
31
Wern
11.02.15
✎
09:27
|
Потому показывай весь где получается этот твой список, а не только это условие.
|
|||
32
capllary
11.02.15
✎
09:28
|
Если НЕ РаботаСДиалогами.ЗаписатьДокументОтменивПроведениеПередВыполнениемДействия(мОбъект, мФорма, "рассчитать") Тогда
Возврат; КонецЕсли; ОбработкаКомментариев = глЗначениеПеременной("глОбработкаСообщений"); ОбработкаКомментариев.УдалитьСообщения(); мОбъект.РассчитатьНачисления(); // получить список сотрудников для изменения Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РаботникиОрганизацийСрезПоследних.ГрафикРаботы, | РаботникиОрганизацийСрезПоследних.Сотрудник |ИЗ | РегистрСведений.РаботникиОрганизаций.СрезПоследних(, ) КАК РаботникиОрганизацийСрезПоследних |ГДЕ | РаботникиОрганизацийСрезПоследних.ГрафикРаботы = &График"; //Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(ПериодРегистрации)); //Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(ПериодРегистрации)); //Запрос.УстановитьПараметр("ПериодРегистрации", ПериодРегистрации); //Запрос.УстановитьПараметр("Организация", Организация); //Запрос.УстановитьПараметр("ГоловнаяОрганизация",ОбщегоНазначенияЗК.ГоловнаяОрганизация(Организация)); //Запрос.УстановитьПараметр("РегламентВалюта", Константы.ВалютаРегламентированногоУчета.Получить()); //Запрос.УстановитьПараметр("Год", Год(ПериодРегистрации)); //Запрос.УстановитьПараметр("ДатаНач", НачалоКвартала(ПериодРегистрации)); //Запрос.УстановитьПараметр("ДатаКон", КонецКвартала(ПериодРегистрации)); //Запрос.УстановитьПараметр("ПолЖ", Перечисления.ПолФизическихЛиц.Женский); Запрос.УстановитьПараметр("График", Справочники.ГрафикиРаботы.НайтиПоНаименованию("Сменный график (учетный период 3 месяца) - 40ч.")); СписокСотрудников = Запрос.Выполнить().Выбрать(); // корректируем начисления на процент ТаблицаНачислений = Новый ТаблицаЗначений; ТаблицаНачислений = мОбъект[мИмяТабличнойЧасти].Выгрузить(); Для Каждого СтрокаТаблицы Из ТаблицаНачислений Цикл СтрокаТаблицы.Результат = Окр(СтрокаТаблицы.Результат / 50 * 10, 2, 1); Если СтрокаТаблицы.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаНочныеЧасы Тогда Пока СписокСотрудников.Следующий() Цикл Если СтрокаТаблицы.Сотрудник = СписокСотрудников.Сотрудник Тогда СтрокаТаблицы.Показатель1 = 999; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; мОбъект[мИмяТабличнойЧасти].Загрузить(ТаблицаНачислений); ОбработкаКомментариев.ПоказатьСообщения(); ТекущаяСтрока = мФорма.ЭлементыФормы.Начисления.ТекущаяСтрока; Если ТекущаяСтрока <> Неопределено Тогда мСтарыйРезультат = ТекущаяСтрока.Результат; мБылоОтработаноДней = ТекущаяСтрока.ОтработаноДней; мБылоОтработаноЧасов = ТекущаяСтрока.ОтработаноЧасов; мБылоОтработаноДнейПоПятидневке = ТекущаяСтрока.ОтработаноДнейПоПятидневке; мБылоНормаДней = ТекущаяСтрока.НормаДней; мБылоНормаЧасов = ТекущаяСтрока.НормаЧасов; мБылоНормаДнейПоПятидневке = ТекущаяСтрока.НормаДнейПоПятидневке; мБылоОплаченоДнейЧасов = ТекущаяСтрока.ОплаченоДнейЧасов; КонецЕсли; ТекущаяСтрока = мФорма.ЭлементыФормы.ДополнительныеНачисления.ТекущаяСтрока; Если ТекущаяСтрока <> Неопределено Тогда мСтарыйРезультатТЧДополнительныеНачисления = ТекущаяСтрока.Результат; мБылоОплаченоДнейЧасовТЧДополнительныеНачисления = ТекущаяСтрока.ОплаченоДнейЧасов; КонецЕсли; ЗаполнитьРасчетныйЛисток(Истина); Закрыть(); |
|||
33
FIXXXL
11.02.15
✎
09:30
|
и вот это
СтрокаТаблицы.Показатель1 = 999; значения не меняет, если ты конечно не в ТЗ запрос выгрузил |
|||
34
capllary
11.02.15
✎
09:32
|
(33) Почему? У одного сотрудника поменялось значение на 999.
|
|||
35
Timon1405
11.02.15
✎
09:32
|
Ох, чувствую, щас насчитают кому-то ЗП... (32)
(32) см. СП меотоды выборки "НайтиСледующий" и "Сбросить" |
|||
36
piter3
11.02.15
✎
09:34
|
временные перемещения не учтутся в твоем запросе.
|
|||
37
capllary
11.02.15
✎
09:35
|
Глобальная цель переделать механизм формирования тарифной ставки для доплаты за ночные часы и только для сотрудников с графиком работы "Сменный график (учетный период 3 месяца) - 40ч." на новую формулу: ТарифнаяСтавкаМесячная * 3 / НормаЧасовЗаКвартал (по производственному календарю)
|
|||
38
capllary
11.02.15
✎
09:36
|
(36) Почему?
|
|||
39
FIXXXL
11.02.15
✎
09:38
|
(34) увидел код, тут поменяется
"но только один разик" :) метод Следующий() позиционирует курсор на конец выборки и обратно не возвращает юзай Найти, будет проще и код читабельнее |
|||
40
FIXXXL
11.02.15
✎
09:39
|
(39)+ позиционирует в твоем цикле
|
|||
41
piter3
11.02.15
✎
09:41
|
(38)чел может быть переведен на неделю на другой график,а потом вернуться на твой
|
|||
42
Kumar_K
11.02.15
✎
09:42
|
Знаете, что забавляет на форуме
Зачем людям которые не знают основ программирования, не умеют крутить циклы, не имют представление о запросах, не могут понять или прочитать книг коих масса, открывать конфигуратор. |
|||
43
piter3
11.02.15
✎
09:42
|
(42)хихи многие не открывают.даже не знаю,что лучше
|
|||
44
vhl
11.02.15
✎
09:43
|
(32) "НайтиПоНаименованию". Mother of god...
|
|||
45
ilyavorobyev
11.02.15
✎
09:43
|
ТС где траву брал?
|
|||
46
Serg_1960
11.02.15
✎
09:45
|
"Да, походу на выходе из запроса не список значений."(capllary)
Пятница, внезапно, началась в среду :) |
|||
47
Kumar_K
11.02.15
✎
09:46
|
А потом говорят 1С не программисты.
Я конечно понимаю, что 1С знать предметную область может и главное и в ней быть богом, но черт .... |
|||
48
ShoGUN
11.02.15
✎
09:46
|
(33) Ты код внимательней читай.
(35) Не нужна ему выборка. (37) В принципе, код почти рабочий, но не очень эффективный и с кучей ошибок новичка. Лучше не использовать выборку и перебор, а выгрузить сотрудников из результата в ТЗ или массив, и в полученной коллекции искать. А так надо перед циклом Пока СписокСотрудников.Следующий() Цикл добавить СписокСотрудников.Сбросить() Сейчас у тебя выборка после первого прохода цикла остаётся позиционированной в конце и вложенный цикл Пока СписокСотрудников.Следующий() Цикл выполняется только один раз. Но лучше весь код переписать, хотя бы из-за того, что выборка тут неэффективна и вот так: Справочники.ГрафикиРаботы.НайтиПоНаименованию("Сменный график (учетный период 3 месяца) - 40ч.") делать не надо. При переименовании графика всё полетит к чертям. Хардкодинг - зло. |
|||
49
ShoGUN
11.02.15
✎
09:54
|
Да, и (41) прав, тут всё несколько сложнее.
|
|||
50
Timon1405
11.02.15
✎
09:59
|
(48) >>Лучше не использовать выборку и перебор, а выгрузить сотрудников из результата в ТЗ или массив, и в полученной коллекции искать.
Чем это лучше метода НайтиСледующий у выборки? |
|||
51
capllary
11.02.15
✎
10:05
|
(48) Справочники.ГрафикиРаботы.НайтиПоНаименованию("Сменный график (учетный период 3 месяца) - 40ч.")
Сам никогда так не ставлю, просто у справочника даже кода нет. |
|||
52
piter3
11.02.15
✎
10:06
|
(51) на форму вынести реквизит не?
|
|||
53
kosts
11.02.15
✎
10:10
|
В запрос можно передать ТЗ с номером строки и сотрудником.
Сделать отбор. Мало смысла тащить всех сотрудников. Тогда обработка упрощается. |
|||
54
capllary
11.02.15
✎
10:13
|
(48) СписокСотрудников.Сбросить() помогло.
|
|||
55
kosts
11.02.15
✎
10:23
|
Не забудь про важное замечание
> временные перемещения не учтутся в твоем запросе. Плюс срез надо делать на конкретную дату. А то заплатите лишнее или не доплатите, в общем косяк будет... ))) |
|||
56
kosts
11.02.15
✎
10:25
|
(55) А еще лучше срезать на дату начисления. Т.к. сотруднику могут и в середине что-то поменять.
|
|||
57
kosts
11.02.15
✎
10:26
|
(56) *середине месяца
|
|||
58
capllary
11.02.15
✎
10:26
|
(55) Ок, спасибо. Учтем.
|
|||
59
piter3
11.02.15
✎
10:26
|
(37) не пойму,а почему нельзя поменять на вид расчета с нужной формулой
|
|||
60
kosts
11.02.15
✎
10:29
|
(59) Там не формулы, а что-то с чем-то у нас на предприятии куча начислений разных, так по формуле рассчитывается только одно: Результат = Сумма
Все остальное в коде исправлено. |
|||
61
capllary
11.02.15
✎
10:34
|
(59) Потому что к примеру, там нельзя высчитать НормуЧасовЗаКвартал.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |