Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 21:27

Помогите написать запрос

Автор Люсёк, 11 окт 2010, 21:39

0 Пользователей и 1 гость просматривают эту тему.

Люсёк

как написать запрос, чтобы он брал данные из регистра сведений Показатели для расчета заработной платы за определенный период и по определенному подразделению организации. Сравнивал их с соответствующими значениями в табличной части документа Начисление зарплаты и если находил не верное значение, то заменял его  значением соответствующим данному подразделению из регистра сведений. Т.е, есть организация. Вней есть подразделения (Участок №1, Участок №2,Участок №3). Работники организации, в течении месяца, произвольноперемещаются по подразделениям. В организации оплачивается питание. Определенная сумма в день в зависимости от подразделения на котором в этот день работал сотрудник. Например, Участок №1 - 100 руб, Участок №2 - 120 руб. в день, и на Участке №3 - 80 руб в день. Информация о размере оплаты  питания и подразделении на котором она действует хранится в регистре сведений показатели для расчета заработной платы. надо написать запрос, который в созданном документе начисление заработной платы будет просматривать табличную часть и сравнивать соответствует ли данный размер оплаты питания подразделению и если нет, то заменял его нужным для этого подразделения из регистра сведений.

progmikon

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

Сразу хочу отметить то, что запросом мы получаем выборку данных. Обрабатывая которую, можно изменять данные в базе. Сам запрос данные изменять не может.

Возвращаясь к вашей проблеме:
Вот примерный текст запроса, а точнее его простейший вариант. Безусловно, конкретные имена реквизитов и объектов зависят от вашей конфигурации:
"ВЫБРАТЬ
|   НачислениеЗарплатыРаботникамОрганизацийНачисления.ПодразделениеОрганизации,
|   НачислениеЗарплатыРаботникамОрганизацийНачисления.Сумма,
|   ПоказателиДляРасчетаЗПСрезПоследних.Подразделение,
|   ПоказателиДляРасчетаЗПСрезПоследних.Сумма,
|   НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка
|ИЗ
|   Документ.НачислениеЗарплатыРаботникамОрганизаций.Начисления КАК НачислениеЗарплатыРаботникамОрганизацийНачисления
|      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказателиДляРасчетаЗП.СрезПоследних(&ДатаОкончания, ) КАК ПоказателиДляРасчетаЗПСрезПоследних
|      ПО НачислениеЗарплатыРаботникамОрганизацийНачисления.ПодразделениеОрганизации = ПоказателиДляРасчетаЗПСрезПоследних.Подразделение
|ГДЕ
|   НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|   И НачислениеЗарплатыРаботникамОрганизацийНачисления.Сумма <> ПоказателиДляРасчетаЗПСрезПоследних.Сумма";

После выполнения запроса необходимо получить объект и уже в нем менять значения реквизитов.

А чтобы ускорить решение вашей проблемы - опишите, на каком этапе вы остановились, а мы вам поможем.

Люсёк

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

Люсёк

Я выгрузила данные из запроса в таблицу значений. как теперь сравнить две таблицы?

progmikon

Вы можете проверять на соответствие сумм в запросе посредством соединений. Посмотрите 2 пост. Если что-то не понятно - обязательно напишите, разберемся.

Люсёк

А если с помощью циклов и конструкции Если Тогда Иначе?

Для каждого СтрокаТЧ Из ТаблицаНачисления
   Цикл
      Если Это РазмерОплатыПитания=100 Тогда ТекущееПодразделение="Участок№1"
      Иначе Для каждого Тз Из ТаблицаЗначений
         Цикл
            Если Это ТекущееПодразделение= "Участок №2" Тогда РазмерОплатыПитания=120
               ТаблицаНачисления.Вставить(РазмерОплатыПитания)
                  ИначеЕсли Это ТекущееПодразделение= "Участок №3" Тогда РазмерОплатыПитания=80
                       ТаблицаНачисления.Вставить(РазмерОплатыПитания)
                  КонецЕсли   
            КонецЕсли
         КонецЦикла
      КонецЕсли
   КонецЦикла   

Типо такого? правда мне ошибки выдает))) Может вы поправите)))

progmikon

Для начала
Это????РазмерОплатыПитания=100

progmikon

Правильно ли я вас понял, что вам нужно заполнить табличную часть документа из регистра? по каждой строке смотрим какое подразделение и пишем сумму из регистра?

Люсёк

)))))) ну типо просматриваем строчку и если просматриваемый элемент это размер оплаты питания тогда .....

я так и думала что криво))) но я только учусь, поэтому и спрашиваю)

progmikon

Цитата: Люсёк от 12 окт 2010, 19:53
)))))) ну типо просматриваем строчку и если просматриваемый элемент это размер оплаты питания тогда .....

Мы просматриваем строчку табличной части документа?
Цитата: Люсёк от 12 окт 2010, 19:53
я так и думала что криво))) но я только учусь, поэтому и спрашиваю)
Ничего страшного, для этого мы здесь и находимся, чтобы вам помогать :)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск