Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выбрать документ из списка документов
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
kosalex
Добрый день. Помогите!

Есть две таблицы значений "Опоздавшие", "Неявки":

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



Нужно создавать документ "НевыходыВОрганизации" и заполнять его из этих таблиц. Если за один отчетный месяц обработка была запущена несколько раз, то НОВЫЙ документ создавать не нужно. Нужно открывать созданый документ и дописывать туда данные.

Как открыть документ за определённый период?
Как дописать туда данные?


пишу так, не получается.
 Процедура ОткрытьДокумент(ДатаДокумента) ЭКСПОРТ
    
    Отбор = Новый Структура ("НачалоПериода, КонецПериода" , ДатаДокумента,КонецМесяца(ДатаДокумента));
    Выборка = Документы.НевыходыВОрганизациях.Выбрать(Отбор);
    
    Пока Выборка.Следующий() Цикл
        
        Выборка.Ссылка.ПолучитьФорму("ФормаДокумента").Открыть();;    
        
    КонецЦикла;
КонецПроцедуры

pablo
Выборка.Ссылка.ПолучитьОбъект().ПолучитьФорму("ФормаДокумента").Открыть();
kosalex
в смысле у меня период месяц?От даты прихода и получаем период текущий месяц.






вопрос в следующем, при добавлении сотрудника он вставляется как то не так, без ссылки или ещё как то.. в общем не подхватываются данные в колонки "Таб.№" "Назначение" и т.д.



не понемаю...тип ссылка

Pervuy
Может быть причина в том что у Вас в таблице не ссылка на элемент справочника, а ТаблицаОпоздавшие.Колонки.Добавить("ФИО", Новый ОписаниеТипов("Строка")); Строка
соответственно я предлагаю сначала искать элемент справочника по наименованию, а потом уже записывать его в документ.
kosalex
Описание колонки таблицы:
ТаблицаОпоздавшие.Колонки.Добавить("ФИО");





Записываем в колонку:
СтрокаТаблицыОпоздавшие.ФИО = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(СокрЛП(СтрокаТаблицыИзФайла.ФИО));


Я так понимаю,что при такой записи, в таблице храниться ссылка на сотрудника из справочника СотрудникиОрганизации.
logist
Цитата(kosalex @ 17.07.13, 16:49) необходимо зарегистрироваться для просмотра ссылки
Записываем в колонку:

А если в организации будут работать два Иванова Ивана Ивановича?

А вообще, ТабНомер в форме вероятно заполняется по событию изменение поля сотрудника, поэтому вам при программном создании нужно и заполнять его программно.
kosalex
Перед формированием таблицы значений стоит условие ещё и на ИНН, актуальность сотрудников
logist
Цитата(kosalex @ 17.07.13, 22:27) необходимо зарегистрироваться для просмотра ссылки
Перед формированием таблицы значений стоит условие ещё и на ИНН, актуальность сотрудников

Тогда логичней искать по ИНН, вы же найдете так уникального сотрудника и из найденной ссылки можно взять ФИО (только вероятно оно тогда не нужно), нет необходимости искать еще и по наименованию. К тому же, если идентифицировать по ИНН, то с таблицей можно работать в запросе, т.е. засунуть ее туда, найти все необходимые данные, скомпоновать их и загрузить в таблицу документа.
kosalex
у некоторых сотрудников нет ИНН, им не позволяет вера....))



Я так понимаю,мне нужно взывать именно эту процедуру?
В неё передаем ВыбранноеЗначение - это структура. Не совсем понятно из чего должна состоять структура, и что такое Элемент?

Процедура НачисленияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    Перем  СтруктураГрафика;
    
    Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда
        Возврат;
    КонецЕсли;
    СписокРаботников = ВыбранноеЗначение.Данные.Выгрузить();
    Для Каждого Сотр из СписокРаботников Цикл
        СтрокаНач = Начисления.Добавить();
        СтрокаНач.Назначение = Сотр.Сотрудник;
        Если ЗначениеЗаполнено(Сотр.Сотрудник.ОсновноеНазначение) Тогда
            СтрокаНач.Сотрудник =  Сотр.Сотрудник.ОсновноеНазначение;
        Иначе    
            СтрокаНач.Сотрудник = Сотр.Сотрудник;
        КонецЕсли;
        СтрокаНач.Авторасчет = Истина;
        СтрокаНач.ВидРасчета = ВыбранноеЗначение.Реквизиты.ВидРасчета;
        СтрокаНач.ДатаНачала = ВыбранноеЗначение.Реквизиты.ДатаНачала;
        СтрокаНач.БазовыйПериодНачало = ВыбранноеЗначение.Реквизиты.ДатаНачала;
        Если СпособРегистрацииВремени = Перечисления.СпособыРегистрацииВремени.РегистрацияДляЦелойСмены Тогда
            СтрокаНач.ДатаОкончания = ВыбранноеЗначение.Реквизиты.ДатаОкончания;
            СтрокаНач.БазовыйПериодКонец = ВыбранноеЗначение.Реквизиты.ДатаОкончания;
        Иначе
            СтрокаНач.ОплачиватьЧасов = ВыбранноеЗначение.Реквизиты.ОплачиватьЧасов;
            СтрокаНач.ДатаОкончания = СтрокаНач.ДатаНачала;
            СтрокаНач.БазовыйПериодКонец = СтрокаНач.ДатаОкончания;
        КонецЕсли;    
        
        СтруктураГрафика = ПолучитьГрафикРаботыПоВидуВремени(ВыбранноеЗначение.Реквизиты.ДатаНачала, СтрокаНач.Сотрудник, СтрокаНач.Назначение);
        СтрокаНач.ГрафикРаботы = СтруктураГрафика.ГрафикРаботы;
        СтрокаНач.НормаДнейЗаМесяц = СтруктураГрафика.НормаДнейЗаМесяц;
        СтрокаНач.НормаЧасовЗаМесяц = СтруктураГрафика.НормаЧасовЗаМесяц;
    КонецЦикла;    
    
    СтандартнаяОбработка = Ложь;
    
КонецПроцедуры

pablo
А в таблице опоздавшие у Вас 3 строки или 5? Еще, как вариант, посмотрите количество строк в ТЧ начисление до начала работы цикла
kosalex
В таблице Опоздавшие может быть хоть 100 строк. Строка это же 1 опоздавший сотрудник
pablo
Я не спрашиваю про теоретические ограничения, я спрашиваю про Ваш конкретный пример, приведенный на скриншоте
kosalex
две первые строки добавил сам,руцями,не программно. В таблице "опоздавшие" 3 строки
logist
Цитата(logist @ 17.07.13, 22:45) необходимо зарегистрироваться для просмотра ссылки
у некоторых сотрудников нет ИНН, им не позволяет вера....))

Тогда у них вместо ИНН, в налоговых целях, используется серия и номер паспорта, что и должно быть внесено в поле ИНН карточки сотрудника (фил.лица)
pablo
При ручном добавлении строки у Вас срабатывает некое событие обработчик которого(например, ПриИзменении) и устанавливает значения этих свойств. Если же заполняете ТЧ программно, то никто этот обработчик не вызывает (по причине отсутствия события). Соответственно, Вам нужно либо самому устанавливать значения этих свойств в своем коде, либо вызывать этот обработчик события (напрямую либо через генерацию события).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.