Имя: Пароль:
1C
1С v8
Перезапись ТЧ документа при загрузке данных
, ,
0 Валидатор
 
21.11.13
11:52
нужно загружать из дбф файла данные в табличную часть документа, и если документ уже есть, то перезаписывать его ТЧ. Делал так: Создал ТЗ куда грузил все из дбфа, поиск идет по реквизиту номервходящего документа в Поступлении товаров и услуг (1с 8.2 КА). Как сделать, что если документ уже существует, то его ТЧ обнуляется и туда пишутся новые данные? пробовал типа ТЧ.Очистить, но так как данные я гружу циклом, то каждая предыдущая строка затирается следующей, что не совсем верно, как быть?
1 Бешеная Нога
 
21.11.13
11:53
сделай запрос к своей тз и выводи по группировке Документ
2 Галахад
 
гуру
21.11.13
11:54
Ну или сделать копию ТЗ и свернуть ее по номеру.
3 Валидатор
 
21.11.13
11:54
без запроса видимо правда не обойтись
4 Бешеная Нога
 
21.11.13
11:56
(2) +1
получаешь копию тз, сворачиваешь по документу, перебираешь ее и для каждой строки свернутой тз находишь строки из главной тз. те же яйца, если есть какая-то неприязнь к запросам
5 Валидатор
 
21.11.13
11:56
(4) типа 2 раза создавать одинаковые ТЗ?
6 Валидатор
 
21.11.13
11:57
ТаблицаЗагрузки = Новый ТаблицаЗначений;
    ТаблицаЗагрузки.Колонки.Добавить("ДатаВходящегоДок", ОписаниеТиповД, "Дата входящего документа");
    ТаблицаЗагрузки.Колонки.Добавить("НомерВходящегоДок", ОписаниеТиповС, "Номер входящего документа");
    ТаблицаЗагрузки.Колонки.Добавить("Номенклатура", ОписаниеТиповС, "Наименование номенклатуры");
    ТаблицаЗагрузки.Колонки.Добавить("Артикул", ОписаниеТиповС, "Артикул");
    ТаблицаЗагрузки.Колонки.Добавить("Модель", ОписаниеТиповС, "Модель");
    ТаблицаЗагрузки.Колонки.Добавить("ПолныйАртикул", ОписаниеТиповС, "Полный артикул");
    ТаблицаЗагрузки.Колонки.Добавить("Цена", ОписаниеТиповЧ, "Цена");
    ТаблицаЗагрузки.Колонки.Добавить("Количество", ОписаниеТиповЧ, "Количество");
    ТаблицаЗагрузки.Колонки.Добавить("ЕдиницаИзмерения", ОписаниеТиповС, "Единица измерения");
    ТаблицаЗагрузки.Колонки.Добавить("СтавкаНДС", ОписаниеТиповЧ, "НДС");
    ТаблицаЗагрузки.Колонки.Добавить("Процент", ОписаниеТиповЧ, "Процент");
    ТаблицаЗагрузки.Колонки.Добавить("Категория", ОписаниеТиповС, "Категория");
    ТаблицаЗагрузки.Колонки.Добавить("ПРНП", ОписаниеТиповС, "ПРНП");
    ТаблицаЗагрузки.Колонки.Добавить("НомерГТД", ОписаниеТиповС, "Номер ГТД");
    ТаблицаЗагрузки.Колонки.Добавить("Страна", ОписаниеТиповС, "Страна");
    ТаблицаЗагрузки.Колонки.Добавить("НОТ", ОписаниеТиповС, "НОТ");

вот моя одна ТЗ, делать вторую такую же?
7 Бешеная Нога
 
21.11.13
11:58
скопируй и сверни по НомерВходящегоДок
8 Валидатор
 
21.11.13
11:59
(7)
ТаблицаЗагрузки.Скопировать();
ТаблицаЗагрузки.Свернуть(НомерВходящегоДок);
так?
9 Валидатор
 
21.11.13
11:59
(7) и потом идем
для каждого стр из ТаблицаЗагрузки цикл?
10 Бешеная Нога
 
21.11.13
12:02
да
11 Валидатор
 
21.11.13
12:02
(10) так и что получим, получается так:
КопияТЗ = ТаблицаЗагрузки.Скопировать();
КопияТЗ.Свернуть("НомерВходящегоДок");
Теперь в КопияТЗ только номер документа и больше никаких данных, и по какой из таблиц мы потом циклом идем?
12 Бешеная Нога
 
21.11.13
12:04
блин

ТаблицаДокументов = ТаблицаЗагрузки.Скопировать();
ТаблицаДокументов.Свернуть("НомерВходящегоДок");

Для каждого стр из ТаблицаДокументов Цикл

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

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

     КонецЦикла;
КонецЦикла;
13 Валидатор
 
21.11.13
12:09
(12) тут получается в условие
Для Каждого СтрокаДокумента Из СтрокиДокумента Цикл

     КонецЦикла;
будут уже попадать только те документы, для которых уже есть документ с соответствующим номером так?
14 Бешеная Нога
 
21.11.13
12:11
(13) ???
15 Валидатор
 
21.11.13
12:13
(12) Нужно что если документ найден, мы его перезаписываем (его ТЧ заного грузим), если нет, то создаем новый. в (12) в СтрокиДокумента и в ТаблицаДокументов везде только данные по НомерДокумента, какие я тогда данные грузить буду?
16 Бешеная Нога
 
21.11.13
12:16
ТаблицаДокументов = ТаблицаЗагрузки.Скопировать();
ТаблицаДокументов.Свернуть("НомерВходящегоДок");

Для каждого стр из ТаблицаДокументов Цикл

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

     Для Каждого СтрокаДокумента Из СтрокиДокумента Цикл
           НоваяСтрока = Документ.Товары.Добавить();
           ЗАполнитьЗначенияСвойств(Новаястрока, СтрокаДокумента);
     КонецЦикла;
КонецЦикла;
17 Валидатор
 
21.11.13
12:16
(16) так в строкаДокумента попадает только одно значение: НомерВходящегоДок, там нет данных которые были в нашей первой ТаблицеЗагрузки
18 Валидатор
 
21.11.13
12:18
НайтиИлиСоздатьДокументПоВходящемуНомеру
в какой конфе есть эта процедура в общих модулях? в КА нету(
19 Валидатор
 
21.11.13
12:27
че то я запутался вообще
20 Валидатор
 
21.11.13
12:27
(16) тут мы просто найдем документ и ничем его не заполним, то есть какой смысл сворачивать ТаблицуЗагрузки вообще?
21 Бешеная Нога
 
21.11.13
12:31
сорри, бро, если (16) не осилил...
22 Валидатор
 
21.11.13
12:32
(21) так а что не осилил если в (16) ни о какой загрузке данными и речи не идет?
23 Валидатор
 
21.11.13
12:36
(21)
СтрокиДокумента = ТаблицаДокументов.НайтиСтроки(Отбор);
    Для каждого строка из ТаблицаЗагрузки Цикл
вот так идет, а в твоем случае нет
24 Бешеная Нога
 
21.11.13
12:37
НайтиИлиСоздатьДокументПоВходящемуНомеру - это тебе нужно написать процедуру, которая будет искать документ по номеру (или создавать новый, если не найден).

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

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

этот код получит все строки из основной таблицы ТаблицаЗагрузки, переберет их, и добавит в найденный (или созданный тобой документ)
25 ALFkz
 
21.11.13
12:39
отсортируй тз по номерувходящего и потом в цикле
Нномер="";
Для каждого текстр из Тз цикл
Если Нномер<>Текстр.номерувходящего  тогда
Нномер=Текстр.номерувходящего;
Док=Документ.названиеДок.найтиПоНомеру(Нномер);
Если ЗначениеЗАполнено(Док) тога
об=Док.получитьОбъект();
Об.тч.очистить();
конецесли;
конецесли;
Нов=об.тч.Добавить();
конеццикла;
26 ALFkz
 
21.11.13
12:40
Хотя конечно верхние варианты лучше.