Движения документа по регистрам, очередное чудо
11.09.2012
06:18
#1
"День добрый. Ниже приведен фрагмент кода (извиняюсь за вид, не знаю, как вставить, чтобы красиво было):
Процедура ОбработкаПроведения(Отказ, Режим)
//структура, содержащая имена регистров сведений по которым надо проводить документ
Перем СтруктураПроведенияПоРегистрамНакопления;
// Заголовок для сообщений об ошибках проведения.
Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(Ссылка);
РезультатЗапросаПоШапке = СформироватьЗапросПоШапке();
// Получим реквизиты шапки из запроса
ВыборкаПоШапкеДокумента = РезультатЗапросаПоШапке.Выбрать();
Если ВыборкаПоШапкеДокумента.Следующий() Тогда
//Надо позвать проверку заполнения реквизитов шапки
ПроверитьЗаполнениеШапки(ВыборкаПоШапкеДокумента, Отказ, Заголовок);
// Движения стоит добавлять, если в проведении еще не отказано (отказ =ложь)
Если НЕ Отказ Тогда
// получим учетную политику
УпрощенныйУчетНДФЛ = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации"), Организация, "УпрощенныйУчетНДФЛ");
// ведется ли учет задолженности в разрезе периодов возникновения задолженности
УчетЗадолженностиПоМесяцам = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации"), Организация, "УчетЗадолженностиПоМесяцам");
// получим реквизиты табличной части
ВыборкаПоНачислениям = СформироватьЗапросПоНачисления(ВыборкаПоШапкеДокумента).Выбрать();
Пока ВыборкаПоНачислениям.СледующийПоЗначениюПоля("НомерСтроки") Цикл
// проверим очередную строку табличной части
ПроверитьЗаполнениеСтрокиРаботникаОрганизации(ВыборкаПоШапкеДокумента, ВыборкаПоНачислениям, Отказ, Заголовок);
Если НЕ Отказ Тогда
// В регистр расчета начисления пишем только для работников организации
// Комментарий поставлен в начале 2010 г
//Если НЕ ВыборкаПоНачислениям.ФизлицоАкционер Тогда
// ДобавитьСтрокуДополнительныхНачислений(ВыборкаПоШапкеДокумента, ВыборкаПоНачислениям);
// СтруктураПроведенияПоРегистрамНакопления = Новый Структура("НДФЛСведенияОДоходах, НДФЛРасчетыСБюджетом, ВзаиморасчетыСРаботникамиОрганизаций");
//Иначе
// СтруктураПроведенияПоРегистрамНакопления = Новый Структура("НДФЛСведенияОДоходах, НДФЛРасчетыСБюджетом");
//КонецЕсли;
//
//ДобавитьСтрокуВДвиженияПоРегистрамНакопления(ВыборкаПоШапкеДокумента, ВыборкаПоНачислениям, СтруктураПроведенияПоРегистрамНакопления, УпрощенныйУчетНДФЛ, УчетЗадолженностиПоМесяцам);
Если НЕ ВыборкаПоНачислениям.ФизлицоАкционер Тогда
ДобавитьСтрокуДополнительныхНачислений(ВыборкаПоШапкеДокумента, ВыборкаПоНачислениям);
СтруктураПроведенияПоРегистрамНакопления = Новый Структура("ВзаиморасчетыСРаботникамиОрганизаций,НДФЛСведенияОДоходах");
ДобавитьСтрокуВДвиженияПоРегистрамНакопления(ВыборкаПоШапкеДокумента, ВыборкаПоНачислениям, СтруктураПроведенияПоРегистрамНакопления, УпрощенныйУчетНДФЛ, УчетЗадолженностиПоМесяцам);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Т.е. документ должен делать движения по двум регистрам. Вопрос: КАК надо создать и провести документ, чтобы движения по регистру ВзаиморасчетыСРаботникамиОрганизаций были, а по регистру НДФЛСведенияОДоходах не было? Наши в один голос твердят, что это не возможно. Однако смотрю в базу, а там именно это и вижу. У одного пользователя за январь, февраль, март, апрель движения есть, май, июнь - движений нет, июль, август, сентябрь - движения есть, октябрь, ноябрь,декабрь - движений нет. Такие же документы создавали и другие пользователи, но у них все нормально, чертовски талантливой только одна оказалась.
ЗЫ: Речь идет ещё про 8.1."
Процедура ОбработкаПроведения(Отказ, Режим)
//структура, содержащая имена регистров сведений по которым надо проводить документ
Перем СтруктураПроведенияПоРегистрамНакопления;
// Заголовок для сообщений об ошибках проведения.
Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(Ссылка);
РезультатЗапросаПоШапке = СформироватьЗапросПоШапке();
// Получим реквизиты шапки из запроса
ВыборкаПоШапкеДокумента = РезультатЗапросаПоШапке.Выбрать();
Если ВыборкаПоШапкеДокумента.Следующий() Тогда
//Надо позвать проверку заполнения реквизитов шапки
ПроверитьЗаполнениеШапки(ВыборкаПоШапкеДокумента, Отказ, Заголовок);
// Движения стоит добавлять, если в проведении еще не отказано (отказ =ложь)
Если НЕ Отказ Тогда
// получим учетную политику
УпрощенныйУчетНДФЛ = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации"), Организация, "УпрощенныйУчетНДФЛ");
// ведется ли учет задолженности в разрезе периодов возникновения задолженности
УчетЗадолженностиПоМесяцам = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации"), Организация, "УчетЗадолженностиПоМесяцам");
// получим реквизиты табличной части
ВыборкаПоНачислениям = СформироватьЗапросПоНачисления(ВыборкаПоШапкеДокумента).Выбрать();
Пока ВыборкаПоНачислениям.СледующийПоЗначениюПоля("НомерСтроки") Цикл
// проверим очередную строку табличной части
ПроверитьЗаполнениеСтрокиРаботникаОрганизации(ВыборкаПоШапкеДокумента, ВыборкаПоНачислениям, Отказ, Заголовок);
Если НЕ Отказ Тогда
// В регистр расчета начисления пишем только для работников организации
// Комментарий поставлен в начале 2010 г
//Если НЕ ВыборкаПоНачислениям.ФизлицоАкционер Тогда
// ДобавитьСтрокуДополнительныхНачислений(ВыборкаПоШапкеДокумента, ВыборкаПоНачислениям);
// СтруктураПроведенияПоРегистрамНакопления = Новый Структура("НДФЛСведенияОДоходах, НДФЛРасчетыСБюджетом, ВзаиморасчетыСРаботникамиОрганизаций");
//Иначе
// СтруктураПроведенияПоРегистрамНакопления = Новый Структура("НДФЛСведенияОДоходах, НДФЛРасчетыСБюджетом");
//КонецЕсли;
//
//ДобавитьСтрокуВДвиженияПоРегистрамНакопления(ВыборкаПоШапкеДокумента, ВыборкаПоНачислениям, СтруктураПроведенияПоРегистрамНакопления, УпрощенныйУчетНДФЛ, УчетЗадолженностиПоМесяцам);
Если НЕ ВыборкаПоНачислениям.ФизлицоАкционер Тогда
ДобавитьСтрокуДополнительныхНачислений(ВыборкаПоШапкеДокумента, ВыборкаПоНачислениям);
СтруктураПроведенияПоРегистрамНакопления = Новый Структура("ВзаиморасчетыСРаботникамиОрганизаций,НДФЛСведенияОДоходах");
ДобавитьСтрокуВДвиженияПоРегистрамНакопления(ВыборкаПоШапкеДокумента, ВыборкаПоНачислениям, СтруктураПроведенияПоРегистрамНакопления, УпрощенныйУчетНДФЛ, УчетЗадолженностиПоМесяцам);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Т.е. документ должен делать движения по двум регистрам. Вопрос: КАК надо создать и провести документ, чтобы движения по регистру ВзаиморасчетыСРаботникамиОрганизаций были, а по регистру НДФЛСведенияОДоходах не было? Наши в один голос твердят, что это не возможно. Однако смотрю в базу, а там именно это и вижу. У одного пользователя за январь, февраль, март, апрель движения есть, май, июнь - движений нет, июль, август, сентябрь - движения есть, октябрь, ноябрь,декабрь - движений нет. Такие же документы создавали и другие пользователи, но у них все нормально, чертовски талантливой только одна оказалась.
ЗЫ: Речь идет ещё про 8.1."
11.09.2012
10:04
#3
"Процедура ДобавитьСтрокуВДвиженияПоРегистрамНакопления(ВыборкаПоШапкеДокумента, ВыборкаПоТЧ,
СтруктураПроведенияПоРегистрамНакопления, УпрощенныйУчетНДФЛ, УчетЗадолженностиПоМесяцам)
ИмяРегистра = "НДФЛСведенияОДоходах";
Если СтруктураПроведенияПоРегистрамНакопления.Свойство(ИмяРегистра) Тогда
Движение = Движения[ИмяРегистра].Добавить();
// Свойства
Движение.Период = ВыборкаПоШапкеДокумента.ДатаРегистрации;
// Измерения
Движение.Организация = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
Движение.ФизЛицо = ВыборкаПоТЧ.ФизЛицо;
Движение.КодДохода = ВидРасчета.КодДоходаНДФЛ;
Движение.ПериодРегистрации = НачалоМесяца(ВыборкаПоШапкеДокумента.ДатаРегистрации);
// Ресурсы
Движение.СуммаДохода = ВыборкаПоТЧ.Результат;
Движение.СуммаВычета = 0;
// Реквизиты
Движение.ОбособленноеПодразделение = ВыборкаПоШапкеДокумента.ОбособленноеПодразделение;
//Движение.КодВычета = Справочники.ВычетыНДФЛ.Код601;
Движение.ИсчисленоИзЗарплаты = Истина;
КонецЕсли;
ИмяРегистра = "НДФЛРасчетыСБюджетом";
Если СтруктураПроведенияПоРегистрамНакопления.Свойство(ИмяРегистра) Тогда
Если ВыборкаПоТЧ.НДФЛ <> 0 Тогда
Движение = Движения[ИмяРегистра].Добавить();
// Свойства
Движение.Период = ВыборкаПоШапкеДокумента.ДатаРегистрации;
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
// Измерения
Движение.Организация = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
Движение.ФизЛицо = ВыборкаПоТЧ.ФизЛицо;
Движение.СтавкаНалогообложенияРезидента = ВидРасчета.КодДоходаНДФЛ.СтавкаНалогообложенияРезидента;
Движение.МесяцНалоговогоПериода = ВыборкаПоШапкеДокумента.ДатаРегистрации;
// Ресурсы
Движение.Налог = ВыборкаПоТЧ.НДФЛ;
// Реквизиты
Движение.ОбособленноеПодразделение = ВыборкаПоШапкеДокумента.ОбособленноеПодразделение;
Движение.ВидСтроки = Перечисления.НДФЛРасчетыСБюджетомВидСтроки.Начисление;
Движение.ИсчисленоИзЗарплаты = Истина;
//Движение.КодДохода = ВидРасчета.КодДоходаНДФЛ;
Если УпрощенныйУчетНДФЛ Тогда // сразу же, не дожидаясь выплаты, регистрируем факт удержания налога
Движение = Движения[ИмяРегистра].Добавить();
// Свойства
Движение.Период = ВыборкаПоШапкеДокумента.ДатаРегистрации;
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
// Измерения
Движение.Организация = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
Движение.ФизЛицо = ВыборкаПоТЧ.ФизЛицо;
Движение.СтавкаНалогообложенияРезидента = ВидРасчета.КодДоходаНДФЛ.СтавкаНалогообложенияРезидента;
Движение.МесяцНалоговогоПериода = ВыборкаПоШапкеДокумента.ДатаРегистрации;
// Ресурсы
Движение.Налог = ВыборкаПоТЧ.НДФЛ;
// Реквизиты
Движение.ОбособленноеПодразделение = ВыборкаПоШапкеДокумента.ОбособленноеПодразделение;
Движение.ВидСтроки = Перечисления.НДФЛРасчетыСБюджетомВидСтроки.Удержание;
Движение.КодДохода = ВидРасчета.КодДоходаНДФЛ;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИмяРегистра = "ВзаиморасчетыСРаботникамиОрганизаций";
Если СтруктураПроведенияПоРегистрамНакопления.Свойство(ИмяРегистра) Тогда
Движение = Движения[ИмяРегистра].Добавить();
// Свойства
Движение.Период = ВыборкаПоШапкеДокумента.ДатаРегистрации;
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
// Измерения
Движение.Организация = ВыборкаПоШапкеДокумента.Организация;
Движение.ФизЛицо = ВыборкаПоТЧ.ФизЛицо;
Если УчетЗадолженностиПоМесяцам Тогда
Движение.ПериодВзаиморасчетов = НачалоМесяца(ВыборкаПоШапкеДокумента.ДатаРегистрации);
КонецЕсли;
// Ресурсы
Движение.СуммаВзаиморасчетов = ВыборкаПоТЧ.Результат - ВыборкаПоТЧ.НДФЛ;
КонецЕсли;
КонецПроцедуры // ДобавитьСтрокуВДвиженияПоРегистрамНакопления"
СтруктураПроведенияПоРегистрамНакопления, УпрощенныйУчетНДФЛ, УчетЗадолженностиПоМесяцам)
ИмяРегистра = "НДФЛСведенияОДоходах";
Если СтруктураПроведенияПоРегистрамНакопления.Свойство(ИмяРегистра) Тогда
Движение = Движения[ИмяРегистра].Добавить();
// Свойства
Движение.Период = ВыборкаПоШапкеДокумента.ДатаРегистрации;
// Измерения
Движение.Организация = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
Движение.ФизЛицо = ВыборкаПоТЧ.ФизЛицо;
Движение.КодДохода = ВидРасчета.КодДоходаНДФЛ;
Движение.ПериодРегистрации = НачалоМесяца(ВыборкаПоШапкеДокумента.ДатаРегистрации);
// Ресурсы
Движение.СуммаДохода = ВыборкаПоТЧ.Результат;
Движение.СуммаВычета = 0;
// Реквизиты
Движение.ОбособленноеПодразделение = ВыборкаПоШапкеДокумента.ОбособленноеПодразделение;
//Движение.КодВычета = Справочники.ВычетыНДФЛ.Код601;
Движение.ИсчисленоИзЗарплаты = Истина;
КонецЕсли;
ИмяРегистра = "НДФЛРасчетыСБюджетом";
Если СтруктураПроведенияПоРегистрамНакопления.Свойство(ИмяРегистра) Тогда
Если ВыборкаПоТЧ.НДФЛ <> 0 Тогда
Движение = Движения[ИмяРегистра].Добавить();
// Свойства
Движение.Период = ВыборкаПоШапкеДокумента.ДатаРегистрации;
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
// Измерения
Движение.Организация = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
Движение.ФизЛицо = ВыборкаПоТЧ.ФизЛицо;
Движение.СтавкаНалогообложенияРезидента = ВидРасчета.КодДоходаНДФЛ.СтавкаНалогообложенияРезидента;
Движение.МесяцНалоговогоПериода = ВыборкаПоШапкеДокумента.ДатаРегистрации;
// Ресурсы
Движение.Налог = ВыборкаПоТЧ.НДФЛ;
// Реквизиты
Движение.ОбособленноеПодразделение = ВыборкаПоШапкеДокумента.ОбособленноеПодразделение;
Движение.ВидСтроки = Перечисления.НДФЛРасчетыСБюджетомВидСтроки.Начисление;
Движение.ИсчисленоИзЗарплаты = Истина;
//Движение.КодДохода = ВидРасчета.КодДоходаНДФЛ;
Если УпрощенныйУчетНДФЛ Тогда // сразу же, не дожидаясь выплаты, регистрируем факт удержания налога
Движение = Движения[ИмяРегистра].Добавить();
// Свойства
Движение.Период = ВыборкаПоШапкеДокумента.ДатаРегистрации;
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
// Измерения
Движение.Организация = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
Движение.ФизЛицо = ВыборкаПоТЧ.ФизЛицо;
Движение.СтавкаНалогообложенияРезидента = ВидРасчета.КодДоходаНДФЛ.СтавкаНалогообложенияРезидента;
Движение.МесяцНалоговогоПериода = ВыборкаПоШапкеДокумента.ДатаРегистрации;
// Ресурсы
Движение.Налог = ВыборкаПоТЧ.НДФЛ;
// Реквизиты
Движение.ОбособленноеПодразделение = ВыборкаПоШапкеДокумента.ОбособленноеПодразделение;
Движение.ВидСтроки = Перечисления.НДФЛРасчетыСБюджетомВидСтроки.Удержание;
Движение.КодДохода = ВидРасчета.КодДоходаНДФЛ;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИмяРегистра = "ВзаиморасчетыСРаботникамиОрганизаций";
Если СтруктураПроведенияПоРегистрамНакопления.Свойство(ИмяРегистра) Тогда
Движение = Движения[ИмяРегистра].Добавить();
// Свойства
Движение.Период = ВыборкаПоШапкеДокумента.ДатаРегистрации;
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
// Измерения
Движение.Организация = ВыборкаПоШапкеДокумента.Организация;
Движение.ФизЛицо = ВыборкаПоТЧ.ФизЛицо;
Если УчетЗадолженностиПоМесяцам Тогда
Движение.ПериодВзаиморасчетов = НачалоМесяца(ВыборкаПоШапкеДокумента.ДатаРегистрации);
КонецЕсли;
// Ресурсы
Движение.СуммаВзаиморасчетов = ВыборкаПоТЧ.Результат - ВыборкаПоТЧ.НДФЛ;
КонецЕсли;
КонецПроцедуры // ДобавитьСтрокуВДвиженияПоРегистрамНакопления"
11.09.2012
10:24
#5
Ты писал:
>Видимо все самое интересное в "ДобавитьСтрокуВДвиженияПоРегистрамНакопления()".
я ответила. Я там особо интересного не вижу. Это процедура из модуля документа.
>Видимо все самое интересное в "ДобавитьСтрокуВДвиженияПоРегистрамНакопления()".
я ответила. Я там особо интересного не вижу. Это процедура из модуля документа.
11.09.2012
10:58
#6
А ошибка вообще воспроизводится? А то может это было в каком-то релизе с ошибкой сформировано, а сейчас если перепровести, то все встанет на места.
11.09.2012
11:52
#7
нет, не воспроизводится. Если в текущей базе провести эти документы - все движения есть.
Я не поленилась, восстановила базу за июнь 2010, там документ за май только что создан. Движений по нужному регистру нет, перепровожу - есть. Всячески извращалась, пытаясь создать проведенный документ без движений - у меня не получается. А она ведь и дальше таких настряпала.
При этом напоминаю, что в это же время у других пользователей такого нет.
Я не поленилась, восстановила базу за июнь 2010, там документ за май только что создан. Движений по нужному регистру нет, перепровожу - есть. Всячески извращалась, пытаясь создать проведенный документ без движений - у меня не получается. А она ведь и дальше таких настряпала.
При этом напоминаю, что в это же время у других пользователей такого нет.
Читают тему
(гостей: 1)