[РЕШЕНО] Заполнить количество в табличной части документа

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

  1. TopicStarter Overlay
    ste4kin48455
    Offline

    ste4kin48455 Опытный в 1С

    Регистрация:
    15 дек 2014
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток.
    • Задача - заполнить табличную часть документа "Акт списания ЕГАИС" (далее - док) из данных таблицы значений (далее - ТЗ).
    • Проблема - не заполняется столбец "Количество" (остальные заполняются).
    В ТЗ для колонки Количество прописано ОписаниеТипов с квалификаторами числа: длина 15, точность 3. Параметры совпадает с этими же параметрами колонки Количество дока, на отладке у значений колонки Количество в ТЗ эти параметры присутствуют.

    ТЗ заполняется по данным документа "остатки ЕГАИС" (далее - док2). В док2 параметры колонки "Количество": длина 10, точность 0. Грешу на то, что количества попадают в ТЗ изначально без дробной части.

    Функция, переводящая табличную часть док2 в ТЗ:
    Код:
    функция получитьТЧвТЗ(доп,тч)
        кч=новый квалификаторыЧисла(15,3);
        типЧ=новый описаниеТипов("число",кч);
       
        т="
        |выбрать алкогольнаяПродукция ап,
            |количество колво
            |поместить вт из &тч как тч;
        |выбрать н.номенклатура ном, вт.колво колво, вт.ап
        |из вт левое соединение
            |регистрСведений.соответствиеНоменклатурыЕГАИС н
            |по вт.ап=н.алкогольнаяПродукция где колво"+доп;
        з=новый запрос;
        м=новый МенеджерВременныхТаблиц;
        з.МенеджерВременныхТаблиц=м;
        з.Текст=т;
        з.УстановитьПараметр("тч",тч);
        в=з.Выполнить().выбрать();
       
        ы=новый таблицаЗначений;
        ы.Колонки.Добавить("ап");
        ы.Колонки.Добавить("колво", типЧ);
        ы.Колонки.добавить("ном");
       
        пока в.Следующий() цикл
            стр=ы.Добавить();
            стр.ап=в.ап;
            стр.колво=в.колво;
            стр.ном=в.ном;
        КонецЦикла;
           
        возврат ы;
    КонецФункции
    процедура, заполняющая табличную часть результирующего документа:
    Код:
    &НаСервере
    Процедура создатьАктСписанияНаСервере()
        докТЧ=получитьДокТЧ();   
        тзб=получитьТЧвТЗ(">0",докТЧ);   
       
        докСписания=документы.АктСписанияЕГАИС.СоздатьДокумент();   
        докСписания.Дата=ТекущаяДата();
        докСписания.ПричинаСписания=перечисления.ПричиныСписанийЕГАИС.Недостача;
        докСписания.Магазин=справочники.Магазины.НайтиПоНаименованию(магазин);
        докСписания.склад=справочники.склады.НайтиПоНаименованию(склад);
        докСписания.организация=справочники.организации.НайтиПоНаименованию(организация);
       
        для каждого стр из тзб цикл
            с=докСписания.Товары.Добавить();
            с.Номенклатура=стр.ном;
            с.Количество=стр.колво;
            с.АлкогольнаяПродукция=стр.ап;
        КонецЦикла;
       
        докСписания.Записать(РежимЗаписиДокумента.Запись);
    КонецПроцедуры
    --- Объединение сообщений, 29 дек 2016 ---
    ЗЫ: при этом в отладке вот тут
    Код:
    для каждого стр из тзб цикл
            с=докСписания.Товары.Добавить();
            с.Номенклатура=стр.ном;
            с.Количество=стр.колво;
            с.АлкогольнаяПродукция=стр.ап;
        КонецЦикла;
    Нужное количество заполняется, но без нулей в дробной части:
    2016-12-29_12-15-33.png
    Последнее редактирование: 29 дек 2016
  2. 1с-ник
    Offline

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    488
    Симпатии:
    87
    Баллы:
    54
    Отладчик округляет число, было бы число дробным - показал бы запятую.
  3. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.864
    Симпатии:
    778
    Баллы:
    204
    Возможно, происходит пересчет количества при записи документа в БД.
    Коэффициент единицы измерения в ТЧ заполняется?
  4. 1с-ник
    Offline

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    488
    Симпатии:
    87
    Баллы:
    54
    Не понимаю, как вы хотите из целого числа получить дробное?
    Вообще столько кода лишнего...менеджер временных таблиц... циклы... взял бы да...
    Код:
    ДокументОбъект.ТабличнаяЧасть.Загрузить(Запрос.Выполнить(),Выгрузить());
    Так ошибка в том, что количество вообще пустое? Раз так, то, разумеется, нужно смотреть обработчик ПередЗаписью().
    ste4kin48455 нравится это.
  5. TopicStarter Overlay
    ste4kin48455
    Offline

    ste4kin48455 Опытный в 1С

    Регистрация:
    15 дек 2014
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    я нуб. спс, посмотрю
    --- Объединение сообщений, 29 дек 2016 ---


    >>Коэффициент единицы измерения в ТЧ заполняется?
    думаю нет. в документе остатков такого поля нет, для ТЗ я это не прописывал, в документе списания этого тоже нет. можно как-то отменить действие этого пересчёта в обработке, не меняя конфу?
    Последнее редактирование: 29 дек 2016
  6. TopicStarter Overlay
    ste4kin48455
    Offline

    ste4kin48455 Опытный в 1С

    Регистрация:
    15 дек 2014
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Я тоже не понимаю, но задачу надо решить.
    В смысле? вроде же в ТЗ заполнено
  7. 1с-ник
    Offline

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    488
    Симпатии:
    87
    Баллы:
    54
    так она итак вроде решена - дробная часть в данном случае равна нулю.
    А табличная часть?
  8. TopicStarter Overlay
    ste4kin48455
    Offline

    ste4kin48455 Опытный в 1С

    Регистрация:
    15 дек 2014
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    я предполагаю, что количества документа-результата не заполняются как-раз из-за отсутствия дробной части (то есть в свойствах документа-результата под неё выделено 3 знака, а в ТЗ-источнике этих трёх знаков нет, вот документ и не хавает количества из ТЗ), но это моё мнение вилами-по-воде. Если это не так, то ок, дробную часть просто больше не обсуждаем.

    в итоге основная проблема - перебросить количества из ТЗ в документ списания
  9. 1с-ник
    Offline

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    488
    Симпатии:
    87
    Баллы:
    54
    Это нереально, чудеса какие-то. Отладчик в помощь.
  10. TopicStarter Overlay
    ste4kin48455
    Offline

    ste4kin48455 Опытный в 1С

    Регистрация:
    15 дек 2014
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    а вот еще анекдот:
    для эксперимента в ТЗ к каждой строке колонки Количество прибавил 0,543. например, было 5, стало 5.543. тип число, количество знаков 15, разрядность дробной части - 3. кинул это дело в табличную часть документа-результата. поля опять не заполнились.

    пробую методом РеквизитФормыВЗначение взять форму, заполнить её и отправить обратно методом ЗначениеВРеквизитФормы
  11. TopicStarter Overlay
    ste4kin48455
    Offline

    ste4kin48455 Опытный в 1С

    Регистрация:
    15 дек 2014
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    ВЗЛЕТЕЛО!!!! ааа, вот радость-то! оказалось, в документе-результате колонка с количествами называется не Количество, а КоличествоУпаковок.
    Код:
     
    для каждого стр из тзб цикл
            с=докСписания.Товары.Добавить();
            с.Номенклатура=стр.ном;
            с.КоличествоУпаковок=стр.колво;//с.Количество - неправильно
            с.АлкогольнаяПродукция=стр.ап;
       КонецЦикла;
    
    день прожит не зря :cool:

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