в Зарплата и управление персоналом КОРП, редакция 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);
тчУдержания.Удержание = ПланыВидовРасчета.Удержания.НайтиПоКоду("ИСПДК");
КонецЕсли;
КонецЦикла;
НачислениеЗарплаты.Записать();
Сообщить("---------------------------------------------", СтатусСообщения.БезСтатуса);
(9) и что? Если Вы это делали, то в отладке перед Загрузить() смотрели типы колонок в ТЗ и в ТЧ? Значения колонок смотрели?
Как Вы определяете, что "не записалось"? Через форму документа? А Вы уверены, что всё верно заполнили? Реквизиты могут быть скрыты или очищены, если программа в зависимости от настроек другими реквизитами посчитает, что так надо.
А когда Вы заполняете программно, контроль со стороны формы вообще отсутствует! (внезапно!)
Могу Вам посоветовать только 2 инструмента:
1) http://infostart.ru/public/100967/ Открываете документ, созданный вручную, смотрите, что там реально написано.
Открываете документ, созданный программой, смотрите, что получилось в нём.
2) Конфигуратор, отладка по шагам. Доходите до присваиваний и смотрите все значения, обращая внимание на их тип.
Кстати, я бы табличные части подготавливал в ТаблицеЗначений, а потом загружал методом Загрузить(). Так оно и отработает быстрее, чем перебором, да и проконтролировать перед загрузкой (отладка!) проще.
(9) и что? Если Вы это делали, то в отладке перед Загрузить() смотрели типы колонок в ТЗ и в ТЧ? Значения колонок смотрели?
Как Вы определяете, что "не записалось"? Через форму документа? А Вы уверены, что всё верно заполнили? Реквизиты могут быть скрыты или очищены, если программа в зависимости от настроек другими реквизитами посчитает, что так надо.
А когда Вы заполняете программно, контроль со стороны формы вообще отсутствует! (внезапно!)
(9) Трассировка по шагам. Вплоть до записи документа. И потом - ещё на один шаг, убедиться, что же легло в базу. Иного выхода никто не предложит.
А вариантов, что и где могло поменяться - масса, вплоть до подписок на события и расширений конфигурации!