8.х Запись табличной части в регистр сведений

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Poverina, 13 мар 2014.

  1. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте. Есть документ "ТабельУчетаРабочегоВремени", под него создан регистр накопления "ТУРВ" , регистратором для которого является вышеуказанный документ. Нужно, чтобы данные из ТЧ при проведении документа записывались в регистр. Данные регистра:
    Через конструктор движений было создано:

    Код:
    Процедура ОбработкаПроведения(Отказ, Режим)
       //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
       // Данный фрагмент построен конструктором.
       // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
       // регистр ТУРВ Приход
       Движения.ТУРВ.Записывать = Истина;
       Движения.ТУРВ.Очистить();
       Для Каждого ТекСтрокаОтработанноеВремя Из ОтработанноеВремя Цикл
         Движение = Движения.ТУРВ.Добавить();
         Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
         Движение.Период = Дата;
         Движение.Сотрудник = ТекСтрокаОтработанноеВремя.Сотрудник;
         Движение.Дни = ТекСтрокаОтработанноеВремя.ОтработаноМесяцДней;
         Движение.Часы = ТекСтрокаОтработанноеВремя.ОтработаноМесяцЧасов;
         Движение.ДниПоНорме = ТекСтрокаОтработанноеВремя.НормаДней;
         Движение.ЧасыПоНорме = ТекСтрокаОтработанноеВремя.нормаЧасов;
       КонецЦикла;
    
       //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    КонецПроцедуры
    
    Провожу документ ==> список ТУРВ пуст. Что не так?
    Последнее редактирование: 13 мар 2014
  2. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    Типы данных совпадают?
  3. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Да, где дни/часы - число, сотрудник - СправочникСсылка.СотрудникиОрганизаций
  4. rifat
    Offline

    rifat Опытный в 1С

    Регистрация:
    13 июн 2013
    Сообщения:
    99
    Симпатии:
    2
    Баллы:
    29
    В отладке посмотрите, выполняется ли код цикла.
  5. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Ни разу не выполняется
  6. rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Какая конфа??
    Посмотрите структуру Документа.ТабельУчетаРабочегоВремени в нем нет, например, строки
    Код:
    ТекСтрокаОтработанноеВремя.ОтработаноМесяцДней
    Вам нужно добавить еще 2 цикла для расчета кол-во дней часов(4 вида времени и 4 вида часов на каждый день)...
    Вот нужные циклы, пример:
    Код:
    Для ИндексДня  = День(ДатаНачалаПериода) По День(ДатаОкончанияПериода) Цикл
                ТекстЯчейки = "";
                СуммаНачислено = 0;
                СтрокаИндексДня = Строка(ИндексДня);         
                КолвоЧасовПоГрафику = ПолучитьКолвоЧасов(ГрафикСотрудника, ДатаПроверки, Месяц);
                // цикл по значениям внутри дня
                Для ИндексМассиваПриставок = 0 По 3 Цикл
                    НазваниеЯчейкиВидВремени = МассивПриставок[ИндексМассиваПриставок] + "ВидВремени"+СтрокаИндексДня;
                    НазваниеЯчейкиДней = МассивПриставок[ИндексМассиваПриставок] + "Часов"+СтрокаИндексДня;
                    КоличествоЧасов = ОформлениеСтроки[НазваниеЯчейкиДней];
                    ВидВремени = ОформлениеСтроки[НазваниеЯчейкиВидВремени];
    ЗЫ: сейчас у Вас пустой регистр, т.к. ни одного ресурса не записывается
  7. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Бухгалтерия для Казахстана, редакция 2.0 (2.0.11.9)
    Собственно, в ТЧ документа все что нужно уже рассчитывается, осталось только в регистр записать.

    Есть в документе функция, которая вычисляет нужные значения:
    Код:
    Функция РассчитатьФакт()
       Для каждого Строка Из ТабличноеПоле1 Цикл
         ф=0; //дни месяца
         ЧМ = 0;  //часы месяца
    ...
    Строка.ОтработаноМесяцДней = ф; //  дни
    Строка.ОтработаноМесяцЧасов = ЧМ;  //  часы
    КонецЦикла;
     
    КонецФункции
  8. rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Допустим... Тогда что Вы пытаетесь записать в регистр?? Вот это что?
    Код:
    Движение.Дни = ТекСтрокаОтработанноеВремя.ОтработаноМесяцДней;
    Вы уверены, что не заходит в цикл ОбработкиПроведения()??
  9. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Вот эти цифры должны записываться в регистр:
    [​IMG]
  10. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    А типы данных в документе совпадают с типами реквизитов регистра? Точно?
  11. rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Вы меня не слышите...
    Покажите скрин структуры документа, где видны реквизиты табличной части "ОтработанноеВремя"
  12. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    [​IMG]
    --- Объединение сообщений, 13 мар 2014 ---
    [​IMG]
  13. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    почему не выполняется. Вы отладчиком умеете пользоваться?точку остановки где поставили?
  14. НиколайН
    Offline

    НиколайН Опытный в 1С

    Регистрация:
    14 фев 2014
    Сообщения:
    246
    Симпатии:
    0
    Баллы:
    26
    У Вас после Цикла должна быть запись Движения.ТУРВ.Записать();
  15. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    если в начале есть
    Код:
    Движения.ТУРВ.Записывать = Истина;
    то движения и так записаны будут при успешном выполнении процедуры
  16. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Я в самом начале цикла добавляла:
    Код:
    Сообщить("тест");
    Все что в цикле - не выполняется, за его пределами - выводится сообщение.
  17. Thelearning
    Offline

    Thelearning Профессионал в 1С Команда форума

    Регистрация:
    9 сен 2010
    Сообщения:
    701
    Симпатии:
    72
    Баллы:
    54
    А что покажет код перед циклом:
    Код:
    Сообщить(ОтработанноеВремя.Количество());
  18. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    в принципе и так можно "отладчиком" пользоваться, но лучеш использовать точки остановки и пошагово исследовать алгоритм.
  19. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    Poverina, ваша проблема может решиться за несколько секунд. Запустите отладчик. Просмотрите значения, которые передаются. Просмотрите табличную часть. Сложность в чем?
  20. НиколайН
    Offline

    НиколайН Опытный в 1С

    Регистрация:
    14 фев 2014
    Сообщения:
    246
    Симпатии:
    0
    Баллы:
    26
    По пробуйте Движения.ТУРВ.Очистить поставить в начало

    Код:
    Движения.ТУРВ.Очистить();
    Движения.ТУРВ.Записывать = Истина;
    Получается, что Вы с начало записываете данные, затем их же очищаете.

Поделиться этой страницей