Сравнение объекта в документе с регистром сведений
Добрый день. Имеется обработка, которая должна сравнивать данные из документа с данными из регистра сведений. Пожалуйста помогите разобраться в данной проблеме.
При выполнении выдает ошибку:
При выполнении выдает ошибку:
{Документ.ВедомостьНаВыплатуЗарплатыВБанк.Форма.ФормаДокумента.Форма(1575)}: Значение не является значением объектного типа (Состав)
Запрос.УстановитьПараметр("ФизическоеЛицо", Объект.Состав.ФизическоеЛицо.Выгрузить());
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи, МестоВыплаты, ЗарплатныйПроект, ИскомыеСтроки, ФизическоеЛицо, Состав, Объект, ФизическиеЛица)
Запрос = Новый Запрос;
Запрос.Текст = ("ВЫБРАТЬ
| КадроваяИсторияСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
| КадроваяИсторияСотрудников.Организация КАК Организация,
| КадроваяИсторияСотрудников.Подразделение КАК Подразделение,
| КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
|ГДЕ
| КадроваяИсторияСотрудников.ФизическоеЛицо В (&ФизическоеЛицо)
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.Банк КАК Банк
|ПОМЕСТИТЬ ВТЛицевыеСчета
|ИЗ
| РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.СрезПоследних КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСотрудники КАК ВТСотрудники
| ПО ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ФизическоеЛицо = ВТСотрудники.ФизическоеЛицо
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| МестаВыплатыЗарплатыСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
| ЕСТЬNULL(МестаВыплатыЗарплатыСотрудников.МестоВыплаты, ЕСТЬNULL(МестаВыплатыЗарплатыПодразделений.МестоВыплаты, МестаВыплатыЗарплатыОрганизаций.МестоВыплаты)) КАК МестоВыплаты
|ПОМЕСТИТЬ ВТМестаВыплаты
|ИЗ
| ВТСотрудники КАК ВТСотрудники
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаВыплатыЗарплатыСотрудников КАК МестаВыплатыЗарплатыСотрудников
| ПО (МестаВыплатыЗарплатыСотрудников.ФизическоеЛицо = ВТСотрудники.ФизическоеЛицо)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаВыплатыЗарплатыОрганизаций КАК МестаВыплатыЗарплатыОрганизаций
| ПО (МестаВыплатыЗарплатыОрганизаций.Организация = ВТСотрудники.Организация)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаВыплатыЗарплатыПодразделений КАК МестаВыплатыЗарплатыПодразделений
| ПО (МестаВыплатыЗарплатыПодразделений.Подразделение = ВТСотрудники.Подразделение)
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ВТСотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
| ВТМестаВыплаты.МестоВыплаты КАК МестоВыплаты,
| ВТЛицевыеСчета.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
| ВТЛицевыеСчета.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ВТЛицевыеСчета.Банк КАК Банк
|ИЗ
| ВТСотрудники КАК ВТСотрудники
| ЛЕВОЕ СОЕДИНЕНИЕ ВТМестаВыплаты КАК ВТМестаВыплаты
| ПО ВТСотрудники.ФизическоеЛицо = ВТМестаВыплаты.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЛицевыеСчета КАК ВТЛицевыеСчета
| ПО ВТСотрудники.ФизическоеЛицо = ВТЛицевыеСчета.ФизическоеЛицо");
Запрос.УстановитьПараметр("ФизическоеЛицо", Объект.Состав.ФизическоеЛицо.Выгрузить());
Выборка = Запрос.Выполнить().Выбрать();
пока Выборка.Следующий() Цикл
Если объект.ЗарплатныйПроект <> Выборка.МестоВыплаты тогда
Отказ = Истина;
Сообщить("Карта не используется!" + Выборка.ФизическоеЛицо);
ИначеЕсли
ИскомыеСтроки = Объект.Зарплата.НайтиСтроки("ФизическоеЛицо", Выборка.ФизическоеЛицо) тогда
Для каждого ИскомаяСтрока из ИскомыеСтроки Цикл
Если ИскомаяСтрока.НомерЛицевогоСчета <> Выборка.НомерЛицевогоСчета Тогда
Отказ = Истина;
Сообщить("Карта не используется!" + ИскомаяСтрока.НомерЛицевогоСчета);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
//Возврат;
КонецПроцедуры
ПоказатьПо теме из базы знаний
Найденные решения
(14) немножко неправильно. Вместо ИначеЕсли нужно Иначе. Если так:
Пока Выборка.Следующий() Цикл
Если ТекущийОбъект.ЗарплатныйПроект <> Выборка.МестоВыплаты тогда
Отказ = Истина;
Сообщить("Карта не используется!" + Выборка.ФизическоеЛицо);
Иначе
ИскомыеСтроки = ТекущийОбъект.Зарплата.НайтиСтроки("ФизическоеЛицо", Выборка.ФизическоеЛицо);
Для каждого ИскомаяСтрока из ИскомыеСтроки Цикл
Если ИскомаяСтрока.НомерЛицевогоСчета <> Выборка.НомерЛицевогоСчета Тогда
Отказ = Истина;
Сообщить("Карта не используется!" + ИскомаяСтрока.НомерЛицевогоСчета);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(6)пробовал тогда он не видит объект ФизическоеЛицо
{Документ.ВедомостьНаВыплатуЗарплатыВБанк.Форма.ФормаДокумента.Форма(1576)}: Поле объекта не обнаружено (ФизическоеЛицо)
Запрос.УстановитьПараметр("ФизическоеЛицо", ТекущийОбъект.Состав.ФизическоеЛицо.Выгрузить());
(13)
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи, МестоВыплаты, ЗарплатныйПроект, ИскомыеСтроки, ФизическоеЛицо, Состав, Объект, ФизическиеЛица)
Запрос = Новый Запрос;
Запрос.Текст = ("ВЫБРАТЬ
| КадроваяИсторияСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
| КадроваяИсторияСотрудников.Организация КАК Организация,
| КадроваяИсторияСотрудников.Подразделение КАК Подразделение,
| КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
|ГДЕ
| КадроваяИсторияСотрудников.ФизическоеЛицо В (&ФизическоеЛицо)
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.Банк КАК Банк
|ПОМЕСТИТЬ ВТЛицевыеСчета
|ИЗ
| РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.СрезПоследних КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСотрудники КАК ВТСотрудники
| ПО ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ФизическоеЛицо = ВТСотрудники.ФизическоеЛицо
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| МестаВыплатыЗарплатыСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
| ЕСТЬNULL(МестаВыплатыЗарплатыСотрудников.МестоВыплаты, ЕСТЬNULL(МестаВыплатыЗарплатыПодразделений.МестоВыплаты, МестаВыплатыЗарплатыОрганизаций.МестоВыплаты)) КАК МестоВыплаты
|ПОМЕСТИТЬ ВТМестаВыплаты
|ИЗ
| ВТСотрудники КАК ВТСотрудники
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаВыплатыЗарплатыСотрудников КАК МестаВыплатыЗарплатыСотрудников
| ПО (МестаВыплатыЗарплатыСотрудников.ФизическоеЛицо = ВТСотрудники.ФизическоеЛицо)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаВыплатыЗарплатыОрганизаций КАК МестаВыплатыЗарплатыОрганизаций
| ПО (МестаВыплатыЗарплатыОрганизаций.Организация = ВТСотрудники.Организация)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаВыплатыЗарплатыПодразделений КАК МестаВыплатыЗарплатыПодразделений
| ПО (МестаВыплатыЗарплатыПодразделений.Подразделение = ВТСотрудники.Подразделение)
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ВТСотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
| ВТМестаВыплаты.МестоВыплаты КАК МестоВыплаты,
| ВТЛицевыеСчета.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
| ВТЛицевыеСчета.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ВТЛицевыеСчета.Банк КАК Банк
|ИЗ
| ВТСотрудники КАК ВТСотрудники
| ЛЕВОЕ СОЕДИНЕНИЕ ВТМестаВыплаты КАК ВТМестаВыплаты
| ПО ВТСотрудники.ФизическоеЛицо = ВТМестаВыплаты.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЛицевыеСчета КАК ВТЛицевыеСчета
| ПО ВТСотрудники.ФизическоеЛицо = ВТЛицевыеСчета.ФизическоеЛицо");
//Запрос.УстановитьПараметр("ФизическоеЛицо", ТекущийОбъект.Состав.ВыгрузитьКолонку("ФизическоеЛицо"));
Запрос.УстановитьПараметр("ФизическоеЛицо", ТекущийОбъект.Состав.Выгрузить().ВыгрузитьКолонку("ФизическоеЛицо"));
Выборка = Запрос.Выполнить().Выбрать();
пока Выборка.Следующий() Цикл
Если ТекущийОбъект.ЗарплатныйПроект <> Выборка.МестоВыплаты тогда
Отказ = Истина;
Сообщить("Карта не используется!" + Выборка.ФизическоеЛицо);
ИначеЕсли
ИскомыеСтроки = Объект.Зарплата.НайтиСтроки("ФизическоеЛицо", Выборка.ФизическоеЛицо) тогда
Для каждого ИскомаяСтрока из ИскомыеСтроки Цикл
Если ИскомаяСтрока.НомерЛицевогоСчета <> Выборка.НомерЛицевогоСчета Тогда
Отказ = Истина;
Сообщить("Карта не используется!" + ИскомаяСтрока.НомерЛицевогоСчета);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
//Возврат;
КонецПроцедуры
Показать
(14) немножко неправильно. Вместо ИначеЕсли нужно Иначе. Если так:
Пока Выборка.Следующий() Цикл
Если ТекущийОбъект.ЗарплатныйПроект <> Выборка.МестоВыплаты тогда
Отказ = Истина;
Сообщить("Карта не используется!" + Выборка.ФизическоеЛицо);
Иначе
ИскомыеСтроки = ТекущийОбъект.Зарплата.НайтиСтроки("ФизическоеЛицо", Выборка.ФизическоеЛицо);
Для каждого ИскомаяСтрока из ИскомыеСтроки Цикл
Если ИскомаяСтрока.НомерЛицевогоСчета <> Выборка.НомерЛицевогоСчета Тогда
Отказ = Истина;
Сообщить("Карта не используется!" + ИскомаяСтрока.НомерЛицевогоСчета);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Показать
(16) Сейчас второе условие - равны ли найденные в табличной части Зарплата по отбору строки некоей переменной ИскомыеСтроки:
Второе условие у вас проверяется дальше во вложенном блоке Если. Так что все-таки нужно
и так далее
ИначеЕсли ИскомыеСтроки = Объект.Зарплата.НайтиСтроки("ФизическоеЛицо", Выборка.ФизическоеЛицо) Тогда
Второе условие у вас проверяется дальше во вложенном блоке Если. Так что все-таки нужно
Иначе
ИскомыеСтроки = ТекущийОбъект.Зарплата.НайтиСтроки("ФизическоеЛицо", Выборка.ФизическоеЛицо);
Для каждого ИскомаяСтрока из ИскомыеСтроки Цикл
(17)
все поправил как вы говорили, все равно зацикливается, и такая ситуация происходит что при проведении документа с правильными данными все равно выдает "Сообщение" и документ не проводится
Запрос.УстановитьПараметр("ФизическоеЛицо", ТекущийОбъект.Состав.ВыгрузитьКолонку("ФизическоеЛицо"));
//Запрос.УстановитьПараметр("ФизическоеЛицо", ТекущийОбъект.Состав.Выгрузить().ВыгрузитьКолонку("ФизическоеЛицо"));
Выборка = Запрос.Выполнить().Выбрать();
пока Выборка.Следующий() Цикл
Если ТекущийОбъект.ЗарплатныйПроект <> Выборка.МестоВыплаты тогда
Отказ = Истина;
Сообщить("Карта не используется!" + Выборка.ФизическоеЛицо);
Иначе
ИскомыеСтроки = Объект.Зарплата.НайтиСтроки("ФизическоеЛицо", Выборка.ФизическоеЛицо);
Для каждого ИскомаяСтрока из ИскомыеСтроки Цикл
Если ИскомаяСтрока.НомерЛицевогоСчета <> Выборка.НомерЛицевогоСчета Тогда
Отказ = Истина;
Сообщить("Лицевой счет не используется!" + ИскомаяСтрока.НомерЛицевогоСчета);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показатьвсе поправил как вы говорили, все равно зацикливается, и такая ситуация происходит что при проведении документа с правильными данными все равно выдает "Сообщение" и документ не проводится
(20)с первой проверкой разобрался, все отлично работает, а вот вторая выдает ошибку
{Документ.ВедомостьНаВыплатуЗарплатыВБанк.Форма.ФормаДокумента.Форма(1585)}: Слишком много фактических параметров
ИскомыеСтроки = ТекущийОбъект.Зарплата.НайтиСтроки("ФизическоеЛицо", Выборка.ФизическоеЛицо);
Иначе
ИскомыеСтроки = ТекущийОбъект.Зарплата.НайтиСтроки("ФизическоеЛицо", Выборка.ФизическоеЛицо);
Для каждого ИскомаяСтрока из ИскомыеСтроки Цикл
Если ИскомаяСтрока.НомерЛицевогоСчета <> Выборка.НомерЛицевогоСчета Тогда
Отказ = Истина;
Сообщить("Лицевой счет не используется!" + ИскомаяСтрока.НомерЛицевогоСчета);
(24)с зацикливанием разобрался, нужно было добивать группировку. вылезла новая проблема в запросе из регистра сведений выбираются последние 2 строки
можете посмотреть пожалуйста
ВЫБРАТЬ
КадроваяИсторияСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
КадроваяИсторияСотрудников.Организация КАК Организация,
КадроваяИсторияСотрудников.Подразделение КАК Подразделение,
КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник
ПОМЕСТИТЬ ВТСотрудники
ИЗ
РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
ГДЕ
КадроваяИсторияСотрудников.ФизическоеЛицо В(&ФизическоеЛицо)
СГРУППИРОВАТЬ ПО
КадроваяИсторияСотрудников.ФизическоеЛицо,
КадроваяИсторияСотрудников.Организация,
КадроваяИсторияСотрудников.Подразделение,
КадроваяИсторияСотрудников.Сотрудник
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ЗарплатныйПроект КАК ЗарплатныйПроект
ПОМЕСТИТЬ ВТЛицевыеСчета
ИЗ
РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.СрезПоследних КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ ВТСотрудники КАК ВТСотрудники
ПО ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ФизическоеЛицо = ВТСотрудники.ФизическоеЛицо
СГРУППИРОВАТЬ ПО
ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ФизическоеЛицо,
ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.НомерЛицевогоСчета,
ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ЗарплатныйПроект
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
МестаВыплатыЗарплатыСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
ЕСТЬNULL(МестаВыплатыЗарплатыСотрудников.МестоВыплаты, ЕСТЬNULL(МестаВыплатыЗарплатыПодразделений.МестоВыплаты, МестаВыплатыЗарплатыОрганизаций.МестоВыплаты)) КАК МестоВыплаты
ПОМЕСТИТЬ ВТМестаВыплаты
ИЗ
ВТСотрудники КАК ВТСотрудники
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаВыплатыЗарплатыСотрудников КАК МестаВыплатыЗарплатыСотрудников
ПО (МестаВыплатыЗарплатыСотрудников.ФизическоеЛицо = ВТСотрудники.ФизическоеЛицо)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаВыплатыЗарплатыОрганизаций КАК МестаВыплатыЗарплатыОрганизаций
ПО (МестаВыплатыЗарплатыОрганизаций.Организация = ВТСотрудники.Организация)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаВыплатыЗарплатыПодразделений КАК МестаВыплатыЗарплатыПодразделений
ПО (МестаВыплатыЗарплатыПодразделений.Подразделение = ВТСотрудники.Подразделение)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТСотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
ВТМестаВыплаты.МестоВыплаты КАК МестоВыплаты,
ВТЛицевыеСчета.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
ВТЛицевыеСчета.ЗарплатныйПроект КАК ЗарплатныйПроект
ИЗ
ВТСотрудники КАК ВТСотрудники
ЛЕВОЕ СОЕДИНЕНИЕ ВТМестаВыплаты КАК ВТМестаВыплаты
ПО ВТСотрудники.ФизическоеЛицо = ВТМестаВыплаты.ФизическоеЛицо
ЛЕВОЕ СОЕДИНЕНИЕ ВТЛицевыеСчета КАК ВТЛицевыеСчета
ПО ВТСотрудники.ФизическоеЛицо = ВТЛицевыеСчета.ФизическоеЛицо
СГРУППИРОВАТЬ ПО
ВТСотрудники.ФизическоеЛицо,
ВТМестаВыплаты.МестоВыплаты,
ВТЛицевыеСчета.НомерЛицевогоСчета,
ВТЛицевыеСчета.ЗарплатныйПроект
Показатьможете посмотреть пожалуйста
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот