Загрузка данных из DBF файла в 1С БП 3.0

1. user1C99 18.09.23 14:12 Сейчас в теме
Здравствуйте.
Есть DBF файл с колонками "Номер документа", "Дата документа", "ИНН Контрагента", "Номенклатура", "Цена", "Количество", "Ставка НДС" и "Сумма".
Ситуация следующая, в файле может быть несколько строк с одним и тем же номером документа и датой, но разной номенклатурой, т.к. документ поступления один. Подскажите, пожалуйста, каким образом можно создать документы поступления в 1С БП, что бы не на каждую строчку dbf файла создавался документ, а с учетом группировки по номеру документа и дате с заполненной информацией по номенклатуре?
По теме из базы знаний
Найденные решения
47. Torin57 7 20.09.23 21:04 Сейчас в теме
Есть еще такой вариант.

	
ТипСтрока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].Количество;
	
	ТабДокументы = ТаблицаЗначений.Скопировать();
	ТабДокументы.Свернуть("НомерДокумента, ДатаДокумента, ИННКонтрагента", "Сумма");
	
	Для каждого ТекДокумент Из ТабДокументы Цикл
		
		// Здесь создаем документ
		НомерДок			= ТекДокумент.НомерДокумента;
		ДатаДок			= ТекДокумент.ДатаДокумента;
		ИННКонтрагента	= ТекДокумент.ИННКонтрагента;
		ОбщаяСумма		= ТекДокумент.Сумма;
		
		Сообщить("НомерДок "+НомерДок);
		Сообщить("ДатаДок "+ДатаДок);
		Сообщить("ИННКонтрагента "+ИННКонтрагента);
		Сообщить("ОбщаяСумма "+ОбщаяСумма);

		ОтборСтрокТекущегоДокумента = Новый Структура;
		ОтборСтрокТекущегоДокумента.Вставить("НомерДокумента",	  НомерДок);
		ОтборСтрокТекущегоДокумента.Вставить("ДатаДокумента",	  ДатаДок);
		
		СтрокиДокумента = ТаблицаЗначений.НайтиСтроки(ОтборСтрокТекущегоДокумента);
		
		Для каждого СтрокаТЧДокумента Из СтрокиДокумента Цикл

			// Здесь заполняем табличную часть документа
			Номенклатура	 = СтрокаТЧДокумента.Номенклатура;
			Цена			 = СтрокаТЧДокумента.Цена;
			Количество	 = СтрокаТЧДокумента.Количество;
			СтавкаНДС	 = СтрокаТЧДокумента.СтавкаНДС;   
			
			Сообщить("Номенклатура "+Номенклатура);
			Сообщить("Цена "+Цена);
			Сообщить("Количество "+Количество);
			Сообщить("СтавкаНДС "+СтавкаНДС);
			
		КонецЦикла;  
		
		// Здесь записываем документ
		
	КонецЦикла;
Показать
user1C99; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 34 18.09.23 14:18 Сейчас в теме
(1) Например, прочитать в таблицу, отсортировать таблицу по номеру документа и дате.
При обходе таблицы в цикле если номер и дата в строке таблицы отличается от номера и даты в предыдущей строке, то создавать новый документ.
user1881120; +1 Ответить
11. user1C99 18.09.23 15:07 Сейчас в теме
50. independ 1475 20.09.23 22:56 Сейчас в теме
(1) без программирования, если документов немного, то открыть dbf в excel, сохранить нужные строки в отдельные файлы, и с помощью стандартной обработки загрузки из xls создать нужные поступления
p.s. можно прямо из dbf
58. user856012 13 21.09.23 11:02 Сейчас в теме
(57)
зачем-то приплел перебор dbf по индексам
Может, затем, что в вашем коде DBF никак не фигурирует, от слова "совсем"? Хотя в исходном ТЗ вроде ясно сказано:
Есть DBF файл с колонками "Номер документа", "Дата документа", "ИНН Контрагента", "Номенклатура", "Цена", "Количество", "Ставка НДС" и "Сумма".

Что же касается "перебора по индексам", то тут все не так очевидно, пока что сохраним интригу...
3. пользователь 18.09.23 14:52
Сообщение было скрыто модератором.
...
4. user1C99 18.09.23 14:54 Сейчас в теме
(3)Покажи класс "программист".
5. пользователь 18.09.23 14:56
Сообщение было скрыто модератором.
...
6. user1C99 18.09.23 14:58 Сейчас в теме
(5)Ты себя переоцениваешь.
7. пользователь 18.09.23 14:59
Сообщение было скрыто модератором.
...
8. user1C99 18.09.23 15:04 Сейчас в теме
(7)Платят за неуважение к людям, которые задают вопросы на форуме, который для этого и предназначен, чтобы найти ответы? Или за попытку самоутвердиться, только не пойму одного, если тебе платят, то почему ты сейчас не занят работой, а сидишь здесь и пытаешься втюхать какую-то чушь про свою "космическую востребованность"?
10. пользователь 18.09.23 15:07
Сообщение было скрыто модератором.
...
14. пользователь 18.09.23 15:13
Сообщение было скрыто модератором.
...
17. пользователь 18.09.23 15:14
Сообщение было скрыто модератором.
...
18. пользователь 18.09.23 15:15
Сообщение было скрыто модератором.
...
20. Torin57 7 18.09.23 15:15 Сейчас в теме
(17) Лучше подскажи почему у меня код получился неразноцветным? Что подправить надо?
22. Sashares 34 18.09.23 15:18 Сейчас в теме
40. пользователь 18.09.23 15:35
Сообщение было скрыто модератором.
...
42. Sashares 34 18.09.23 15:44 Сейчас в теме
(40)Написал в тех.поддержку про это.
23. пользователь 18.09.23 15:19
Сообщение было скрыто модератором.
...
21. user856012 13 18.09.23 15:17 Сейчас в теме
(8)
Платят за неуважение к людям, которые задают вопросы на форуме, который для этого и предназначен, чтобы найти ответы?
Ну вот, как я и предупреждал в (26) в недавней дискуссии.

И ведь не новичок...
25. пользователь 18.09.23 15:20
Сообщение было скрыто модератором.
...
27. пользователь 18.09.23 15:22
Сообщение было скрыто модератором.
...
30. пользователь 18.09.23 15:24
Сообщение было скрыто модератором.
...
31. пользователь 18.09.23 15:25
Сообщение было скрыто модератором.
...
33. пользователь 18.09.23 15:26
Сообщение было скрыто модератором.
...
37. пользователь 18.09.23 15:29
Сообщение было скрыто модератором.
...
39. пользователь 18.09.23 15:32
Сообщение было скрыто модератором.
...
41. пользователь 18.09.23 15:40
Сообщение было скрыто модератором.
...
44. пользователь 18.09.23 15:46
Сообщение было скрыто модератором.
...
46. пользователь 18.09.23 15:53
Сообщение было скрыто модератором.
...
43. user1936670 18.09.23 15:44 Сейчас в теме
(8)
на форуме, который для этого и предназначен, чтобы найти ответы
Ну, то есть для написания ответов форум не предназначен. Я так и знал.
Sashares; user1990628; +2 Ответить
45. пользователь 18.09.23 15:51
Сообщение было скрыто модератором.
...
54. Torin57 7 21.09.23 09:44 Сейчас в теме
(43)
Ну, то есть для написания ответов форум не предназначен. Я так и знал.

Автор не пытался дать исчерпывающий ответ для чего предназначен форум.
Ты хотел выразить свою точку зрения или точку зрения автора? Ну про тебя-то и так все понятно. Ты сам рассказал для чего пользуешься форумом. А про автора спорное утверждение.
9. alexey123perm 12 18.09.23 15:05 Сейчас в теме
(1). Другой вариант: Поместить таблицу значений в запрос и сгруппировать по ИНН контрагента и номеру и дате документа, например. Тогда не надо будет проверять совпадение номеров и дат
12. user1C99 18.09.23 15:08 Сейчас в теме
13. пользователь 18.09.23 15:09
Сообщение было скрыто модератором.
...
16. user1C99 18.09.23 15:14 Сейчас в теме
(13)Кто бота впустил? Теперь после него проветривать придётся.
26. пользователь 18.09.23 15:22
Сообщение было скрыто модератором.
...
28. пользователь 18.09.23 15:23
Сообщение было скрыто модератором.
...
32. пользователь 18.09.23 15:25
Сообщение было скрыто модератором.
...
34. пользователь 18.09.23 15:27
Сообщение было скрыто модератором.
...
36. пользователь 18.09.23 15:29
Сообщение было скрыто модератором.
...
15. Torin57 7 18.09.23 15:14 Сейчас в теме
У меня получился вот такой код. Помещаю таблицу значений в запрос и использую конструкцию ИТОГИ ПО по номеру и дате. Дальше выборка с обходом результата запроса по группировке "НомерИДата"

	ТипСтрока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].Количество;
	
	//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ТЗ.НомерДокумента КАК НомерДокумента,
	|	ТЗ.ДатаДокумента КАК ДатаДокумента,
	|	ТЗ.ИННКонтрагента КАК ИННКонтрагента,
	|	ТЗ.Номенклатура КАК Номенклатура,
	|	ТЗ.Цена КАК Цена,
	|	ТЗ.Количество КАК Количество,
	|	ТЗ.СтавкаНДС КАК СтавкаНДС,
	|	ТЗ.Сумма КАК Сумма
	|ПОМЕСТИТЬ Врем_ТЗ
	|ИЗ
	|	&ТЗ КАК ТЗ
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Врем_ТЗ.НомерДокумента + ""_"" + Врем_ТЗ.ДатаДокумента КАК НомерИДата,
	|	Врем_ТЗ.НомерДокумента КАК НомерДокумента,
	|	Врем_ТЗ.ДатаДокумента КАК ДатаДокумента,
	|	Врем_ТЗ.ИННКонтрагента КАК ИННКонтрагента,
	|	Врем_ТЗ.Номенклатура КАК Номенклатура,
	|	Врем_ТЗ.Цена КАК Цена,
	|	Врем_ТЗ.Количество КАК Количество,
	|	Врем_ТЗ.СтавкаНДС КАК СтавкаНДС,
	|	Врем_ТЗ.Сумма КАК Сумма
	|ИЗ
	|	Врем_ТЗ КАК Врем_ТЗ
	|ИТОГИ
	|	МАКСИМУМ(НомерДокумента),   // Нужно для того чтобы вывести НомерДокумента в группировке по ""НомерИДата"". Такой хитрый трюк
	|	МАКСИМУМ(ДатаДокумента),   // Нужно для того чтобы вывести ДатаДокумента в группировке по ""НомерИДата"".  Такой хитрый трюк
	|	МАКСИМУМ(ИННКонтрагента),   // Нужно для того чтобы вывести ИННКонтрагента в группировке по ""НомерИДата"".  Такой хитрый трюк
	|	СУММА(Сумма)
	|ПО
	|	НомерИДата";   
	
	Запрос.УстановитьПараметр("ТЗ", ТаблицаЗначений);
 	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДокумент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НомерИДата");
	
	Пока ВыборкаДокумент.Следующий() Цикл         
		
		// Здесь создаем документ
		НомерДок			= ВыборкаДокумент.НомерДокумента;
		ДатаДок			= ВыборкаДокумент.ДатаДокумента;
		ИННКонтрагента	= ВыборкаДокумент.ИННКонтрагента;
		ОбщаяСумма		= ВыборкаДокумент.Сумма;
		ВыборкаДетальныеЗаписи = ВыборкаДокумент.Выбрать();  
		
		Сообщить("НомерДок "+НомерДок);
		Сообщить("ДатаДок "+ДатаДок);
		Сообщить("ИННКонтрагента "+ИННКонтрагента);
		Сообщить("ОбщаяСумма "+ОбщаяСумма);
		
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			// Здесь заполняем табличную часть документа
			Номенклатура	 = ВыборкаДетальныеЗаписи.Номенклатура;
			Цена			 = ВыборкаДетальныеЗаписи.Цена;
			Количество	 = ВыборкаДетальныеЗаписи.Количество;
			СтавкаНДС	 = ВыборкаДетальныеЗаписи.СтавкаНДС;
			Сообщить("Номенклатура "+Номенклатура);
			Сообщить("Цена "+Цена);
			Сообщить("Количество "+Количество);
			Сообщить("СтавкаНДС "+СтавкаНДС);
		КонецЦикла;
		
	КонецЦикла;
	
	//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Показать
19. пользователь 18.09.23 15:15
Сообщение было скрыто модератором.
...
24. Torin57 7 18.09.23 15:20 Сейчас в теме
(19) Есть грех. Заняться есть чем на работе, а я тут сижу. Частично Chat gpt код написал, но все равно время потратил.
user1881120; +1 Ответить
29. пользователь 18.09.23 15:23
Сообщение было скрыто модератором.
...
35. пользователь 18.09.23 15:28
Сообщение было скрыто модератором.
...
38. пользователь 18.09.23 15:30
Сообщение было скрыто модератором.
...
47. Torin57 7 20.09.23 21:04 Сейчас в теме
Есть еще такой вариант.

	
ТипСтрока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].Количество;
	
	ТабДокументы = ТаблицаЗначений.Скопировать();
	ТабДокументы.Свернуть("НомерДокумента, ДатаДокумента, ИННКонтрагента", "Сумма");
	
	Для каждого ТекДокумент Из ТабДокументы Цикл
		
		// Здесь создаем документ
		НомерДок			= ТекДокумент.НомерДокумента;
		ДатаДок			= ТекДокумент.ДатаДокумента;
		ИННКонтрагента	= ТекДокумент.ИННКонтрагента;
		ОбщаяСумма		= ТекДокумент.Сумма;
		
		Сообщить("НомерДок "+НомерДок);
		Сообщить("ДатаДок "+ДатаДок);
		Сообщить("ИННКонтрагента "+ИННКонтрагента);
		Сообщить("ОбщаяСумма "+ОбщаяСумма);

		ОтборСтрокТекущегоДокумента = Новый Структура;
		ОтборСтрокТекущегоДокумента.Вставить("НомерДокумента",	  НомерДок);
		ОтборСтрокТекущегоДокумента.Вставить("ДатаДокумента",	  ДатаДок);
		
		СтрокиДокумента = ТаблицаЗначений.НайтиСтроки(ОтборСтрокТекущегоДокумента);
		
		Для каждого СтрокаТЧДокумента Из СтрокиДокумента Цикл

			// Здесь заполняем табличную часть документа
			Номенклатура	 = СтрокаТЧДокумента.Номенклатура;
			Цена			 = СтрокаТЧДокумента.Цена;
			Количество	 = СтрокаТЧДокумента.Количество;
			СтавкаНДС	 = СтрокаТЧДокумента.СтавкаНДС;   
			
			Сообщить("Номенклатура "+Номенклатура);
			Сообщить("Цена "+Цена);
			Сообщить("Количество "+Количество);
			Сообщить("СтавкаНДС "+СтавкаНДС);
			
		КонецЦикла;  
		
		// Здесь записываем документ
		
	КонецЦикла;
Показать
user1C99; +1 Ответить
48. user1936667 20.09.23 21:59 Сейчас в теме
(47) А ваш ChatGPT про перебор dbf по индексам что-нибудь знает? Или тут ситуация как с поиском новичками на форуме?
49. Torin57 7 20.09.23 22:07 Сейчас в теме
51. user1936667 20.09.23 23:13 Сейчас в теме
(49)
Что за ситуация?

Как говорил один Torin57:

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


http://forum.infostart.ru/forum1/topic303254/message3003074/#message3003074
52. Torin57 7 21.09.23 09:27 Сейчас в теме
(51) Я просто не знаю как это сделать. Перегнать dbf в таблицу значений. Поиск приводит сюда, но я сам не пробовал.
https://infostart.ru/1c/articles/103060/
53. Torin57 7 21.09.23 09:33 Сейчас в теме
(48)
А ваш ChatGPT про перебор dbf по индексам что-нибудь знает?

Индексы нужно для скорости. А тут что, нужно ускорение? Что там у автора? Тысячи тысяч строк в dbf?
62. user1C99 21.09.23 16:41 Сейчас в теме
(47) Спасибо вам большое, вы мне очень помогли, воспользовавшись Вашим шаблоном я смог сделать так как мне нужно было. Еще раз спасибо.
55. Torin57 7 21.09.23 09:57 Сейчас в теме
В дополнение к (52). Забил в яндексе "Перегнать dbf в таблицу значений".
56. jmw 60 21.09.23 10:35 Сейчас в теме
Тема поднята 18 числа.
Неужто не смогли включить голову, чтобы написать хоть что-то самому?
Таблицу значений можно самому заполнить за пять минут кода:
т = Новый ТаблицаЗначений();
т.Колонки.Добавить("Номер");
т.Колонки.Добавить("Дата");
т.Колонки.Добавить("ИНН");
т.Колонки.Добавить("тч");

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

имяБазы = "M:\Elected.DBF";
база = Новый XBase(имяБазы);
Пока НЕ база.ВКонце() Цикл
	
	стр = т.Найти(база.NOMER, "Номер");
	Если стр = Неопределено Тогда
		стр = т.Добавить();
		стр.Номер = база.NOMER;
		стр.Дата  = база.DATE;
		стр.ИНН   = база.INN;
		стр.тч = ЗначениеИзСтрокиВнутр(тч);
	КонецЕсли;
	
	стрТЧ = стр.тч.Добавить();
	стрТЧ.Наименование = база.NAME;
	стрТЧ.Цена         = база.PRICE;
	стрТЧ.Количество   = база.COUNT;
	стрТЧ.НДС          = база.VAT;
	стрТЧ.Сумма        = база.SUM;
	
	база.Следующая();
КонецЦикла;
база.ЗакрытьФайл();

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

Сообщить("Всё!");
Показать
57. Torin57 7 21.09.23 10:44 Сейчас в теме
(56)
Неужто не смогли включить голову, чтобы написать хоть что-то самому?

IT как раз для этого и нужно. Чтобы дать отдых мозгам. Но большинство думает иначе. Усложняет на пустом месте. Как например user1936667 20.09.23 21:59 в этой ветке зачем-то приплел перебор dbf по индексам. Ну можно что-то такое замутить. На какую-то милисекунду, условно говоря, будет быстрее. Только зачем?
59. user1936667 21.09.23 15:07 Сейчас в теме
(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;

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

Функция УдалитьФайлДанных(ОписаниеФайла)
	
	УдалитьФайлы(ОписаниеФайла.Каталог);
	
КонецФункции
Показать
user1826630; +1 Ответить
60. Torin57 7 21.09.23 15:34 Сейчас в теме
(59) Добавь, пож-та, еще комментарий где документ создается, где добавляются строки, где документ записывается.
61. user856012 13 21.09.23 15:46 Сейчас в теме
(59)
Индексы нужны для упорядочивания
Вот-вот, именно это я и подразумевал в (58), потому что в (1) никак не обозначено, что записи в DBF, относящиеся к одному документу, будут идти подряд.
(60)
Добавь, пож-та, еще комментарий где документ создается, где добавляются строки, где документ записывается.
"Сама-сама-сама! Не в ресторане, самообслуживание!" (с)
64. Torin57 7 21.09.23 17:22 Сейчас в теме
(59) То есть для того чтобы раскрутить тебя на написание кода мне пришлось проявить воинствующее невежество. Так что ли с вами разговаривать?

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


Так ты же первый к этому руку прилагаешь.
63. Torin57 7 21.09.23 16:59 Сейчас в теме
(61) "Пивная, ещё парочку" (с) :)
65. user645801_yyyuuu123q 25.09.23 03:38 Сейчас в теме
Судя по всему проще всего сделать так
Создай новое соответствие
Читай файл, если в соответствии уже есть повторяющие наименование тогда в массив добавляй значение
и так далее

В каждом соответствии будет ключ наименование и значение массив. По итогу ты получишь то что хотел
Оставьте свое сообщение
Вакансии
Программист 1С
Кемерово
зарплата от 200 000 руб.
Полный день

Программист 1С
Киров (Кировская обл.)
зарплата от 100 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 150 000 руб.
Полный день

Архитектор 1С
Москва
зарплата от 250 000 руб.
Полный день

1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день