Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) ЖР Зарплата (число прочтений - 2333 )
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
ЖР Зарплата
07. Ноября 2011 :: 09:54
Печать  
Насколько правильно будет исправить записи в ЖР заплата прямым запросом?
Бухгалтеру нужно что бы запись с видом расчета НДФЛ держаный была равна записи с видом расчета НДФЛ.
И есть ли готовые примеры у кого?
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: ЖР Зарплата
Ответ #1 - 07. Ноября 2011 :: 10:40
Печать  
Есть ли описание полей журнала расчетов ЗП?
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ЖР Зарплата
Ответ #2 - 07. Ноября 2011 :: 20:19
Печать  
mozer писал(а) 07. Ноября 2011 :: 09:54:
Насколько правильно будет исправить записи в ЖР заплата прямым запросом?
Бухгалтеру нужно что бы запись с видом расчета НДФЛ держаный была равна записи с видом расчета НДФЛ.
И есть ли готовые примеры у кого?


Для этого можно использовать стандартные методы 1С по работе с записями ЖР.

Описание таблиц журнала расчетов - не сложные, можно самому сделать за несколько минут (Вам нужно менять поле "RESULT").
Изменено:
"
IDDOC - Документ, который ввел запись, IDDOC из таблицы журналов (_1SJOURN)
IDS - ID - Справочника объекта (Сотрудника)
IDALG - ID (десятичный) Вида расчета.
ORDER_ - Приоритет записи (из Вида расчета).
RESULT - Результат записи
DATEB - Дата начала периода действия
DATEE - Дата конца периода действия
PERIOD - Период Регистрации
RECALC - битовое поле содержащее статус записи:
&1 (0000 0000 0000 0001)  - (Рассчитана = 1) расчитанная;
&2 (0000 0000 0000 0010)  - (Сторно = 1) сторнированная;
&4 (0000 0000 0000 0100) - (Фиксирована = 1) (Сторно = 1) фиксированная + сторнированная (фактически равно 6);
&8 (0000 0000 0000 1000) - (Исправлена = 1) отредактированная в ручную;
&16 - (0000 0000 0001 0000) (Фиксирована = 1) фиксированная;
&32 - (0000 0000 0010 0000) (Перерасчет = 1) перерасчет
Соответветственно:
Фиксирована + Сторно + Рассчитана = (0000 0000 0000 0111) = 7

ID - уникальный ID для записи журнала расчетов.
DP - ?.
IDPARDOC - Родительский документ
IDRECALC – Ссылка на запись журнала расчетов. Имеет смысл только для записи-перерасчета
FF - Графы отбора (Общие реквизиты документов с включенными галочками в списке Графы Отбора).
SP - Реквизиты журнала расчетов.
"
« Последняя редакция: 08. Ноября 2011 :: 08:11 - pvase »  
Наверх
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: ЖР Зарплата
Ответ #3 - 09. Ноября 2011 :: 02:07
Печать  
pvase писал(а) 07. Ноября 2011 :: 20:19:
mozer писал(а) 07. Ноября 2011 :: 09:54:
Насколько правильно будет исправить записи в ЖР заплата прямым запросом?
Бухгалтеру нужно что бы запись с видом расчета НДФЛ держаный была равна записи с видом расчета НДФЛ.
И есть ли готовые примеры у кого?


Для этого можно использовать стандартные методы 1С по работе с записями ЖР.

Описание таблиц журнала расчетов - не сложные, можно самому сделать за несколько минут (Вам нужно менять поле "RESULT").
Изменено:
"
IDDOC - Документ, который ввел запись, IDDOC из таблицы журналов (_1SJOURN)
IDS - ID - Справочника объекта (Сотрудника)
IDALG - ID (десятичный) Вида расчета.
ORDER_ - Приоритет записи (из Вида расчета).
RESULT - Результат записи
DATEB - Дата начала периода действия
DATEE - Дата конца периода действия
PERIOD - Период Регистрации
RECALC - битовое поле содержащее статус записи:
&1 (0000 0000 0000 0001)  - (Рассчитана = 1) расчитанная;
&2 (0000 0000 0000 0010)  - (Сторно = 1) сторнированная;
&4 (0000 0000 0000 0100) - (Фиксирована = 1) (Сторно = 1) фиксированная + сторнированная (фактически равно 6);
&8 (0000 0000 0000 1000) - (Исправлена = 1) отредактированная в ручную;
&16 - (0000 0000 0001 0000) (Фиксирована = 1) фиксированная;
&32 - (0000 0000 0010 0000) (Перерасчет = 1) перерасчет
Соответветственно:
Фиксирована + Сторно + Рассчитана = (0000 0000 0000 0111) = 7

ID - уникальный ID для записи журнала расчетов.
DP - ?.
IDPARDOC - Родительский документ
IDRECALC – Ссылка на запись журнала расчетов. Имеет смысл только для записи-перерасчета
FF - Графы отбора (Общие реквизиты документов с включенными галочками в списке Графы Отбора).
SP - Реквизиты журнала расчетов.
"

Спасибо!
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: ЖР Зарплата
Ответ #4 - 09. Ноября 2011 :: 07:43
Печать  
Написал запрос на выборку и обновление записей.
Не уверен во втором будет ли работать и как- то возможно это сделать не через цикл, а одним запросом

Код
Выбрать все
ТекстЗапросаВыборкиЗаписей = "
	|SELECT
	|	ЖР.ID Запись,
	|	ЖД.IDDOC [ДокументСсылка $Документ],
	|	ЖД.IDDOCDEF ДокументСсылка_вид,
	|	ЖР.IDS [СотрудникСсылка $Справочник.Сотрудники],
	|	ЖР.IDALG [ВидРасчета $ВидРасчета],
	|	ЖР.Result Результат
	|FROM
	|	$ЖурналРасчетов.Зарплата ЖР
	|LEFT JOIN
	|	_1SJOURN ЖД ON ЖД.IDDOC = ЖР.IDDOC
	|WHERE
	|	ЖД.IDDOCDEF = $ВидДокумента.НачислениеЗаработнойПлаты AND
	|	(ЖР.IDALG = $ВидРасчета.НДФЛ OR ЖР.IDALG = $ВидРасчета.НДФЛУдержанный) AND
	|	(ЖР.DATEB = :НачДата AND ЖР.DATEE = :КонДата~)
	|";
 



Код
Выбрать все
ТекстЗапросаОбновления = "
		|UPDATE
		|	$ЖурналРасчетов.Зарплата
		|SET
		|	ЖР.Result = :Результат
		|FROM
		|	$ЖурналРасчетов.Зарплата ЖР
		|WHERE
		|	ЖР.ID = :Ссылка
		|
		|";
 

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ЖР Зарплата
Ответ #5 - 09. Ноября 2011 :: 09:13
Печать  
(4) в update вместо предложения from
ставишь свой первый select из 4.
Только сначала проверь на копии потому-что если select
не отвечает твоей логике то изменения
могут будут слишком фатальными.
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: ЖР Зарплата
Ответ #6 - 10. Ноября 2011 :: 03:27
Печать  
Z1 писал(а) 09. Ноября 2011 :: 09:13:
(4) в update вместо предложения from
ставишь свой первый select из 4.
Только сначала проверь на копии потому-что если select
не отвечает твоей логике то изменения
могут будут слишком фатальными.

Что то я видимо не до понял ...
Код
Выбрать все
дДатаНачала = НачГода(ТекущаяДата());
	дДатаКонца = КонГода(ТекущаяДата());

	НаборЗаписей = СоздатьОбъект("ODBCRecordset");
	ТекстЗапросаВыборкиЗаписей = "
	|SELECT
	|	ЖР.ID Запись,
	|	ЖД.IDDOC [ДокументСсылка $Документ],
	|	ЖД.IDDOCDEF ДокументСсылка_вид,
	|	ЖР.IDS [СотрудникСсылка $Справочник.Сотрудники],
	|	ЖР.IDALG [ВидРасчета $ВидРасчета],
	|	ЖР.Result Результат
	|FROM
	|	$ЖурналРасчетов.Зарплата ЖР
	|LEFT JOIN
	|	_1SJOURN ЖД ON ЖД.IDDOC = ЖР.IDDOC
	|WHERE
	|	ЖД.IDDOCDEF = $ВидДокумента.НачислениеЗаработнойПлаты AND
	|	(ЖР.IDALG = $ВидРасчета.НДФЛ OR ЖР.IDALG = $ВидРасчета.НДФЛУдержанный) AND
	|	(ЖР.DATEB = :НачДата AND ЖР.DATEE = :КонДата~)
	|";

	итВыборка = СоздатьОбъект("ИндексированнаяТаблица");
	НаборЗаписей.УстановитьТекстовыйПараметр("НачДата",дДатаНачала);
	НаборЗаписей.УстановитьТекстовыйПараметр("КонДата",дДатаКонца);

	НаборЗаписей.ВыполнитьИнструкцию(ТекстЗапросаВыборкиЗаписей,итВыборка);

	итВыборка.ВыбратьСтроки();
	Пока итВыборка.ПолучитьСтроку() = 1 Цикл
		Сообщить(Строка(итВыборка.ВидРасчета));
		Если итВыборка.ВидРасчета.Код <> "НДФЛУдержанный" Тогда
			Продолжить;
		КонецЕсли;
		ТекстЗапросаОбновления = "
		|UPDATE
		|	$ЖурналРасчетов.Зарплата
		|SET
		|	ЖР.Result = :Результат
		|FROM
		|	$ЖурналРасчетов.Зарплата ЖР
		|WHERE
		|	ЖР.ID = :Ссылка
		|
		|";

		НаборЗаписей.УстановитьТекстовыйПараметр("Результат",итВыборка.Результат);
		НаборЗаписей.УстановитьТекстовыйПараметр("Ссылка",итВыборка.Запись);
		НаборЗаписей.ВыполнитьИнструкцию(ТекстЗапросаОбновления);
	КонецЦикла;
 



Это то что я на ваял. Единственное на понятно как это соединит в 1 запрос. Так как предложено постом выше не прокакит. Он обновит то что есть на тоже самое, а нужно чтобы все записи с НДФЛУдержанный = Записям НДФЛ по результату.

Да и в приведенном примере похоже тоже ошибка. ничего не поменялось!  Смущённый
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: ЖР Зарплата
Ответ #7 - 10. Ноября 2011 :: 03:41
Печать  
Похоже что вот так правильней будет
Код
Выбрать все
	  дДатаНачала = НачГода(ТекущаяДата());
	дДатаКонца = КонГода(ТекущаяДата());

	НаборЗаписей = СоздатьОбъект("ODBCRecordset");
	ТекстЗапросаВыборкиЗаписей = "
	|SELECT
	|	ЖР.ID Запись,
	|	ЖД.IDDOC [ДокументСсылка $Документ],
	|	ЖД.IDDOCDEF ДокументСсылка_вид,
	|	ЖР.IDS [СотрудникСсылка $Справочник.Сотрудники],
	|	ЖР.IDALG [ВидРасчета $ВидРасчета],
	|	ЖР.Result Результат
	|FROM
	|	$ЖурналРасчетов.Зарплата ЖР
	|LEFT JOIN
	|	_1SJOURN ЖД ON ЖД.IDDOC = ЖР.IDDOC
	|WHERE
	|	ЖД.IDDOCDEF = $ВидДокумента.НачислениеЗаработнойПлаты AND
	|	(ЖР.IDALG = $ВидРасчета.НДФЛ OR ЖР.IDALG = $ВидРасчета.НДФЛУдержанный) AND
	|	(ЖР.DATEB = :НачДата AND ЖР.DATEE = :КонДата~)
	|";

	итВыборка = СоздатьОбъект("ИндексированнаяТаблица");
	НаборЗаписей.УстановитьТекстовыйПараметр("НачДата",дДатаНачала);
	НаборЗаписей.УстановитьТекстовыйПараметр("КонДата",дДатаКонца);

	НаборЗаписей.ВыполнитьИнструкцию(ТекстЗапросаВыборкиЗаписей,итВыборка);

	итВыборка.Группировать("ДокументСсылка:ДокументСсылка","Результат",1);
	итВыборка.ВыбратьСтроки();
	Пока итВыборка.ПолучитьСтроку() = 1 Цикл
		тзЗаписиДокумента = итВыборка.тзПотомки;
		пРезультат = 0;
		тзЗаписиДокумента.ВыбратьСтроки();
		Пока тзЗаписиДокумента.ПолучитьСтроку() = 1 Цикл
			Если тзЗаписиДокумента.ВидРасчета.Код = "НДФЛ" Тогда
				пРезультат = тзЗаписиДокумента.Результат;
			КонецЕсли;
		КонецЦикла;


		Если пРезультат <> 0 Тогда
			тзЗаписиДокумента.ВыбратьСтроки();
			Пока тзЗаписиДокумента.ПолучитьСтроку() = 1 Цикл
				Если тзЗаписиДокумента.ВидРасчета.Код = "НДФЛ" Тогда
					Продолжить;
				КонецЕсли;
				ТекстЗапросаОбновления = "
				|UPDATE
				|	$ЖурналРасчетов.Зарплата
				|SET
				|	ЖР.Result = :Результат
				|FROM
				|	$ЖурналРасчетов.Зарплата ЖР
				|WHERE
				|	ЖР.ID = :Ссылка
				|
				|";

				НаборЗаписей.УстановитьТекстовыйПараметр("Результат",пРезультат);
				НаборЗаписей.УстановитьТекстовыйПараметр("Ссылка",тзЗаписиДокумента.Запись);
				НаборЗаписей.ВыполнитьИнструкцию(ТекстЗапросаОбновления);
			КонецЦикла;
		КонецЕсли;

	КонецЦикла;
 

  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: ЖР Зарплата
Ответ #8 - 10. Ноября 2011 :: 07:03
Печать  
При выполнении обновления полей из поста выше ошибка
State 42000, native 4104, message [Microsoft][ODBC SQL Server Driver][SQL Server]The multi-part identifier ЖР.Result
  
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ЖР Зарплата
Ответ #9 - 10. Ноября 2011 :: 07:25
Печать  
по поводу цикла, можно воспользоваться ВыполнитьSQL_ИзТЗ(), загнать тз в sql в темп таблицу и обновлять с этой таблицы.
п.с.: вроде бы перед update нужно добавить set nocount on
  
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ЖР Зарплата
Ответ #10 - 10. Ноября 2011 :: 09:42
Печать  
Примерно так:
Код
Выбрать все
ТекстЗапросаОбновления = "
	|UPDATE
	|	$ЖурналРасчетов.Зарплата
	|SET
	|	Result = :Результат
	|WHERE
	|	ID
	|	IN (
	|	SELECT
	|		ЖР.ID Запись
	|	FROM
	|		$ЖурналРасчетов.Зарплата ЖР WITH (NOLOCK)
	|	LEFT JOIN
	|		_1SJOURN AS ЖД WITH (NOLOCK) ON ЖД.IDDOC = ЖР.IDDOC
	|	WHERE
	|		ЖД.IDDOCDEF = $ВидДокумента.НачислениеЗаработнойПлаты AND
	|		(ЖР.IDALG = $ВидРасчета.НДФЛ OR ЖР.IDALG = $ВидРасчета.НДФЛУдержанный) AND
	|		(ЖР.DATEB = :НачДата AND ЖР.DATEE = :КонДата~)
	|			)
	|
	|";
 

  
Наверх
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: ЖР Зарплата
Ответ #11 - 14. Ноября 2011 :: 10:05
Печать  
Вот рабочий вариант:
Долгие мучения дали результат
Код
Выбрать все
дДатаНачала = НачГода(ТекущаяДата());
	дДатаКонца = КонГода(ТекущаяДата());

	НаборЗаписей = СоздатьОбъект("ODBCRecordset");
	ТекстЗапросаВыборкиЗаписей = "
	|SELECT
	|	ЖР.ID Запись,
	|	ЖД.IDDOC [ДокументСсылка $Документ],
	|	ЖД.IDDOCDEF ДокументСсылка_вид,
	|	ЖР.IDS [СотрудникСсылка $Справочник.Сотрудники],
	|	ЖР.IDALG [ВидРасчета $ВидРасчета],
	|	ЖР.Result Результат
	|FROM
	|	$ЖурналРасчетов.Зарплата ЖР
	|LEFT JOIN
	|	_1SJOURN ЖД ON ЖД.IDDOC = ЖР.IDDOC
	|WHERE
	|	ЖД.IDDOCDEF = $ВидДокумента.НачислениеЗаработнойПлаты AND
	|	(ЖР.IDALG = $ВидРасчета.НДФЛ OR ЖР.IDALG = $ВидРасчета.НДФЛУдержанный) AND
	|	(ЖР.DATEB >= :НачДата~~ AND ЖР.DATEE <= :КонДата~~)
	|";

	итВыборка = СоздатьОбъект("ИндексированнаяТаблица");
	НаборЗаписей.УстановитьТекстовыйПараметр("НачДата",дДатаНачала);
	НаборЗаписей.УстановитьТекстовыйПараметр("КонДата",дДатаКонца);
	НаборЗаписей.ВыполнитьИнструкцию(ТекстЗапросаВыборкиЗаписей,итВыборка);

	итВыборка.Группировать("ДокументСсылка:ДокументСсылка","Результат",1);
	итВыборка.ВыбратьСтроки();
	Пока итВыборка.ПолучитьСтроку() = 1 Цикл
		итГруппировкаСотрудников = итВыборка.тзПотомки;
		ат",1);
		итГруппировкаСотрудников.ВыбратьСтроки();
		Пока итГруппировкаСотрудников.ПолучитьСтроку() = 1 Цикл
			СчетчикЗаписей = 0;
			тзЗаписиДокумента = итГруппировкаСотрудников.тзПотомки;
			пРезультат = 0;
			тзЗаписиДокумента.ВыбратьСтроки();
			Пока тзЗаписиДокумента.ПолучитьСтроку() = 1 Цикл
				Если тзЗаписиДокумента.ВидРасчета.Код = "НДФЛ" Тогда
					пРезультат = тзЗаписиДокумента.Результат;
					Прервать;
				КонецЕсли;
			КонецЦикла;


			Если пРезультат <> 0 Тогда
				тзЗаписиДокумента.ВыбратьСтроки();
				Пока тзЗаписиДокумента.ПолучитьСтроку() = 1 Цикл
					Если тзЗаписиДокумента.ВидРасчета.Код = "НДФЛ" Тогда
						Продолжить;
					КонецЕсли;
					ТекстЗапросаОбновления = "
					|UPDATE
					|	$ЖурналРасчетов.Зарплата
					|SET
					|	Result = :Результат
					|FROM
					|	$ЖурналРасчетов.Зарплата ЖР
					|WHERE
					|	ЖР.ID = :Ссылка
					|
					|";

					НаборЗаписей.УстановитьТекстовыйПараметр("Результат",пРезультат);
					НаборЗаписей.УстановитьТекстовыйПараметр("Ссылка",тзЗаписиДокумента.Запись);
					НаборЗаписей.ВыполнитьИнструкцию(ТекстЗапросаОбновления);
					СчетчикЗаписей = СчетчикЗаписей + 1;
					Сообщить("Обработано записей " + СчетчикЗаписей);
					Продолжить;
				КонецЦикла;
			КонецЕсли;

		КонецЦикла;
	КонецЦикла;

 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать