1С ЗУП3.1 - помогите разобраться

1. Roootru 15.10.20 04:52 Сейчас в теме
Добрый день. Столкнулись с проблемой в обычных действиях. Делаем сзв-тд на основании увольнения, при проведении выходит ошибка на поле "Трудовая книжка (заявл)." - "ФИО: заявление о продолжении ведения трудовой книжки передавалось Сведения о трудовой деятельности работников, СЗВ-ТД ХПЗП-000000 от 01.01.0001.". Начинаю копать: нашел запрос на основании выборки которого проверяет записи из регистра "ЗаявленияОВеденииТрудовыхКнижекПереданные".

Вот запрос кст.
ТаблицаСотрудников = Сотрудники.Выгрузить(, "НомерСтроки,Сотрудник,ЗаявлениеОПродолжении,ЗаявлениеОПредоставлении,ЗаявлениеОПродолженииОтмена,ЗаявлениеОПредоставленииОтмена");
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

Запрос.УстановитьПараметр("ТаблицаСотрудников", ТаблицаСотрудников);
Запрос.УстановитьПараметр("Ссылка", Ссылка);

Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаСотрудников.НомерСтроки КАК НомерСтроки,
| ТаблицаСотрудников.Сотрудник КАК Сотрудник,
| ТаблицаСотрудников.ЗаявлениеОПродолжении КАК ЗаявлениеОПродолжении,
| ТаблицаСотрудников.ЗаявлениеОПредоставлении КАК ЗаявлениеОПредоставлении,
| ТаблицаСотрудников.ЗаявлениеОПродолженииОтмена КАК ЗаявлениеОПродолженииОтмена,
| ТаблицаСотрудников.ЗаявлениеОПредоставленииОтмена КАК ЗаявлениеОПредоставленииОтмена
|ПОМЕСТИТЬ ВТТаблицаСотрудников
|ИЗ
| &ТаблицаСотрудников КАК ТаблицаСотрудников
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ТаблицаСотрудников.НомерСтроки КАК НомерСтроки,
| ТаблицаСотрудников.Сотрудник КАК ФизическоеЛицо,
| ТаблицаСотрудников.ЗаявлениеОПродолжении КАК ЗаявлениеОПродолжении,
| ТаблицаСотрудников.ЗаявлениеОПродолженииОтмена КАК ЗаявлениеОПродолженииОтмена,
| ЗаявленияОПродолженииПереданные.Регистратор КАК ЗаявлениеОПродолженииРегистратор,
| ТаблицаСотрудников.ЗаявлениеОПредоставлении КАК ЗаявлениеОПредоставлении,
| ТаблицаСотрудников.ЗаявлениеОПредоставленииОтмена КАК ЗаявлениеОПредоставленииОтмена,
| ЗаявленияОПредоставлении.Регистратор КАК ЗаявлениеОПредоставленииРегистратор
|ИЗ
| ВТТаблицаСотрудников КАК ТаблицаСотрудников
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗаявленияОВеденииТрудовыхКнижекПереданные КАК ЗаявленияОПродолженииПереданные
| ПО ТаблицаСотрудников.Сотрудник = ЗаявленияОПродолженииПереданные.ФизическоеЛицо
| И ТаблицаСотрудников.ЗаявлениеОПродолжении = ЗаявленияОПродолженииПереданные.Заявление
| И ТаблицаСотрудников.ЗаявлениеОПродолженииОтмена = ЗаявленияОПродолженииПереданные.Отозвано
| И (ЗаявленияОПродолженииПереданные.Регистратор <> &Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗаявленияОВеденииТрудовыхКнижекПереданные КАК ЗаявленияОПредоставлении
| ПО ТаблицаСотрудников.Сотрудник = ЗаявленияОПредоставлении.ФизическоеЛицо
| И ТаблицаСотрудников.ЗаявлениеОПредоставлении = ЗаявленияОПредоставлении.Заявление
| И ТаблицаСотрудников.ЗаявлениеОПредоставленииОтмена = ЗаявленияОПредоставлении.Отозвано
| И (ЗаявленияОПредоставлении.Регистратор <> &Ссылка)
|ГДЕ
| (ТаблицаСотрудников.ЗаявлениеОПродолжении <> НЕОПРЕДЕЛЕНО
| ИЛИ ТаблицаСотрудников.ЗаявлениеОПредоставлении <> НЕОПРЕДЕЛЕНО)
| И НЕ ЕСТЬNULL(ЗаявленияОПродолженииПереданные.Регистратор, ЗаявленияОПредоставлении.Регистратор) ЕСТЬ NULL
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл

Если ЗначениеЗаполнено(Выборка.ЗаявлениеОПродолженииРегистратор) Тогда

Если Выборка.ЗаявлениеОПродолженииОтмена Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1: отзыв заявления о продолжении ведения трудовой книжки передавался %2.'"), Выборка.ФизическоеЛицо, Выборка.ЗаявлениеОПродолженииРегистратор);
Иначе
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1: заявление о продолжении ведения трудовой книжки передавалось %2.'"), Выборка.ФизическоеЛицо, Выборка.ЗаявлениеОПродолженииРегистратор);
КонецЕсли;

ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, СсылкаНаДокумент,
"Объект.Сотрудники[" + Формат(Выборка.НомерСтроки - 1, "ЧН=0; ЧГ=0") + "].ЗаявлениеОПродолжении" , , Отказ);

КонецЕсли;

Если ЗначениеЗаполнено(Выборка.ЗаявлениеОПредоставлении) Тогда

Если Выборка.ЗаявлениеОПредоставленииОтмена Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1: отзыв заявления о предоставлении сведений в электронном виде передавался %2.'"), Выборка.ФизическоеЛицо, Выборка.ЗаявлениеОПредоставленииРегистратор);
Иначе
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1: заявление о предоставлении сведений в электронном виде передавалось %2.'"), Выборка.ФизическоеЛицо, Выборка.ЗаявлениеОПредоставленииРегистратор);
КонецЕсли;

ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, СсылкаНаДокумент,
"Объект.Сотрудники[" + Формат(Выборка.НомерСтроки - 1, "ЧН=0; ЧГ=0") + "].ЗаявлениеОПредоставлении" , , Отказ);

КонецЕсли;

КонецЦикла;

И косяк в общем тот что он запись находит которая была сделана при отправке сзв который фиксировал прием на работу. И так как связь в запросе у таблиц указана вся кроме регистратора, то по этой записи он уже бреет в обработке проверки заполнения дальнейшее проведение. Раньше я смотрел на примерах записей других людей что у некоторых сзв-тд на приеме не создавались записи в этом регистре, либо в измерении "Заявление" в этом регистре имелась запись (в этом случае при соединении как можно выше увидеть записи не подбирались, т.к. при увольнении никакого заявления не было). В общем объясните кто сможет это косяк какой то, или я туплю?
Найденные решения
11. GSokolov 320 15.10.20 10:31 Сейчас в теме
(10) Нет, комментить нельзя, пропадёт проверка на введённое текущее заявление, нужно заменить проверку на строку
| И СведенияОТрудовойДеятельностиРаботниковСЗВ_ТД.ЗаявлениеОПродолжении <> ЗНАЧЕНИЕ(Документ.ЗаявленияОПредоставленииСведенийОТрудовойДеятельности.ПустаяСсылка). То же и для ЗаявлениеОПредоставлении. А лучше добавить, пусть проверка на неопределенность останется. "Кривые" последние СЗВ-ТД перепровести.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Hla 82 15.10.20 08:11 Сейчас в теме
(1) Здравствуйте! Номер релиза скажите. И можно скрин ошибки посмотреть.
3. GSokolov 320 15.10.20 08:16 Сейчас в теме
(1) Лучше бы релиз указали, чем текст запроса без ссылки на процедуру модуля приводить. Он без исходных данных неинформативен, может, это не тот запрос. Непонятно, почему номер документа нулевой от нулевого же числа, т.е. запись в регистре ссылается на неизвестный регистратор от неизвестной даты (кстати, значение регистратора в запросе присутствует)? И какие записи по этому переданному СЗВ-ТД в самом регистре есть?
Кстати, действительно обнаружил записи в этом регистре с пустыми значениями документов заявлений дублями с заполненными с датами после перехода на 3.1.14 (релиз 3.1.14.208). И ссылаются они на один и тот же регистратор. Какой-то косяк после проставления галки о принятии при проведении принятого СЗВ-ТД. Наверное, это записи для непереданных и незаявленных типов заявлений (о ведении или о продолжении, записывается и то и то)..
4. Roootru 15.10.20 08:53 Сейчас в теме
(3) Извиняюсь что без информации: Релиз - 3.1.14.237, проф версия, номер документа и дата просто сделана так, на деле там другое число в этом месяце (но это и не имеет значения), строка в модуле объекта документа СЗВ-ТД - 200 (около того, не за конфигурацией сейчас). СЗВ-ТД не передан, т.к. не проводится из-за того что я выше описал. Еще раз вкратце: в регистре "ЗаявленияОВеденииТрудовыхКнижекПереданные" есть записи уже сделанные прошлым СЗВ-ТД, сейчас из-за этих записей не проходит проверку в типовом коде который я выше указал (запрос посмотрите, поймете) , и естественно на дает провести. Надеюсь все понятно изложил)
5. GSokolov 320 15.10.20 08:58 Сейчас в теме
(4) Действительно, при проведении СЗВ-ТД записываются два значения, одно для имеющегося типа заявления, другое пустое. Именно оно и даёт ошибку, если какое-то заявление уже было передано. Если из движений запись с пустым заявлением убрать, ошибка пропадает. Использую обработку "Корректировка движений" документа.
6. Roootru 15.10.20 09:26 Сейчас в теме
(5) Странно, у меня другая ситуация, либо я вас немного не понял. На моем примере у моего сотрудника уже был СЗВ-ТД который фиксировал прием на работу, и он уже сделал запись в регистр который я написал выше, далее делаю в этом же месяце (это не важно, регистр не периодический) увольнение, далее СЗВ-ТД с этим мероприятием не проводится т.к. не проходит проверку в том куске кода который я указал (хотя раньше до июля месяца у нас все прекрасно проходило по той интересной причине что в СЗВ-ТД в которых фиксировали прием на работу записывали еще "Заявление о предоставлении сведений о трудовой деятельности" чтобы сотруднику фиксировали как ему будут труд книжку вести, и эта информация как раз попадала в регистр наш, но потом при создании СЗВ-ТД при увольнении он этим запросом не выбирал эту первую запись так как она по соединению таблиц "| И ТаблицаСотрудников.ЗаявлениеОПродолжении = ЗаявленияОПродолженииПереданные.Заявление" не проходила).
7. GSokolov 320 15.10.20 09:38 Сейчас в теме
(6) Посмотрите, сколько записей в этом регистре есть, привязанных к предыдущему СЗВ-ТД Если там есть две записи, из них одна запись с пустым значением заявления, то в следующем документе СЗВ-ТД при проверке будет ошибка, т.к. записи по обеим заявлениям есть, хотя и с пустым документом, а проверки на это в запросе нет и исключения её из результата запроса нет. Т.е. ИМХО проверяется не наличие какого-то любого заявления, а наличие каждого заявления и по каждому делается запись, что в дальнейшем приводит к ошибке, как будто пустое заявление уже было передано.
8. Roootru 15.10.20 10:06 Сейчас в теме
(7) Не понял ваши слова: "проверяется не наличие какого-то любого заявления, а наличие каждого заявления". По запросу я вижу что на таб часть сотрудников он соединяет с регистром, условие по регистру идет такое чтобы совпадали с текущим документом (полями таб части), КРОМЕ ссылки. А далее проверяет по выборке заполнено ли поле регистратора (Если ЗначениеЗаполнено(Выборка.ЗаявлениеОПродолженииРегистратор) Тогда), и если да то "бракует".
9. GSokolov 320 15.10.20 10:14 Сейчас в теме
(8) В объекте формы документа СЗВ-ТД в таблице Сотрудники есть реквизиты ЗаявлениеОПпредоставлении и ЗаявлениеОПродолжении, которые отображаются на форме Мероприятий документа. Но по умолчанию они не имеют значение НЕОПРЕДЕЛЕНО,
а имеют тип документа Заявление... А в запросе они исключаются как тип НЕОПРЕДЕЛЕНО, которого в принципе не существует. Поэтому записываются даже при отсутствии ранее переданных оба значения в регистр, причём, то заявление, которого фактически нет, записывается в регистр с пустым значением документа заявление. Но как будто переданное. Как будто были переданы два заявления и о предоставлении ЭТК и о продолжении БТК. В запросе нужно заменить проверку <> НЕОПРЕДЕЛЕНО на непустой документ.
10. Roootru 15.10.20 10:22 Сейчас в теме
(9) Все я вас понял, спасибо) в 4, 6 не правильно прочитал (подумал про другое поле). И что вы в конечное итоге предлагаете? Просто чистить движения? У нас предприятие большое, кадры летят. Как думаете есть ли смысл проверку просто в коде пока закоментить?
11. GSokolov 320 15.10.20 10:31 Сейчас в теме
(10) Нет, комментить нельзя, пропадёт проверка на введённое текущее заявление, нужно заменить проверку на строку
| И СведенияОТрудовойДеятельностиРаботниковСЗВ_ТД.ЗаявлениеОПродолжении <> ЗНАЧЕНИЕ(Документ.ЗаявленияОПредоставленииСведенийОТрудовойДеятельности.ПустаяСсылка). То же и для ЗаявлениеОПредоставлении. А лучше добавить, пусть проверка на неопределенность останется. "Кривые" последние СЗВ-ТД перепровести.
12. pavlov_a 18.12.20 08:14 Сейчас в теме
(11)
Тогда лучше не запрос на проверку менять, а запрос в модуле менеджера документа, в функции ДанныеДляПроведенияДокумента (в "Запрос пакета 2"). Тогда пустые ссылки не будут попадать в запись регистра! Их не придется удалять обработкой.


|ГДЕ
| ДанныеЗаявлений.Заявление <> ЗНАЧЕНИЕ(Документ.ЗаявленияОПредоставленииСведенийОТрудовойДеятельности.ПустаяСсылка)

От себя вопрос, для чего предусмотрена запись в регистр с пустыми ссылками? для чего они могут потребоваться, есть понимание? Или это недоработка? На сайте bugboard ещё нет такой ошибки.
13. GSokolov 320 18.12.20 16:20 Сейчас в теме
(12) Скорее всего, просто баг. Можно отсекать и во втором пакете, я у себя это сделал в первом. В той же процедуре менеджера в расширении.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот