Здравствуйте.
Есть DBF файл с колонками "Номер документа", "Дата документа", "ИНН Контрагента", "Номенклатура", "Цена", "Количество", "Ставка НДС" и "Сумма".
Ситуация следующая, в файле может быть несколько строк с одним и тем же номером документа и датой, но разной номенклатурой, т.к. документ поступления один. Подскажите, пожалуйста, каким образом можно создать документы поступления в 1С БП, что бы не на каждую строчку dbf файла создавался документ, а с учетом группировки по номеру документа и дате с заполненной информацией по номенклатуре?
---
Есть еще такой вариант.

```1c
    ТипСтрока50 = Новый ОписаниеТипов("Строка", ,
    Новый КвалификаторыСтроки(50, ДопустимаяДлина.Переменная));

    ТипЧисло10_2 =Новый ОписаниеТипов("Число",
    Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Любой));

    ТаблицаЗначений = Новый ТаблицаЗначений;
    ТаблицаЗначений.Колонки.Добавить("НомерДокумента", ТипСтрока50);
    ТаблицаЗначений.Колонки.Добавить("ДатаДокумента", ТипСтрока50);
    ТаблицаЗначений.Колонки.Добавить("ИННКонтрагента", ТипСтрока50);
    ТаблицаЗначений.Колонки.Добавить("Номенклатура", ТипСтрока50);
    ТаблицаЗначений.Колонки.Добавить("Цена", ТипЧисло10_2);
    ТаблицаЗначений.Колонки.Добавить("Количество", ТипЧисло10_2);
    ТаблицаЗначений.Колонки.Добавить("СтавкаНДС", ТипЧисло10_2);
    ТаблицаЗначений.Колонки.Добавить("Сумма", ТипЧисло10_2);

    ТаблицаЗначений.Добавить();
    ТаблицаЗначений[0].НомерДокумента = "Документ1";
    ТаблицаЗначений[0].ДатаДокумента = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ТаблицаЗначений[0].ИННКонтрагента = "1234567890";
    ТаблицаЗначений[0].Номенклатура = "Товар1";
    ТаблицаЗначений[0].Цена = 1000;
    ТаблицаЗначений[0].Количество = 5;
    ТаблицаЗначений[0].СтавкаНДС = 20;
    ТаблицаЗначений[0].Сумма = ТаблицаЗначений[0].Цена * ТаблицаЗначений[0].Количество;

    ТаблицаЗначений.Добавить();
    ТаблицаЗначений[1].НомерДокумента = "Документ1";
    ТаблицаЗначений[1].ДатаДокумента = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ТаблицаЗначений[1].ИННКонтрагента = "1234567890";
    ТаблицаЗначений[1].Номенклатура = "Товар2";
    ТаблицаЗначений[1].Цена = 1500;
    ТаблицаЗначений[1].Количество = 3;
    ТаблицаЗначений[1].СтавкаНДС = 10;
    ТаблицаЗначений[1].Сумма = ТаблицаЗначений[1].Цена * ТаблицаЗначений[1].Количество;

    ТаблицаЗначений.Добавить();
    ТаблицаЗначений[2].НомерДокумента = "Документ3";
    ТаблицаЗначений[2].ДатаДокумента = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ТаблицаЗначений[2].ИННКонтрагента = "5432167890";
    ТаблицаЗначений[2].Номенклатура = "Товар3";
    ТаблицаЗначений[2].Цена = 2000;
    ТаблицаЗначений[2].Количество = 2;
    ТаблицаЗначений[2].СтавкаНДС = 20;
    ТаблицаЗначений[2].Сумма = ТаблицаЗначений[2].Цена * ТаблицаЗначений[2].Количество;

    ТаблицаЗначений.Добавить();
    ТаблицаЗначений[3].НомерДокумента = "Документ4";
    ТаблицаЗначений[3].ДатаДокумента = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ТаблицаЗначений[3].ИННКонтрагента = "0987654321";
    ТаблицаЗначений[3].Номенклатура = "Товар4";
    ТаблицаЗначений[3].Цена = 3000;
    ТаблицаЗначений[3].Количество = 1;
    ТаблицаЗначений[3].СтавкаНДС = 10;
    ТаблицаЗначений[3].Сумма = ТаблицаЗначений[3].Цена * ТаблицаЗначений[3].Количество;

    ТабДокументы = ТаблицаЗначений.Скопировать();
    ТабДокументы.Свернуть("НомерДокумента, ДатаДокумента, ИННКонтрагента", "Сумма");

    Для каждого ТекДокумент Из ТабДокументы Цикл

    // Здесь создаем документ
    НомерДок = ТекДокумент.НомерДокумента;
    ДатаДок = ТекДокумент.ДатаДокумента;
    ИННКонтрагента = ТекДокумент.ИННКонтрагента;
    ОбщаяСумма = ТекДокумент.Сумма;

    Сообщить("НомерДок "+НомерДок);
    Сообщить("ДатаДок "+ДатаДок);
    Сообщить("ИННКонтрагента "+ИННКонтрагента);
    Сообщить("ОбщаяСумма "+ОбщаяСумма);

    ОтборСтрокТекущегоДокумента = Новый Структура;
    ОтборСтрокТекущегоДокумента.Вставить("НомерДокумента", НомерДок);
    ОтборСтрокТекущегоДокумента.Вставить("ДатаДокумента", ДатаДок);

    СтрокиДокумента = ТаблицаЗначений.НайтиСтроки(ОтборСтрокТекущегоДокумента);

    Для каждого СтрокаТЧДокумента Из СтрокиДокумента Цикл

    // Здесь заполняем табличную часть документа
    Номенклатура = СтрокаТЧДокумента.Номенклатура;
    Цена = СтрокаТЧДокумента.Цена;
    Количество = СтрокаТЧДокумента.Количество;
    СтавкаНДС = СтрокаТЧДокумента.СтавкаНДС;

    Сообщить("Номенклатура "+Номенклатура);
    Сообщить("Цена "+Цена);
    Сообщить("Количество "+Количество);
    Сообщить("СтавкаНДС "+СтавкаНДС);

    КонецЦикла;

    // Здесь записываем документ

    КонецЦикла;
```
---
Например, прочитать в таблицу, отсортировать таблицу по номеру документа и дате.
При обходе таблицы в цикле если номер и дата в строке таблицы отличается от номера и даты в предыдущей строке, то создавать новый документ.
---
Спасибо, я попробую
---
без программирования, если документов немного, то открыть dbf в excel, сохранить нужные строки в отдельные файлы, и с помощью стандартной обработки загрузки из xls создать нужные поступления
p.s. можно прямо из dbf
---
зачем-то приплел перебор dbf по индексам Может, затем, что в вашем коде DBF никак не фигурирует, от слова "совсем"? Хотя в исходном ТЗ вроде ясно сказано:
Есть DBF файл с колонками "Номер документа", "Дата документа", "ИНН Контрагента", "Номенклатура", "Цена", "Количество", "Ставка НДС" и "Сумма".
Что же касается "перебора по индексам", то тут все не так очевидно, пока что сохраним интригу...
---
Сообщение было скрыто модератором.
---
Покажи класс "программист".
---
Сообщение было скрыто модератором.
---
Ты себя переоцениваешь.
---
Сообщение было скрыто модератором.
---
Платят за неуважение к людям, которые задают вопросы на форуме, который для этого и предназначен, чтобы найти ответы? Или за попытку самоутвердиться, только не пойму одного, если тебе платят, то почему ты сейчас не занят работой, а сидишь здесь и пытаешься втюхать какую-то чушь про свою "космическую востребованность"?
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Лучше подскажи почему у меня код получился неразноцветным? Что подправить надо?
---
Обновить страницу
---
Сообщение было скрыто модератором.
---
Написал в тех.поддержку про это.
---
Сообщение было скрыто модератором.
---
Платят за неуважение к людям, которые задают вопросы на форуме, который для этого и предназначен, чтобы найти ответы? Ну вот, как я и предупреждал в (26) в недавней дискуссии.

И ведь не новичок...
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
на форуме, который для этого и предназначен, чтобы найти ответыНу, то есть для написания ответов форум не предназначен. Я так и знал.
---
Сообщение было скрыто модератором.
---
Ну, то есть для написания ответов форум не предназначен. Я так и знал.
Автор не пытался дать исчерпывающий ответ для чего предназначен форум.
Ты хотел выразить свою точку зрения или точку зрения автора? Ну про тебя-то и так все понятно. Ты сам рассказал для чего пользуешься форумом. А про автора спорное утверждение.
---
. Другой вариант: Поместить таблицу значений в запрос и сгруппировать по ИНН контрагента и номеру и дате документа, например. Тогда не надо будет проверять совпадение номеров и дат
---
Попробую, спасибо.
---
Сообщение было скрыто модератором.
---
Кто бота впустил? Теперь после него проветривать придётся.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
У меня получился вот такой код. Помещаю таблицу значений в запрос и использую конструкцию ИТОГИ ПО по номеру и дате. Дальше выборка с обходом результата запроса по группировке "НомерИДата"

```1c
    ТипСтрока50 = Новый ОписаниеТипов("Строка", ,
    Новый КвалификаторыСтроки(50, ДопустимаяДлина.Переменная));

    ТипЧисло10_2 =Новый ОписаниеТипов("Число",
    Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Любой));

    ТаблицаЗначений = Новый ТаблицаЗначений;
    ТаблицаЗначений.Колонки.Добавить("НомерДокумента", ТипСтрока50);
    ТаблицаЗначений.Колонки.Добавить("ДатаДокумента", ТипСтрока50);
    ТаблицаЗначений.Колонки.Добавить("ИННКонтрагента", ТипСтрока50);
    ТаблицаЗначений.Колонки.Добавить("Номенклатура", ТипСтрока50);
    ТаблицаЗначений.Колонки.Добавить("Цена", ТипЧисло10_2);
    ТаблицаЗначений.Колонки.Добавить("Количество", ТипЧисло10_2);
    ТаблицаЗначений.Колонки.Добавить("СтавкаНДС", ТипЧисло10_2);
    ТаблицаЗначений.Колонки.Добавить("Сумма", ТипЧисло10_2);

    ТаблицаЗначений.Добавить();
    ТаблицаЗначений[0].НомерДокумента = "Документ1";
    ТаблицаЗначений[0].ДатаДокумента = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ТаблицаЗначений[0].ИННКонтрагента = "1234567890";
    ТаблицаЗначений[0].Номенклатура = "Товар1";
    ТаблицаЗначений[0].Цена = 1000;
    ТаблицаЗначений[0].Количество = 5;
    ТаблицаЗначений[0].СтавкаНДС = 20;
    ТаблицаЗначений[0].Сумма = ТаблицаЗначений[0].Цена * ТаблицаЗначений[0].Количество;

    ТаблицаЗначений.Добавить();
    ТаблицаЗначений[1].НомерДокумента = "Документ1";
    ТаблицаЗначений[1].ДатаДокумента = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ТаблицаЗначений[1].ИННКонтрагента = "1234567890";
    ТаблицаЗначений[1].Номенклатура = "Товар2";
    ТаблицаЗначений[1].Цена = 1500;
    ТаблицаЗначений[1].Количество = 3;
    ТаблицаЗначений[1].СтавкаНДС = 10;
    ТаблицаЗначений[1].Сумма = ТаблицаЗначений[1].Цена * ТаблицаЗначений[1].Количество;

    ТаблицаЗначений.Добавить();
    ТаблицаЗначений[2].НомерДокумента = "Документ3";
    ТаблицаЗначений[2].ДатаДокумента = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ТаблицаЗначений[2].ИННКонтрагента = "5432167890";
    ТаблицаЗначений[2].Номенклатура = "Товар3";
    ТаблицаЗначений[2].Цена = 2000;
    ТаблицаЗначений[2].Количество = 2;
    ТаблицаЗначений[2].СтавкаНДС = 20;
    ТаблицаЗначений[2].Сумма = ТаблицаЗначений[2].Цена * ТаблицаЗначений[2].Количество;

    ТаблицаЗначений.Добавить();
    ТаблицаЗначений[3].НомерДокумента = "Документ4";
    ТаблицаЗначений[3].ДатаДокумента = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ТаблицаЗначений[3].ИННКонтрагента = "0987654321";
    ТаблицаЗначений[3].Номенклатура = "Товар4";
    ТаблицаЗначений[3].Цена = 3000;
    ТаблицаЗначений[3].Количество = 1;
    ТаблицаЗначений[3].СтавкаНДС = 10;
    ТаблицаЗначений[3].Сумма = ТаблицаЗначений[3].Цена * ТаблицаЗначений[3].Количество;

    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ТЗ.НомерДокумента КАК НомерДокумента,
    | ТЗ.ДатаДокумента КАК ДатаДокумента,
    | ТЗ.ИННКонтрагента КАК ИННКонтрагента,
    | ТЗ.Номенклатура КАК Номенклатура,
    | ТЗ.Цена КАК Цена,
    | ТЗ.Количество КАК Количество,
    | ТЗ.СтавкаНДС КАК СтавкаНДС,
    | ТЗ.Сумма КАК Сумма
    |ПОМЕСТИТЬ Врем_ТЗ
    |ИЗ
    | &ТЗ КАК ТЗ
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | Врем_ТЗ.НомерДокумента + "_" + Врем_ТЗ.ДатаДокумента КАК НомерИДата,
    | Врем_ТЗ.НомерДокумента КАК НомерДокумента,
    | Врем_ТЗ.ДатаДокумента КАК ДатаДокумента,
    | Врем_ТЗ.ИННКонтрагента КАК ИННКонтрагента,
    | Врем_ТЗ.Номенклатура КАК Номенклатура,
    | Врем_ТЗ.Цена КАК Цена,
    | Врем_ТЗ.Количество КАК Количество,
    | Врем_ТЗ.СтавкаНДС КАК СтавкаНДС,
    | Врем_ТЗ.Сумма КАК Сумма
    |ИЗ
    | Врем_ТЗ КАК Врем_ТЗ
    |ИТОГИ
    | МАКСИМУМ(НомерДокумента), // Нужно для того чтобы вывести НомерДокумента в группировке по "НомерИДата". Такой хитрый трюк
    | МАКСИМУМ(ДатаДокумента), // Нужно для того чтобы вывести ДатаДокумента в группировке по "НомерИДата". Такой хитрый трюк
    | МАКСИМУМ(ИННКонтрагента), // Нужно для того чтобы вывести ИННКонтрагента в группировке по "НомерИДата". Такой хитрый трюк
    | СУММА(Сумма)
    |ПО
    | НомерИДата";

    Запрос.УстановитьПараметр("ТЗ", ТаблицаЗначений);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДокумент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НомерИДата");

    Пока ВыборкаДокумент.Следующий() Цикл

    // Здесь создаем документ
    НомерДок = ВыборкаДокумент.НомерДокумента;
    ДатаДок = ВыборкаДокумент.ДатаДокумента;
    ИННКонтрагента = ВыборкаДокумент.ИННКонтрагента;
    ОбщаяСумма = ВыборкаДокумент.Сумма;
    ВыборкаДетальныеЗаписи = ВыборкаДокумент.Выбрать();

    Сообщить("НомерДок "+НомерДок);
    Сообщить("ДатаДок "+ДатаДок);
    Сообщить("ИННКонтрагента "+ИННКонтрагента);
    Сообщить("ОбщаяСумма "+ОбщаяСумма);

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    // Здесь заполняем табличную часть документа
    Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
    Цена = ВыборкаДетальныеЗаписи.Цена;
    Количество = ВыборкаДетальныеЗаписи.Количество;
    СтавкаНДС = ВыборкаДетальныеЗаписи.СтавкаНДС;
    Сообщить("Номенклатура "+Номенклатура);
    Сообщить("Цена "+Цена);
    Сообщить("Количество "+Количество);
    Сообщить("СтавкаНДС "+СтавкаНДС);
    КонецЦикла;

    КонецЦикла;

    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
```
---
Сообщение было скрыто модератором.
---
Есть грех. Заняться есть чем на работе, а я тут сижу. Частично Chat gpt код написал, но все равно время потратил.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Есть еще такой вариант.

```1c
    ТипСтрока50 = Новый ОписаниеТипов("Строка", ,
    Новый КвалификаторыСтроки(50, ДопустимаяДлина.Переменная));

    ТипЧисло10_2 =Новый ОписаниеТипов("Число",
    Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Любой));

    ТаблицаЗначений = Новый ТаблицаЗначений;
    ТаблицаЗначений.Колонки.Добавить("НомерДокумента", ТипСтрока50);
    ТаблицаЗначений.Колонки.Добавить("ДатаДокумента", ТипСтрока50);
    ТаблицаЗначений.Колонки.Добавить("ИННКонтрагента", ТипСтрока50);
    ТаблицаЗначений.Колонки.Добавить("Номенклатура", ТипСтрока50);
    ТаблицаЗначений.Колонки.Добавить("Цена", ТипЧисло10_2);
    ТаблицаЗначений.Колонки.Добавить("Количество", ТипЧисло10_2);
    ТаблицаЗначений.Колонки.Добавить("СтавкаНДС", ТипЧисло10_2);
    ТаблицаЗначений.Колонки.Добавить("Сумма", ТипЧисло10_2);

    ТаблицаЗначений.Добавить();
    ТаблицаЗначений[0].НомерДокумента = "Документ1";
    ТаблицаЗначений[0].ДатаДокумента = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ТаблицаЗначений[0].ИННКонтрагента = "1234567890";
    ТаблицаЗначений[0].Номенклатура = "Товар1";
    ТаблицаЗначений[0].Цена = 1000;
    ТаблицаЗначений[0].Количество = 5;
    ТаблицаЗначений[0].СтавкаНДС = 20;
    ТаблицаЗначений[0].Сумма = ТаблицаЗначений[0].Цена * ТаблицаЗначений[0].Количество;

    ТаблицаЗначений.Добавить();
    ТаблицаЗначений[1].НомерДокумента = "Документ1";
    ТаблицаЗначений[1].ДатаДокумента = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ТаблицаЗначений[1].ИННКонтрагента = "1234567890";
    ТаблицаЗначений[1].Номенклатура = "Товар2";
    ТаблицаЗначений[1].Цена = 1500;
    ТаблицаЗначений[1].Количество = 3;
    ТаблицаЗначений[1].СтавкаНДС = 10;
    ТаблицаЗначений[1].Сумма = ТаблицаЗначений[1].Цена * ТаблицаЗначений[1].Количество;

    ТаблицаЗначений.Добавить();
    ТаблицаЗначений[2].НомерДокумента = "Документ3";
    ТаблицаЗначений[2].ДатаДокумента = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ТаблицаЗначений[2].ИННКонтрагента = "5432167890";
    ТаблицаЗначений[2].Номенклатура = "Товар3";
    ТаблицаЗначений[2].Цена = 2000;
    ТаблицаЗначений[2].Количество = 2;
    ТаблицаЗначений[2].СтавкаНДС = 20;
    ТаблицаЗначений[2].Сумма = ТаблицаЗначений[2].Цена * ТаблицаЗначений[2].Количество;

    ТаблицаЗначений.Добавить();
    ТаблицаЗначений[3].НомерДокумента = "Документ4";
    ТаблицаЗначений[3].ДатаДокумента = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ТаблицаЗначений[3].ИННКонтрагента = "0987654321";
    ТаблицаЗначений[3].Номенклатура = "Товар4";
    ТаблицаЗначений[3].Цена = 3000;
    ТаблицаЗначений[3].Количество = 1;
    ТаблицаЗначений[3].СтавкаНДС = 10;
    ТаблицаЗначений[3].Сумма = ТаблицаЗначений[3].Цена * ТаблицаЗначений[3].Количество;

    ТабДокументы = ТаблицаЗначений.Скопировать();
    ТабДокументы.Свернуть("НомерДокумента, ДатаДокумента, ИННКонтрагента", "Сумма");

    Для каждого ТекДокумент Из ТабДокументы Цикл

    // Здесь создаем документ
    НомерДок = ТекДокумент.НомерДокумента;
    ДатаДок = ТекДокумент.ДатаДокумента;
    ИННКонтрагента = ТекДокумент.ИННКонтрагента;
    ОбщаяСумма = ТекДокумент.Сумма;

    Сообщить("НомерДок "+НомерДок);
    Сообщить("ДатаДок "+ДатаДок);
    Сообщить("ИННКонтрагента "+ИННКонтрагента);
    Сообщить("ОбщаяСумма "+ОбщаяСумма);

    ОтборСтрокТекущегоДокумента = Новый Структура;
    ОтборСтрокТекущегоДокумента.Вставить("НомерДокумента", НомерДок);
    ОтборСтрокТекущегоДокумента.Вставить("ДатаДокумента", ДатаДок);

    СтрокиДокумента = ТаблицаЗначений.НайтиСтроки(ОтборСтрокТекущегоДокумента);

    Для каждого СтрокаТЧДокумента Из СтрокиДокумента Цикл

    // Здесь заполняем табличную часть документа
    Номенклатура = СтрокаТЧДокумента.Номенклатура;
    Цена = СтрокаТЧДокумента.Цена;
    Количество = СтрокаТЧДокумента.Количество;
    СтавкаНДС = СтрокаТЧДокумента.СтавкаНДС;

    Сообщить("Номенклатура "+Номенклатура);
    Сообщить("Цена "+Цена);
    Сообщить("Количество "+Количество);
    Сообщить("СтавкаНДС "+СтавкаНДС);

    КонецЦикла;

    // Здесь записываем документ

    КонецЦикла;
```
---
А ваш ChatGPT про перебор dbf по индексам что-нибудь знает? Или тут ситуация как с поиском новичками на форуме?
---
Что за ситуация?
---
Что за ситуация?
Как говорил один Torin57:

Новички ленятся пользоваться поиском, а старожилы ленятся объяснять по каким ключевым словам искать. Типа он сам догадается. Да не догадается. Большинство людей и невнимательны и не сообразительны. Просто у нас в этом сознаваться не принято.

http://forum.infostart.ru/forum1/topic303254/message3003074/#message3003074
---
Я просто не знаю как это сделать. Перегнать dbf в таблицу значений. Поиск приводит сюда, но я сам не пробовал.
https://infostart.ru/1c/articles/103060/
---
А ваш ChatGPT про перебор dbf по индексам что-нибудь знает?
Индексы нужно для скорости. А тут что, нужно ускорение? Что там у автора? Тысячи тысяч строк в dbf?
---
Спасибо вам большое, вы мне очень помогли, воспользовавшись Вашим шаблоном я смог сделать так как мне нужно было. Еще раз спасибо.
---
В дополнение к (52). Забил в яндексе "Перегнать dbf в таблицу значений".
---
Тема поднята 18 числа.
Неужто не смогли включить голову, чтобы написать хоть что-то самому?
Таблицу значений можно самому заполнить за пять минут кода:

```1c
    т = Новый ТаблицаЗначений();
    т.Колонки.Добавить("Номер");
    т.Колонки.Добавить("Дата");
    т.Колонки.Добавить("ИНН");
    т.Колонки.Добавить("тч");

    тч = Новый ТаблицаЗначений();
    тч.Колонки.Добавить("Наименование");
    тч.Колонки.Добавить("Цена");
    тч.Колонки.Добавить("Количество");
    тч.Колонки.Добавить("НДС");
    тч.Колонки.Добавить("Сумма");
    тч = ЗначениеВСтрокуВнутр(тч);

    имяБазы = "M:\Elected.DBF";
    база = Новый XBase(имяБазы);
    Пока НЕ база.ВКонце() Цикл

    стр = т.Найти(база.NOMER, "Номер");
    Если стр = Неопределено Тогда
    стр = т.Добавить();
    стр.Номер = база.NOMER;
    стр.Дата = база.DATE;
    стр.ИНН = база.INN;
    стр.тч = ЗначениеИзСтрокиВнутр(тч);
    КонецЕсли;

    стрТЧ = стр.тч.Добавить();
    стрТЧ.Наименование = база.NAME;
    стрТЧ.Цена = база.PRICE;
    стрТЧ.Количество = база.COUNT;
    стрТЧ.НДС = база.VAT;
    стрТЧ.Сумма = база.SUM;

    база.Следующая();
    КонецЦикла;
    база.ЗакрытьФайл();

    Для каждого стр из т Цикл
    Сообщить("Документ № " + стр.Номер + " от " + стр.Дата + " ИНН " + стр.ИНН);
    Для каждого стрТЧ из стр.тч Цикл
    Сообщить(" " + стр.Наименование + " : " + стр.Цена + " · " + стр.Количество + " = " + стр.Сумма + " НДС " + стр.НДС);
    КонецЦикла;
    КонецЦикла;

    Сообщить("Всё!");
```
---
Неужто не смогли включить голову, чтобы написать хоть что-то самому?
IT как раз для этого и нужно. Чтобы дать отдых мозгам. Но большинство думает иначе. Усложняет на пустом месте. Как например user1936667 20.09.23 21:59 в этой ветке зачем-то приплел перебор dbf по индексам. Ну можно что-то такое замутить. На какую-то милисекунду, условно говоря, будет быстрее. Только зачем?
---
Как например user1936667 20.09.23 21:59 в этой ветке зачем-то приплел перебор dbf по индексам
Ничего не меняется. Тупые пытаются обучать тупых, привлекая для этого красивые и модные нейрообертки и наяривая на своё незнание. Перекрестное опыление, инцухт, инцест и вырождение собщества...

Индексы нужны для упорядочивания, это позволяет обойтись без ваших таблиц значений вообще и группировать данные прямо при чтении.

Смотри, воинствующее невежество, это будет не очень сложно:

```1c
    &НаКлиенте
    Процедура Команда1(Команда)

    Команда1НаСервере();

    КонецПроцедуры

    &НаСервере
    Процедура Команда1НаСервере()

    ОписаниеФайла = НовыйФайлДанных();

    ФайлДанных = Новый XBase(ОписаниеФайла.ПутьКБазе, ОписаниеФайла.ПутьКИндексу, Истина);

    ФайлДанных.ТекущийИндекс = ФайлДанных.Индексы.IDX;
    ЕстьСтроки = ФайлДанных.Первая();

    ТекущийНомер = Неопределено;
    Пока ЕстьСтроки Цикл
    НомерДокумента = ФайлДанных.DOCNUM;
    Если НомерДокумента <> ТекущийНомер Тогда
    Сообщить("Создан новый документ №" + НомерДокумента);
    ТекущийНомер = НомерДокумента;
    КонецЕсли;

    НомерСтроки = ФайлДанных.LINENUM;
    Сообщить(" " + НомерСтроки);

    ЕстьСтроки = ФайлДанных.Следующая();
    КонецЦикла;

    ФайлДанных.ЗакрытьФайл();
    УдалитьФайлДанных(ОписаниеФайла);

    КонецПроцедуры

    Функция НовыйФайлДанных()

    Каталог = ПолучитьИмяВременногоФайла();
    СоздатьКаталог(Каталог);

    ПутьКБазе = Каталог + "\test.dbf";
    ПутьКИндексу = Каталог + "\test.cdx";

    ФайлДанных = Новый XBase;
    ФайлДанных.Поля.Добавить("DOCNUM", "N", 10, 0);
    ФайлДанных.Поля.Добавить("LINENUM", "N", 10, 0);

    ФайлДанных.Индексы.Добавить("IDX", "STR(DOCNUM, 10) + STR(LINENUM, 10)");

    ФайлДанных.СоздатьФайл(ПутьКБазе, ПутьКИндексу);
    ФайлДанных.АвтоСохранение = Истина;

    ФайлДанных.Добавить();
    ФайлДанных.DOCNUM = 2;
    ФайлДанных.LINENUM = 1;

    ФайлДанных.Добавить();
    ФайлДанных.DOCNUM = 2;
    ФайлДанных.LINENUM = 2;

    ФайлДанных.Добавить();
    ФайлДанных.DOCNUM = 1;
    ФайлДанных.LINENUM = 3;

    ФайлДанных.Добавить();
    ФайлДанных.DOCNUM = 1;
    ФайлДанных.LINENUM = 2;

    ФайлДанных.Добавить();
    ФайлДанных.DOCNUM = 1;
    ФайлДанных.LINENUM = 1;

    ФайлДанных.ЗакрытьФайл();

    Описание = Новый Структура;
    Описание.Вставить("Каталог", Каталог);
    Описание.Вставить("ПутьКБазе", ПутьКБазе);
    Описание.Вставить("ПутьКИндексу", ПутьКИндексу);

    Возврат Описание;

    КонецФункции

    Функция УдалитьФайлДанных(ОписаниеФайла)

    УдалитьФайлы(ОписаниеФайла.Каталог);

    КонецФункции
```
---
Добавь, пож-та, еще комментарий где документ создается, где добавляются строки, где документ записывается.
---
Индексы нужны для упорядочивания Вот-вот, именно это я и подразумевал в (58), потому что в (1) никак не обозначено, что записи в DBF, относящиеся к одному документу, будут идти подряд.
(60) Добавь, пож-та, еще комментарий где документ создается, где добавляются строки, где документ записывается. "Сама-сама-сама! Не в ресторане, самообслуживание!" (с)
---
То есть для того чтобы раскрутить тебя на написание кода мне пришлось проявить воинствующее невежество. Так что ли с вами разговаривать?

 Перекрестное опыление, инцухт, инцест и вырождение собщества...

Так ты же первый к этому руку прилагаешь.
---
"Пивная, ещё парочку" (с) :)
---
Судя по всему проще всего сделать так
Создай новое соответствие
Читай файл, если в соответствии уже есть повторяющие наименование тогда в массив добавляй значение
и так далее

В каждом соответствии будет ключ наименование и значение массив. По итогу ты получишь то что хотел