1С 7.7 и снова таблица значений

Тема в разделе "1C и всё что с ней связано", создана пользователем KiR, 29 ноя 2010.

  1. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Есть тз со столбцами Наименование, Колво, Цена, Партия. мне нужно сделать что то типа ТЗ.Свернуть("Наименование","Колво"),но так чтобы Цена и партия не потерялись. как организовать подобную "свертку"? Как использовать к примеру "НайтиЗначение" в цикле?
     
  2. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    ТЗ.Свернуть("Наименование,Цена, Партия","Колво") - только что это поменяет? ведь по сути ты получаешь ту-же ТЗ что и до свертки, разве что "лесенку" уберешь.

    А найти значение - как обычно, только не забывать обнулять переменную с номером строки перед началом нового поиска.
     
  3. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Как это в цикл запихнуть? ведь НайтиЗначение (если есть хоть одно вхождение) - будет всегда равно 1
     
  4. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Что-то не особо понятно, нарисовал бы пример таблицы строк из трех.
     
  5. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Наименование, Колво, Цена, Партия
    Товар1, 5, 50, 1
    Товар1, 10, 55, 2
    Товар2, 8, 100, 3
     
  6. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    И что из этого надо получить?
     
  7. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    общее количество одинакового товара, не потеряв при этом цены и партии
     
  8. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Товар1, 15, 50, 1
    Товар1, 15, 55, 2
    Товар2, 8, 100, 3
    Так?
     
  9. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    нет. сейчас думаю как лучше объяснить. пока сделал колонки Цена и партия многострочными и получаю на выходе
    Товар1, 15, 50|55, 1|2
    Товар2, 8, 100, 3
     
  10. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Ага... тогда вопрос, в каком виде должны храниться в одной колонке две партии? СписокЗначений?
    В любом случае решение - обойти строки отсортированной таблицы, и в процессе обхода, заполнять новую, суммируя то, что нужно.
     
  11. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    Код ( (Unknown Language)):
    Пока ... цикл
    н=0;
    Если тз.найтизначение(значпоиска,н,колонкапоиска)=1 тогда
    ...
     
  12. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    TimeDontWait, дык значений-то несколько, а он найдет первое
     
  13. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    Извиняюсь, тогда делаеш выборку строк, и ПолучитьЗначение()
     
  14. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Ну правильно. обнуляем строку, делаем найти значение. полученная строка равна к примеру 5. опять обнуляем и опять ищем значение - и снова получаем ту же строку №5 - вечный цикл получается
     
  15. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    Код ( (Unknown Language)):
    ВыбратьСтроки()
    Пока ПолучитьСтроку()=1 цикл
    Если НужЗнач=Тз.ПолучитьЗначение(Тз.ТекущаяСтрока,НужнаяКолонка)=1 тогда
    ...
    Как-то так
     
  16. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Код ( (Unknown Language)):
     ТЗ.Выгрузить(КопияТЗ);
    КопияТЗ.Свернуть("Наименование","Количество");
    ТЗ.Сортировать("Наименование");
    КопияТЗ.НоваяКолонка("Партия");
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    Стр = "";
    КопияТЗ.НайтиЗначение(ТЗ.Наименование,стр,"Наименование");
    ЗначениеПартии = КопияТЗ.ПолучитьЗначение(стр,"Партия")+ТЗ.Партия; // Не знаю, как ты их сложить хочешь
    КопияТЗ.УстановитьЗначение(ЗначениеПартии,стр,"Партия")
     
  17. 4xter

    4xter Гость

    а откуда заполняется первоначальная ТЗ? Я клоню к тому, чтоб поиск и изменения значений ТЗ делать при первоначальном заполнении. Тогда ведь значения будут уникальны?
     
  18. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Если в ТЗ несколько одинаковых значений - отсортируй по этому значению, методом НайтиЗначение получи первое вхождение,
    запомни номер строки и в цикле (прибавляя к номеру 1 пока значение не поменялось) получай следующие подряд методом ПолучитьСтрокуПоНомеру
     
  19. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    vbs, о! это что-то новенькое! думаю это мне поможет
     
  20. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Можно еще проще- сделай дополнительную таблицу, выгрузи в неё всё, сверни по товару и количеству и используй поиск в ней для получения общего количества, а работай в старой - с партиями и ценами.
     
Загрузка...

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