Консультация № 176337
27.01.2010, 12:44
45.00 руб.
0 16 2
Здравствуйте. 1с 7.7 ЗиК 2.3
В справочнике Сотрудник при нажатии отчетность в форме Т2 не отображается приказ и дата увольнения. Происходит это у тех кто увольнялся и вновь приходил, у остальных нормально. у них при нажатии отчетность появляется выбор периода работы. как и где это нужно исправить?Чтоб отображал дату выбранного периода.

Обсуждение

Неизвестный
27.01.2010, 23:36
общий
28.01.2010, 12:57
это ответ
Здравствуйте, DavidKuch.
Сразу говорю что с ЗиК не работал. Но исходя из вопроса могу предположить, что при формировании отчета идет проверка даты увольнения и скорее всего она сравнивается с датой приема. А если человек вновь принят на работу то проверку и не проходит.

Это можно отследить с помощью отладчика.
Открываем в конфигураторе интересующий нас отчет. Открываем его форму. Кнопка, которая формирует отчет - свойства - закладка "дополнительно" - поле формула - название процедуры.
Затем открываем модуль формы - находим нужную процедуру - устанавливаем курсор на первой строке процедуры, затем меню "действие - открыть в отладчике". Когда отладчик открылся на первой строке процедуры нажимаем F9 (т.е. устанавливаем точку останова программы).

Затем запускаем программу в режиме Предприятие и запускаем отчет на интересующем нас человеке. Программа должна сразу попасть в отладчик. В отладчике начинаете нажимать F8 (шагнуть в) и программа начнет выполнятся построчно (т.е. при каждом нажатии F8 выполняется следующая строка). И так пока не найдете проверку на дату приема.
Затем запоминаете место, где проходит проверка и в конфигураторе настраиваете модуль как вам нужно.

В общем если что еще нужно будет обращайтесь, уточню.
Неизвестный
28.01.2010, 09:42
общий
Сайко Владимир Владимирович:
Ответ близок к этому. По логике вещей да, так и надо искать. Но где?
Ответ на платный вопрос подразумевает правильный, развернутый, корректный ответ.
Неизвестный
28.01.2010, 10:01
общий
DavidKuch:
Я так понимаю, в самом отчете Т2 формируется состояние сотрудника и его кадровые изменения, которые входят только в период последнего приема. Я проверил на своих данных и у меня не получилось воспроизвести ситуацию, когда можно выбрать период отчета Т2.

Но можно задать его и явно. Вы это хотите - чтобы Вы могли задать период отчета Т2 в явном виде и сформировать его за этот период? Я правильно понял?
Неизвестный
28.01.2010, 10:39
общий
Владимир Лазурко:
А для чего отладчик создан ?????. Открываешь процедуру формирования отчета и вперед. Работы часа на два (чтобы отследить ). Просто я сам из Беларуси и с Российской ЗП не работаю. Поэтому могу обозначить направления где смотреть.
Неизвестный
28.01.2010, 11:28
общий
Сайко Владимир Владимирович:
А я сам из Украины...

Про отладчик напишите, пожалуйста, подробно, и я это внесу в Ваш ответ. Тогда Ваш ответ будет законченным. Т.е. нужно человеку объяснить про отладчик. Сможете это сделать на примере этого вопроса?
Неизвестный
28.01.2010, 11:37
общий
Сайко Владимир Владимирович:
Когда я спрашивал "но где?" - это был наводящий вопрос, чтобы Вы дополнили свой ответ.
Неизвестный
28.01.2010, 11:52
общий
Владимир Лазурко
Именно так и надо.
Неизвестный
28.01.2010, 11:53
общий
Сайко Владимир Владимирович
если можно поподробнее.
Неизвестный
28.01.2010, 12:20
общий
DavidKuch:
Легко. Открываем в конфигураторе интересующий нас отчет. Открываем его форму. Кнопка которая формирует отчет - свойство -закладка "дополнительно" - смотрим формула- название процедуры.
Затем открываем модуль формы - находим нужную процедуру - устанавливаем курсор на первой строке процедуры затем меню действие - открыть в отладчике. Когда отладчик открылся на первой строке процедуры нажимаем F9 (т.е. устанавливаем точку останова программы).
Затем запускаем программу в режиме предприятие и запускаем отчет на интересующем нас человеке. Программа должна сразу попасть в отладчик. В отладчике начинаете нажимать F8 (шагнуть в ) и программа начнет выполнятся построчно (т.е. каждое нажатие выполняется следующая строка). И так пока ненайдете проверку на дату приема. Затем запоминаете место где проходит проверка и в конфигураторе настраиваете модуль как вам нужно.
Вобщем если что еще нужно будет обращайтесь уточню
Неизвестный
28.01.2010, 14:59
общий
Сайко Владимир Владимирович
я так понимаю 1с должна использвоться только мной,чтоб другие не юзали базу?
Неизвестный
28.01.2010, 19:19
общий
DavidKuch:
Цитата: 254148
я так понимаю 1с должна использвоться только мной,чтоб другие не юзали базу?

Нет, отладка может быть и в разделенном режиме (когда могут работать несколько человек с одной базой). Но загвоздка может быть в том, что в момент останова другие пользователи не могут например, запустить глобальный модуль (при входе в систему), если останов во время транзакции (запись, проведение), то и никто из пользователей не сможет ничего записать.
Неизвестный
28.01.2010, 21:17
общий
DavidKuch:
Работать в отладчике можно и на общей базе, а вот отлаживать очень проблемно т.к. приходится постоянно выгонять пользователей поэтому все эксперименты проще проводить на копии. И пользователи не ругаются на частые простои и базу запароть не страшно т.к. есть рабочая копия.
Неизвестный
28.01.2010, 22:41
общий
Естественно, все эксперименты на копии. Это аксиома.
Цитата: 248348
Работать в отладчике можно и на общей базе, а вот отлаживать очень проблемно
Верно, так более точно сказано.
Неизвестный
30.01.2010, 09:11
общий
это ответ
Здравствуйте, DavidKuch.

По кнопке Отчетность из элемента справочника Сотрудники формируется список доступных форм отчетности в зависимости от состояния этого элемента - записан/не записан и т.д.
При выборе отчета "Форма Т2" вычисляется текущая дата использования периодических реквизитов для этого сотрудника (обычно это рабочая дата) и по ней вычисляется текущий период работы сотрудника:
Код:
ДатаОтчета = ИспользоватьДату();
ПериодыРаботы = глПолучитьПериодыРаботы(ТекущийЭлемент());
Если ПериодыРаботы.РазмерСписка()>1 Тогда
Период = "";
ПериодыРаботы.ВыбратьЗначение(Период,,,,1);
ДатаОтчета = Дата(Прав(Период,8));
КонецЕсли;

И если в полученном списке оказываются более одного периодов работы этого сотрудника, то выдается запрос на выбор нужного периода для отчета.

Форма Т-2 при открытии получает параметры - Сотрудник, дату актуальности отчета (дата окончания выбранного в списке периода) и флаг режима таблицы - ввод данных или просмотр.

В самом отчете Т-2 в процедуре ПриОткрытии() по дате периода ищется последний приказ о приеме на работу и дата найденного приказа является началом периода отчета.

Чтобы Вы могли самостоятельно изменить период отчета в форме, поместите на форму 2 поля ввода рядом с кнопками Сохранить и Закрыть. Идентификаторы этих ролей будут как и у переменных в этом модуле: ДатаНачала, и ДатаОкончания тип Дата и для удобства выбора периода кнопку, в формуле которой пропишем ВвестиПериод(ДатаНачала,ДатаОкончания). Поместим текстовые метки для описания этих реквизитов: "Период с:" и "по".


Но этого недостаточно - нужно еще и обновить отчет. Далее добавим кнопку Сформировать, в формулу которой поместим следующее: ПериодЗаданВручную=1; ПриОткрытии().
В модуле обработки добавим переменную модуля, они находяятся в самом начале (добавленная строка выделена цветом)
Код:
Перем Сотрудник;
Перем СтарыеЗначенияТаблицы;
Перем ТолькоПросмотр; // флаг, если форму открыли только для просмотра
Перем ПериодЗаданВручную; // флаг того, что период отчета выбран в форме диалога

После этого в конце модуля, после описания процедур и функция добавим такую строку:

ПериодЗаданВручную=0;,

а в процедуре ПриОткрытии() изменим код на следующий (цветом выделены добавленные строки):
Код:
Процедура ПриОткрытии()

Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда
ТекущийСотрудник = Форма.Параметр.Получить("Сотрудник");
Если ПериодЗаданВручную=0 Тогда
ДатаОкончания = Форма.Параметр.Получить("ДатаАктуальности");
ТолькоПросмотр = Число(Форма.Параметр.Получить("ТолькоПросмотр"));
Если (Форма.МодальныйРежим()=1)
или (ПустоеЗначение(ТекущийСотрудник)=1)
или (ПустоеЗначение(ДатаОкончания)=1) Тогда
СтатусВозврата(0); Возврат
КонецЕсли;
Сотрудник = СоздатьОбъект("Справочник.Сотрудники");
Сотрудник.НайтиЭлемент(ТекущийСотрудник);
// найдем приказ о приеме сотрудника, если он отсутствует, то этот сотрудник
// на дату ДатаОкончания не был принят на работу, поэтому Форма Т-2 не должна открываться
Приказ = глПриказПоСотруднику(Сотрудник,ДатаОкончания,"ПриказОПриемеНаРаботу",-1);
Если ПустоеЗначение(Приказ)=1 Тогда
СтатусВозврата(0); Возврат
КонецЕсли;
ДатаНачала = Приказ.ДатаПриема;
Иначе
// Приказ используется в дальнейшем, его нужно найти
Приказ = глПриказПоСотруднику(Сотрудник,ДатаОкончания,"ПриказОПриемеНаРаботу",-1);
Если ПустоеЗначение(Приказ)=1 Тогда
Предупреждение("За указанный период нет приказа о приемена работу");
Возврат;
КонецЕсли;
КонецЕсли; //ПериодЗаданВручную=0


... // далее по тексту


Прокомментирую. При открытии формы переменной ПериодЗаданВручную присваивается нулевое значение, а при нажатии кнопки Сформировать они принимает значение 1. Это нужно для того, чтобы разделять способ получения периода отчета - по переданным параметрам или введенным вручную на форме отчета.

Успехов!
С уважением, Владимир.
Неизвестный
01.02.2010, 12:11
общий
Владимир Лазурко
Не помогло .ща выложу скрины.
1
2
3
4
Неизвестный
01.02.2010, 15:15
общий
Не помогло... Т.е. код изменили в точности с моей инстукцией, а не работает?
По скринам вижу, что в XI части не заполнены поля.
Сейчас отремонтируем.
Форма ответа