Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Вопросы/ответы по Слойнице
(к задаче)
Вопрос №1:
Использую «ВзятьИЗ», чтобы вывести данные из слоя «Справочник - инф. о сотрудниках», «Промежуточный слой для расчета» в «Конечный слой начисления з/п». После этого в конечном слое (CalcData) данные выводятся, но не полностью и некорректно:
· Появились дополнительные две строки, у которой заполнены только 2 поля: номер месяца, номер года.
· В тех строках, которые должны выводится, не вывелись поля: Должность, номер месяца, номер года.
Причем «ВзятьИЗ» используется в конечном слое во всех полях кроме: кол-во отработанных часов, сумма начисления з/п, ФИО.



Ответ №1:
1. Необходимо определиться, что хочется получить в итоге. Необходимо получить список сотрудников, по которым введена информация в табеле по отработанным часам, сумму отработанных часов за месяц по каждому сотруднику, дополнительную информацию о сотрудниках из справочника. Для получения такого результата, необходимо определить следующий порядок вычислений:
a. Вычисляется количество отработанных часов из слоя с первичными данными по каждому сотруднику и по каждому месяцу года. Здесь нужна вставка.
b. По табельному номеру сотрудника подтягиваются дополнительные атрибуты сотрудников из справочника. Эта операция не должна влиять на количество записей, поэтому флаг вставки убираем.
2. Порядок вычисления слойница определяет автоматически по заданным формулам: если формула ссылается на какое-то поле, значение которого определяется при вычислении других формул, то формулы для того поля будут вычислены раньше. Циклы недопустимы.
3. Если ВзятьИЗ выполняется со вставкой, то в ключевых атрибутах можно не писать формулу: ключи будут заполнены автоматически при добавлении новой записи из источника.
4. При подтяжке доп. атрибутов из справочника не нужно делать вставку, т. к. набор записей, который необходимо получить в результате, определяется только первичными данными.
Вопрос №2:
Убрал вставку во «ВзятьИЗ», удалил формулы из ключевых полей

В результате вообще пропали поля, вставляемые из слоя «Спр_инф_о_сотрудниках»

Ответ №2:
1. Не заполняется поле с табельным номером, когда ты берешь первичные данные.
2. Атрибуты из справочника нужно подтягивать по табельному номеру. Т. е. ключем должен быть только табельный номер.
Вопрос №3:
Пробую, не получается (пишет ошибку «Цикл при вычислении выражений для поля Фамилия»).
Вот так выглядит таблица «Конечный слой вычисления з/п»:




Ответ №3:
Необходимо правильно настроить ключи в формулах ВзятьИЗ. Ключи перечисляются в табличке «Как сопоставить слои».
Вопрос №4:
Чтобы я не менял в правом окне, все время выпадает ошибка «Цикл при вычислении выражений для поля ХХХХХ», пока я не поставлю галочку у этого поля для вставки.
Ответ №4:
Почему получается цикл: допустим есть два поля, которые берутся формулой ВзятьИЗ без вставки: Фамилия и Имя. Если ты указываешь их оба в левой и правой табличке, то получается, что Фамилия зависит от значения поля Имя, а значение поля Имя зависит от значения поля Фамилия: получаем цикл.
Поэтому вопрос: а что Фамилия и Имя делают в правой панели, если их значения мы как раз этой формулой хотим определить? Они не могут быть ключами, т. к. их значение еще не определено.
Вопрос №5:
Всякие варианты пробовал в том числе и этот: 
В результате ошибка: «Цикл при вычислении выражений для поля Фамилия»
Ответ №5:
Нужно обязательно ставить ключ в правом окне, по которому эти поля из левого окна будут выводиться.
Вопрос №6:
Ключ вставил в правом окне, теперь ошибки нет, но информация выводится некорректно (причем номера месяца и года удвоены):

Ответ №6:
Смотри ВзятьИЗ, которая вставляет записи из первичного слоя. Табельный номер должен заполняться, если укажешь его в списке ключей в формуле ВзятьИЗ. А месяц и год удваиваются, потому что у них неправильно указана роль поля – нужно поставить роль «ключ».
Вопрос №7:
Исправил ВзятьИЗ:

Данные из первичного слоя выводятся корректно.
Но не выводится поле «номер лиц. сч.», «наименование лиц. сч.» из слоя Спр_инф_о_сотрудниках:


Ответ №7:
1. Из приведенных скриншотов видно, что у тебя в справочнике сотрудников сохраняются поля Должность и Ставка, хотя они зависят от кода должности, и хранятся в справочнике Спр. Тарифов. Эти поля нужно сделать разыменовками, чтобы они не сохранялись в базу. То же самое с полем НаименованиеЛицСчета.
2. В конечном слое необходимо подтягивать наименование должности и ставку из справочника Спр. Тарифов, а наименование лиц счета из справочника лицевых счетов при помощи ВзятьИЗ.
3. Если в конечный слой не подтягивается номер лицевого счета, значит ты не указал в нем формулу, по которой он будет браться из справочника сотрудников.
Вопрос №8:
Поля Должность и Ставка сделал разыменовками. Добавил поле Код в конечный слой, чтобы вывести из Справочника тарифов данные поля по аналогии с полем Табельный номер.

Однако ничего не получилось:

Справочник тарифов:

Ответ №8:
То же самое, что и с лицевым счетом в предыдущем вопросе.
Вопрос №9:
Попробовал такой вариант и опять ничего:

Ответ №9:
1. Должность и Ставка в справочнике сотрудников являются полями-разыменовками. Нельзя в формулах ВзятьИЗ использовать поля источника, которые являются разыменовками, т. к. разыменовки не выполняются в слоях-источниках. В данном случае Должность и Ставку необходимо подтягивать из справочника, где они реально хранятся, по коду должности.
2. А почему ты пытаешься сделать код и табельный номер ключами? Где тут логика? В формуле ВзятьИЗ перечень ключей – это перечень полей, по значениям которых будут сопоставляться записи слоя-источника с записями текущего слоя. Чтобы понять, какие записи будут в текущем слое на момент вычисления формулы ВзятьИЗ, необходимо мысленно упорядочить все формулы ВзятьИЗ, которые определены в слое, в том порядке, в котором они будут вычисляться. Про порядок вычисления формул я уже писал где-то выше.
3. Советую попробовать сначала на бумажке смоделировать (нарисовать) алгоритм вычисления данного слоя. Т. е. определяешь порядок формул ВзятьИЗ и рисуешь, что получается после вычисления каждой из формул поэтапно.
Вопрос №10:
Для реализации условия «если кол-во отраб. часов за месяц более 40, то з/п должна начисляться по двойному тарифу» я написал формулу: <кол_отраб_часов_мес>160>?<"ставка* кол_отраб_часов_мес *2">:<" кол_отраб_часов_мес ">
У меня возникла ошибка: «Ошибка в выражении для вычисления поля Сумма_начисления_з/п: Операция "<" не является одноместной»
Ответ №10:
Вместо угловых поставь круглые скобки.
Вопрос №11:
Исправил скобки. Теперь появилась ошибка: «Ошибка в выражении для вычисления поля Сумма_начисления_з/п: Неизвестный идентификатор "Кол_отр_часов_мес"»
Ответ №11:
Значит у тебя нет поля с таким именем в слое. Проверь точно, а лучше скопируй имя из описания поля в формулу.
Вопрос №12:
Оказалось я забыл в первом выражении кавычки поставить. Однако все равно возникла ошибка: «Ошибка в выражении для вычисления поля Сумма_начисления_з/п: Недопустимый символ " ? "»
Ответ №12:
Кавычками надо охватить не каждое частное выражение, а всю формулу сразу.
Вопросы общего характера
Вопрос №13:
Что будет, если я сначало наввожу данных, а потом надобавляю контролей. Данные вполне могут стать некорректны. Это наверно будет выглядеть как вход в редактирование без возможности постинга?
Ответ №13:
Сейчас единственные проверки, которые могут выполняться на пост - это обязательность заполнения поля. На самом деле возникали такие проблемы, когда сначала вводили данные, а потом включали обязательность, и потом не могли работать. В таких случаях нужно сначала исправить данные.
Вопрос №14:
Если данные должны быть только дополнены при помощи ВзятьИЗ? Что ключи в этом случае можно не формировать?
Ответ №14:
Если ключ не указать, то слойница сожмет все дополнительные данные в одну запись. Поэтому ключи обязательны.
Вопрос №15:
Как агрегирующая функция работает с «вычислимым параметром»?
Ответ №15:
Так же как и с обычным «параметром».
Вопрос №16:
Не совсем понятно как работает разыменовка, если в слое-источнике более 1го ключевого поля?
Ответ №16:
Никак. Сейчас это самое серьезное ограничение в слойнице. В дальнейшем будет возможно.


