программная запись поля период

1. aatm 06.03.17 14:15 Сейчас в теме
в Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.2.105) есть документ
НачислениеЗарплаты. в нем есть табличная часть Начисление. в ней НЕ пишутся два поля ДатаНачала и ДатаОкончание.

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

	
	ЗаписыватьОбъект = истина;
	
	СформироватьСтруктуруКолонок();
	
	МетаданныеИсточника = ПолучитьМетаданныеИсточника();
	
	Колонки = Объект.ДополнительныеСвойства.Колонки;
	
	ТекстВопросаИсточника = ПолучитьТекстВопросаИсточника().ТекстВопроса;
	КоличествоЭлементов = ТабличныйДокумент.ВысотаТаблицы - Объект.ПерваяСтрокаДанныхТабличногоДокумента + 1;
	
	
	Сообщить("Выполняется загрузка"+ ТекстВопросаИсточника, СтатусСообщения.Информация);
	Сообщить("Всего: " + КоличествоЭлементов, СтатусСообщения.Информация);
	Сообщить("---------------------------------------------", СтатусСообщения.БезСтатуса);
	НомерТекущейСтроки = 0;
	Загружено = 0;
	Для К = Объект.ПерваяСтрокаДанныхТабличногоДокумента По ТабличныйДокумент.ВысотаТаблицы Цикл
		НомерТекущейСтроки = НомерТекущейСтроки + 1;
		ТекстыЯчеек = Неопределено;
		Отказ = Ложь;
		
		ТекущаяСтрока = ПроектКонтрольЗаполненияСтроки(ТабличныйДокумент, К, ТекстыЯчеек);
		
		//1)Получить должность
		//2)Записать в переменную
		Если ЗначениеЗаполнено(ТекущаяСтрока[1]) Тогда
			Должность = ТекущаяСтрока[1];
		Иначе
			НоваяСтрока = iikoДанные.Добавить();
			НоваяСтрока.Должность = Должность;
			НоваяСтрока.Сотрудник = ТекущаяСтрока[2];
			НоваяСтрока.ТабельныйНомер = ТекущаяСтрока[3];
			НоваяСтрока.ОстатокНаНачало = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[4]);
			НоваяСтрока.Оклад = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[5]);
			НоваяСтрока.Аванс = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[6]);
			НоваяСтрока.ОтработаноЧасов = ТекущаяСтрока[7];
			НоваяСтрока.ПоврОплата = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[9]);
			НоваяСтрока.ПродажиБлюда = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[10]);
			НоваяСтрока.ПродажиЗаказы = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[11]);
			НоваяСтрока.Бонусы = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[12]);
			НоваяСтрока.Начислено = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[13]);
			НоваяСтрока.Недостача = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[14]);
			НоваяСтрока.Удержания = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[15]);
			НоваяСтрока.ПрНачисления = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[16]);
			НоваяСтрока.ЕдаНезакрСтолы = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[17]);			
			НоваяСтрока.ПрочиеРасчеты = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[18]);
			НоваяСтрока.Итого = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[19]);
			НоваяСтрока.ВыданныеАвансы = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[20]);
			НоваяСтрока.ОбщиеВыплаты = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[21]);
			НоваяСтрока.КВыдаче = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[22]);
			НоваяСтрока.ОстатокНаКонец = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ТекущаяСтрока[23]);
		КонецЕсли;				
		
		
	КонецЦикла;
	
	//очищаем таблицу от лишних строк	
	НулевыеСтроки = iikoДанные.НайтиСтроки(Новый Структура("Сотрудник",""));
	Для каждого СтрокаТаблицы Из НулевыеСтроки Цикл
		iikoДанные.Удалить(СтрокаТаблицы);
	КонецЦикла;
	
	//находим сумму начислений по колонкам Бонусы, Начислено, ПрНачисления 
	Для Каждого ТСтрока ИЗ iikoДанные Цикл
		ТСтрока.СуммаНачислений = ТСтрока.Бонусы + ТСтрока.Начислено + ТСтрока.ПрНачисления;
	КонецЦикла;	
	
	//находим сумму удержаний по колонкам Удержания, Еда/НезакрытыеСтолы
	Для Каждого ТекСтрока ИЗ iikoДанные Цикл
		ТекСтрока.СуммаУдержаний = ТекСтрока.Удержания + ТекСтрока.ЕдаНезакрСтолы;
	КонецЦикла;	
	
	НачислениеЗарплаты = Документы.НачислениеЗарплаты.СоздатьДокумент();  
	
	ЗаполнитьЗначенияСвойств(НачислениеЗарплаты,ДанныеФормы);
	                          
	Для Каждого ТЭлемент ИЗ iikoДанные Цикл
		
		//ищем сотрудника в справочнике
		ФИОМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТЭлемент.Сотрудник," ",,);
		//если нет то заводим
		Если ПустаяСтрока(Справочники.Сотрудники.НайтиПоНаименованию(ФИОМассив[0])) Тогда
			
			//создаем справочник физические лица
			ФизЛицо = Справочники.ФизическиеЛица.СоздатьЭлемент();
			
			ФизЛицо.УстановитьСсылкуНового(Справочники.ФизическиеЛица.ПолучитьСсылку(Новый УникальныйИдентификатор()));
			ФизЛицо.ФИО = ТЭлемент.Сотрудник;
			ФизЛицо.НаименованиеСлужебное = ТЭлемент.Сотрудник;
			ФизЛицо.Наименование = ТЭлемент.Сотрудник;

			ФизЛицо.Фамилия = ФИОМассив[0];
			ФизЛицо.Имя = ФИОМассив[1];
			Если ФИОМассив.Количество() = 2 Тогда
				//отчества нет
			КонецЕсли;
			Если ФИОМассив.Количество() = 3 Тогда
				ФизЛицо.Отчество = ФИОМассив[2];	
			КонецЕсли;	
			
			СсылкаФизЛицо = ФизЛицо.ПолучитьСсылкуНового();
			
		    // Добавление записей в периодический независимый регистр сведений
			НаборЗаписей = РегистрыСведений.ФИОФизическихЛиц.СоздатьНаборЗаписей();
			
			НаборЗаписей.Отбор.ФизическоеЛицо.Установить(СсылкаФизЛицо);
			
		    НовЗапись = НаборЗаписей.Добавить();
			
			НовЗапись.Период = ТекущаяДата();
			НовЗапись.ФизическоеЛицо = СсылкаФизЛицо;
			НовЗапись.Фамилия = ФИОМассив[0];
			НовЗапись.Имя = ФИОМассив[1];
			Если ФИОМассив.Количество() = 2 Тогда
				//отчества нет
			КонецЕсли;
			Если ФИОМассив.Количество() = 3 Тогда
				НовЗапись.Отчество = ФИОМассив[2];	
			КонецЕсли;	
						
			НаборЗаписей.Записать(Истина);
			
			ФизЛицо.Записать();

			//создаем запись справочника сотрудники 
			Сотрудник = Справочники.Сотрудники.СоздатьЭлемент();
			
			Сотрудник.Наименование = ТЭлемент.Сотрудник;
			Сотрудник.ГоловнойСотрудник = ТЭлемент.Сотрудник;
			Сотрудник.ФизическоеЛицо = СсылкаФизЛицо;
												
			Сотрудник.Записать();
			
		КонецЕсли;
		
		//записываем начисления
		//заполнение табличной части Начисления 
		Если ТЭлемент.СуммаНачислений > 0 Тогда

			тчНачисления = НачислениеЗарплаты.Начисления.Добавить();
			
			тчНачисления.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию(ФИОМассив[0]);
			тчНачисления.Начисление = ПланыВидовРасчета.Начисления.НайтиПоКоду("ПРНиВ");
			тчНачисления.Результат = ТЭлемент.СуммаНачислений;
			тчНачисления.Подразделение = ДанныеФормы.Подразделение;
			//эти даты не пишутся
			тчНачисления.ДатаНачала = '20170201';
			тчначисления.ДатаОкончания = '20170228';
                        //эти даты не пишутся
			тчначисления.ПериодДействия = НачалоМесяца(ДанныеФормы.МесяцНачисления);
		КонецЕсли;
	     
		//записываем удержания
		//Заполнение табличной части Удержания
		Если ТЭлемент.СуммаУдержаний <> 0 Тогда
			тчУдержания = НачислениеЗарплаты.Удержания.Добавить();
			тчУдержания.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию(ФИОМассив[0]);
			тчУдержания.ФизическоеЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(ФИОМассив[0]);
			//тут тоже должны быть даты
			тчУдержания.Результат = ТЭлемент.СуммаУдержаний * (-1);
			тчУдержания.Удержание = ПланыВидовРасчета.Удержания.НайтиПоКоду("ИСПДК");
		КонецЕсли;
	КонецЦикла;
	 
	
	НачислениеЗарплаты.Записать();
	
	
	Сообщить("---------------------------------------------", СтатусСообщения.БезСтатуса);
Показать
+
По теме из базы знаний
Найденные решения
10. japopov 68 06.03.17 15:09 Сейчас в теме
(9) и что? Если Вы это делали, то в отладке перед Загрузить() смотрели типы колонок в ТЗ и в ТЧ? Значения колонок смотрели?
Как Вы определяете, что "не записалось"? Через форму документа? А Вы уверены, что всё верно заполнили? Реквизиты могут быть скрыты или очищены, если программа в зависимости от настроек другими реквизитами посчитает, что так надо.
А когда Вы заполняете программно, контроль со стороны формы вообще отсутствует! (внезапно!)
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kuzev 47 06.03.17 14:18 Сейчас в теме
(1)
тчНачисления.ДатаНачала = '20170201';
тчначисления.ДатаОкончания = '20170228';

странно Вы дату "пишете".
+
3. aatm 06.03.17 14:20 Сейчас в теме
(2)не понял. что не так?
+
4. aatm 06.03.17 14:25 Сейчас в теме
(2) как её по Вашему надо писать?
+
5. japopov 68 06.03.17 14:47 Сейчас в теме
(4)
            тчНачисления.ДатаНачала = НачалоМесяца(ДанныеФормы.МесяцНачисления);
            тчначисления.ДатаОкончания = КонецМесяца(ДанныеФормы.МесяцНачисления);
                        //эти даты не пишутся
            тчначисления.ПериодДействия = НачалоМесяца(ДанныеФормы.МесяцНачисления);
+
6. aatm 06.03.17 14:50 Сейчас в теме
(5)это тоже не работает
+
7. aatm 06.03.17 14:54 Сейчас в теме
(5)ещё точнее
эта строка пишется
 тчначисления.ПериодДействия = НачалоМесяца(ДанныеФормы.МесяцНачисления);


эти две нет
тчНачисления.ДатаНачала = НачалоМесяца(ДанныеФормы.МесяцНачисления);
            тчначисления.ДатаОкончания = КонецМесяца(ДанныеФормы.МесяцНачисления);
+
8. japopov 68 06.03.17 14:57 Сейчас в теме
Могу Вам посоветовать только 2 инструмента:
1) http://infostart.ru/public/100967/
Открываете документ, созданный вручную, смотрите, что там реально написано.
Открываете документ, созданный программой, смотрите, что получилось в нём.
2) Конфигуратор, отладка по шагам. Доходите до присваиваний и смотрите все значения, обращая внимание на их тип.

Кстати, я бы табличные части подготавливал в ТаблицеЗначений, а потом загружал методом Загрузить(). Так оно и отработает быстрее, чем перебором, да и проконтролировать перед загрузкой (отладка!) проще.
+
9. aatm 06.03.17 15:05 Сейчас в теме
(8)было. делал. и консолью запросов смотрел и в табличную часть обработки записывал потом в табличную часть документа выгружал.
+
10. japopov 68 06.03.17 15:09 Сейчас в теме
(9) и что? Если Вы это делали, то в отладке перед Загрузить() смотрели типы колонок в ТЗ и в ТЧ? Значения колонок смотрели?
Как Вы определяете, что "не записалось"? Через форму документа? А Вы уверены, что всё верно заполнили? Реквизиты могут быть скрыты или очищены, если программа в зависимости от настроек другими реквизитами посчитает, что так надо.
А когда Вы заполняете программно, контроль со стороны формы вообще отсутствует! (внезапно!)
+
11. japopov 68 06.03.17 15:11 Сейчас в теме
(9) Трассировка по шагам. Вплоть до записи документа. И потом - ещё на один шаг, убедиться, что же легло в базу. Иного выхода никто не предложит.
А вариантов, что и где могло поменяться - масса, вплоть до подписок на события и расширений конфигурации!
+
12. igor-pn 72 06.03.17 15:37 Сейчас в теме
Попробуйте даты изначально вставить в таблицу iikoДанные, ведь они известны - начало месяца и окончание месяца.
+
Внимание! Тема сдана в архив

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