Загрузка данных из DBF файла в 1С БП 3.0
Здравствуйте.
Есть DBF файл с колонками "Номер документа", "Дата документа", "ИНН Контрагента", "Номенклатура", "Цена", "Количество", "Ставка НДС" и "Сумма".
Ситуация следующая, в файле может быть несколько строк с одним и тем же номером документа и датой, но разной номенклатурой, т.к. документ поступления один. Подскажите, пожалуйста, каким образом можно создать документы поступления в 1С БП, что бы не на каждую строчку dbf файла создавался документ, а с учетом группировки по номеру документа и дате с заполненной информацией по номенклатуре?
Есть DBF файл с колонками "Номер документа", "Дата документа", "ИНН Контрагента", "Номенклатура", "Цена", "Количество", "Ставка НДС" и "Сумма".
Ситуация следующая, в файле может быть несколько строк с одним и тем же номером документа и датой, но разной номенклатурой, т.к. документ поступления один. Подскажите, пожалуйста, каким образом можно создать документы поступления в 1С БП, что бы не на каждую строчку dbf файла создавался документ, а с учетом группировки по номеру документа и дате с заполненной информацией по номенклатуре?
По теме из базы знаний
- Загрузка данных из F3 TAIL 3 (еФарма 2) в 1С: Бухгалтерия 3.0 (базовая, ПРОФ, КОРП)
- Загрузка данных из Algoritm-S в конфигурацию "Бухгалтерия предприятия 3.0 (3.0.79.21) "
- Загрузка чеков ФНС в документы 1С:БП, 1С:УНФ, 1С:ERP, 1С:КА и 1С:УТ
- Пример разработки инструмента загрузки данных SAP в 1С
- Загрузка данных GasKit 9 в 1С:Бухгалтерию 3.0 (формат xml)
Найденные решения
Есть еще такой вариант.
ТипСтрока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].Количество;
ТабДокументы = ТаблицаЗначений.Скопировать();
ТабДокументы.Свернуть("НомерДокумента, ДатаДокумента, ИННКонтрагента", "Сумма");
Для каждого ТекДокумент Из ТабДокументы Цикл
// Здесь создаем документ
НомерДок = ТекДокумент.НомерДокумента;
ДатаДок = ТекДокумент.ДатаДокумента;
ИННКонтрагента = ТекДокумент.ИННКонтрагента;
ОбщаяСумма = ТекДокумент.Сумма;
Сообщить("НомерДок "+НомерДок);
Сообщить("ДатаДок "+ДатаДок);
Сообщить("ИННКонтрагента "+ИННКонтрагента);
Сообщить("ОбщаяСумма "+ОбщаяСумма);
ОтборСтрокТекущегоДокумента = Новый Структура;
ОтборСтрокТекущегоДокумента.Вставить("НомерДокумента", НомерДок);
ОтборСтрокТекущегоДокумента.Вставить("ДатаДокумента", ДатаДок);
СтрокиДокумента = ТаблицаЗначений.НайтиСтроки(ОтборСтрокТекущегоДокумента);
Для каждого СтрокаТЧДокумента Из СтрокиДокумента Цикл
// Здесь заполняем табличную часть документа
Номенклатура = СтрокаТЧДокумента.Номенклатура;
Цена = СтрокаТЧДокумента.Цена;
Количество = СтрокаТЧДокумента.Количество;
СтавкаНДС = СтрокаТЧДокумента.СтавкаНДС;
Сообщить("Номенклатура "+Номенклатура);
Сообщить("Цена "+Цена);
Сообщить("Количество "+Количество);
Сообщить("СтавкаНДС "+СтавкаНДС);
КонецЦикла;
// Здесь записываем документ
КонецЦикла;
ПоказатьОстальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) без программирования, если документов немного, то открыть dbf в excel, сохранить нужные строки в отдельные файлы, и с помощью стандартной обработки загрузки из xls создать нужные поступления
p.s.можно прямо из dbf
p.s.
(57)
Что же касается "перебора по индексам", то тут все не так очевидно, пока что сохраним интригу...
зачем-то приплел перебор dbf по индексам
Может, затем, что в вашем коде DBF никак не фигурирует, от слова "совсем"? Хотя в исходном ТЗ вроде ясно сказано:
Есть DBF файл с колонками "Номер документа", "Дата документа", "ИНН Контрагента", "Номенклатура", "Цена", "Количество", "Ставка НДС" и "Сумма".
Что же касается "перебора по индексам", то тут все не так очевидно, пока что сохраним интригу...
(7)Платят за неуважение к людям, которые задают вопросы на форуме, который для этого и предназначен, чтобы найти ответы? Или за попытку самоутвердиться, только не пойму одного, если тебе платят, то почему ты сейчас не занят работой, а сидишь здесь и пытаешься втюхать какую-то чушь про свою "космическую востребованность"?
(8) недавней дискуссии .
И ведь не новичок...
Платят за неуважение к людям, которые задают вопросы на форуме, который для этого и предназначен, чтобы найти ответы?
Ну вот, как я и предупреждал в (26) в И ведь не новичок...
(43)
Автор не пытался дать исчерпывающий ответ для чего предназначен форум.
Ты хотел выразить свою точку зрения или точку зрения автора? Ну про тебя-то и так все понятно. Ты сам рассказал для чего пользуешься форумом. А про автора спорное утверждение.
Ну, то есть для написания ответов форум не предназначен. Я так и знал.
Автор не пытался дать исчерпывающий ответ для чего предназначен форум.
Ты хотел выразить свою точку зрения или точку зрения автора? Ну про тебя-то и так все понятно. Ты сам рассказал для чего пользуешься форумом. А про автора спорное утверждение.
У меня получился вот такой код. Помещаю таблицу значений в запрос и использую конструкцию ИТОГИ ПО по номеру и дате. Дальше выборка с обходом результата запроса по группировке "НомерИДата"
ТипСтрока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].Количество;
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТЗ.НомерДокумента КАК НомерДокумента,
| ТЗ.ДатаДокумента КАК ДатаДокумента,
| ТЗ.ИННКонтрагента КАК ИННКонтрагента,
| ТЗ.Номенклатура КАК Номенклатура,
| ТЗ.Цена КАК Цена,
| ТЗ.Количество КАК Количество,
| ТЗ.СтавкаНДС КАК СтавкаНДС,
| ТЗ.Сумма КАК Сумма
|ПОМЕСТИТЬ Врем_ТЗ
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Врем_ТЗ.НомерДокумента + ""_"" + Врем_ТЗ.ДатаДокумента КАК НомерИДата,
| Врем_ТЗ.НомерДокумента КАК НомерДокумента,
| Врем_ТЗ.ДатаДокумента КАК ДатаДокумента,
| Врем_ТЗ.ИННКонтрагента КАК ИННКонтрагента,
| Врем_ТЗ.Номенклатура КАК Номенклатура,
| Врем_ТЗ.Цена КАК Цена,
| Врем_ТЗ.Количество КАК Количество,
| Врем_ТЗ.СтавкаНДС КАК СтавкаНДС,
| Врем_ТЗ.Сумма КАК Сумма
|ИЗ
| Врем_ТЗ КАК Врем_ТЗ
|ИТОГИ
| МАКСИМУМ(НомерДокумента), // Нужно для того чтобы вывести НомерДокумента в группировке по ""НомерИДата"". Такой хитрый трюк
| МАКСИМУМ(ДатаДокумента), // Нужно для того чтобы вывести ДатаДокумента в группировке по ""НомерИДата"". Такой хитрый трюк
| МАКСИМУМ(ИННКонтрагента), // Нужно для того чтобы вывести ИННКонтрагента в группировке по ""НомерИДата"". Такой хитрый трюк
| СУММА(Сумма)
|ПО
| НомерИДата";
Запрос.УстановитьПараметр("ТЗ", ТаблицаЗначений);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокумент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НомерИДата");
Пока ВыборкаДокумент.Следующий() Цикл
// Здесь создаем документ
НомерДок = ВыборкаДокумент.НомерДокумента;
ДатаДок = ВыборкаДокумент.ДатаДокумента;
ИННКонтрагента = ВыборкаДокумент.ИННКонтрагента;
ОбщаяСумма = ВыборкаДокумент.Сумма;
ВыборкаДетальныеЗаписи = ВыборкаДокумент.Выбрать();
Сообщить("НомерДок "+НомерДок);
Сообщить("ДатаДок "+ДатаДок);
Сообщить("ИННКонтрагента "+ИННКонтрагента);
Сообщить("ОбщаяСумма "+ОбщаяСумма);
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Здесь заполняем табличную часть документа
Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Цена = ВыборкаДетальныеЗаписи.Цена;
Количество = ВыборкаДетальныеЗаписи.Количество;
СтавкаНДС = ВыборкаДетальныеЗаписи.СтавкаНДС;
Сообщить("Номенклатура "+Номенклатура);
Сообщить("Цена "+Цена);
Сообщить("Количество "+Количество);
Сообщить("СтавкаНДС "+СтавкаНДС);
КонецЦикла;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Показать
Есть еще такой вариант.
ТипСтрока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].Количество;
ТабДокументы = ТаблицаЗначений.Скопировать();
ТабДокументы.Свернуть("НомерДокумента, ДатаДокумента, ИННКонтрагента", "Сумма");
Для каждого ТекДокумент Из ТабДокументы Цикл
// Здесь создаем документ
НомерДок = ТекДокумент.НомерДокумента;
ДатаДок = ТекДокумент.ДатаДокумента;
ИННКонтрагента = ТекДокумент.ИННКонтрагента;
ОбщаяСумма = ТекДокумент.Сумма;
Сообщить("НомерДок "+НомерДок);
Сообщить("ДатаДок "+ДатаДок);
Сообщить("ИННКонтрагента "+ИННКонтрагента);
Сообщить("ОбщаяСумма "+ОбщаяСумма);
ОтборСтрокТекущегоДокумента = Новый Структура;
ОтборСтрокТекущегоДокумента.Вставить("НомерДокумента", НомерДок);
ОтборСтрокТекущегоДокумента.Вставить("ДатаДокумента", ДатаДок);
СтрокиДокумента = ТаблицаЗначений.НайтиСтроки(ОтборСтрокТекущегоДокумента);
Для каждого СтрокаТЧДокумента Из СтрокиДокумента Цикл
// Здесь заполняем табличную часть документа
Номенклатура = СтрокаТЧДокумента.Номенклатура;
Цена = СтрокаТЧДокумента.Цена;
Количество = СтрокаТЧДокумента.Количество;
СтавкаНДС = СтрокаТЧДокумента.СтавкаНДС;
Сообщить("Номенклатура "+Номенклатура);
Сообщить("Цена "+Цена);
Сообщить("Количество "+Количество);
Сообщить("СтавкаНДС "+СтавкаНДС);
КонецЦикла;
// Здесь записываем документ
КонецЦикла;
Показать
(49)
Как говорил один Torin57:
http://forum.infostart.ru/forum1/topic303254/message3003074/#message3003074
Что за ситуация?
Как говорил один Torin57:
Новички ленятся пользоваться поиском, а старожилы ленятся объяснять по каким ключевым словам искать. Типа он сам догадается. Да не догадается. Большинство людей и невнимательны и не сообразительны. Просто у нас в этом сознаваться не принято.
(51) Я просто не знаю как это сделать. Перегнать dbf в таблицу значений. Поиск приводит сюда, но я сам не пробовал.
https://infostart.ru/1c/articles/103060/
Тема поднята 18 числа.
Неужто не смогли включить голову, чтобы написать хоть что-то самому?
Таблицу значений можно самому заполнить за пять минут кода:
Неужто не смогли включить голову, чтобы написать хоть что-то самому?
Таблицу значений можно самому заполнить за пять минут кода:
т = Новый ТаблицаЗначений();
т.Колонки.Добавить("Номер");
т.Колонки.Добавить("Дата");
т.Колонки.Добавить("ИНН");
т.Колонки.Добавить("тч");
тч = Новый ТаблицаЗначений();
тч.Колонки.Добавить("Наименование");
тч.Колонки.Добавить("Цена");
тч.Колонки.Добавить("Количество");
тч.Колонки.Добавить("НДС");
тч.Колонки.Добавить("Сумма");
тч = ЗначениеВСтрокуВнутр(тч);
имяБазы = "M:\Elected.DBF";
база = Новый XBase(имяБазы);
Пока НЕ база.ВКонце() Цикл
стр = т.Найти(база.NOMER, "Номер");
Если стр = Неопределено Тогда
стр = т.Добавить();
стр.Номер = база.NOMER;
стр.Дата = база.DATE;
стр.ИНН = база.INN;
стр.тч = ЗначениеИзСтрокиВнутр(тч);
КонецЕсли;
стрТЧ = стр.тч.Добавить();
стрТЧ.Наименование = база.NAME;
стрТЧ.Цена = база.PRICE;
стрТЧ.Количество = база.COUNT;
стрТЧ.НДС = база.VAT;
стрТЧ.Сумма = база.SUM;
база.Следующая();
КонецЦикла;
база.ЗакрытьФайл();
Для каждого стр из т Цикл
Сообщить("Документ № " + стр.Номер + " от " + стр.Дата + " ИНН " + стр.ИНН);
Для каждого стрТЧ из стр.тч Цикл
Сообщить(" " + стр.Наименование + " : " + стр.Цена + " · " + стр.Количество + " = " + стр.Сумма + " НДС " + стр.НДС);
КонецЦикла;
КонецЦикла;
Сообщить("Всё!");
Показать
(56)
IT как раз для этого и нужно. Чтобы дать отдых мозгам. Но большинство думает иначе. Усложняет на пустом месте. Как например user1936667 20.09.23 21:59 в этой ветке зачем-то приплел перебор dbf по индексам. Ну можно что-то такое замутить. На какую-то милисекунду, условно говоря, будет быстрее. Только зачем?
Неужто не смогли включить голову, чтобы написать хоть что-то самому?
IT как раз для этого и нужно. Чтобы дать отдых мозгам. Но большинство думает иначе. Усложняет на пустом месте. Как например user1936667 20.09.23 21:59 в этой ветке зачем-то приплел перебор dbf по индексам. Ну можно что-то такое замутить. На какую-то милисекунду, условно говоря, будет быстрее. Только зачем?
(57)
Ничего не меняется. Тупые пытаются обучать тупых, привлекая для этого красивые и модные нейрообертки и наяривая на своё незнание. Перекрестное опыление, инцухт, инцест и вырождение собщества...
Индексы нужны для упорядочивания, это позволяет обойтись без ваших таблиц значений вообще и группировать данные прямо при чтении.
Смотри, воинствующее невежество, это будет не очень сложно:
Как например user1936667 20.09.23 21:59 в этой ветке зачем-то приплел перебор dbf по индексам
Ничего не меняется. Тупые пытаются обучать тупых, привлекая для этого красивые и модные нейрообертки и наяривая на своё незнание. Перекрестное опыление, инцухт, инцест и вырождение собщества...
Индексы нужны для упорядочивания, это позволяет обойтись без ваших таблиц значений вообще и группировать данные прямо при чтении.
Смотри, воинствующее невежество, это будет не очень сложно:
&НаКлиенте
Процедура Команда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;
ФайлДанных.ЗакрытьФайл();
Описание = Новый Структура;
Описание.Вставить("Каталог", Каталог);
Описание.Вставить("ПутьКБазе", ПутьКБазе);
Описание.Вставить("ПутьКИндексу", ПутьКИндексу);
Возврат Описание;
КонецФункции
Функция УдалитьФайлДанных(ОписаниеФайла)
УдалитьФайлы(ОписаниеФайла.Каталог);
КонецФункции
Показать
(59)
(60)
Индексы нужны для упорядочивания
Вот-вот, именно это я и подразумевал в (58), потому что в (1) никак не обозначено, что записи в DBF, относящиеся к одному документу, будут идти подряд.
(60)
Добавь, пож-та, еще комментарий где документ создается, где добавляются строки, где документ записывается.
"Сама-сама-сама! Не в ресторане, самообслуживание!" (с)
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день