Имя: Пароль:
1C
1С v8
Связь справочников
0 pv94384
 
11.08.11
11:26
Добрый день! Вопрос на повестке дня такой: Необходимо связать 2 справочника "Чеки" и "СтрокиЧеков", где владельцем справочника "СтрокиЧеков" является "Справочник.Чеки". Общих полей у этих справочников нет.
Как это реализовать?
1 Ork
 
11.08.11
11:27
(0) Ну дык "владельцем справочника "СтрокиЧеков" является "Справочник.Чеки" - вывод напрашивается сам собой.
2 skunk
 
11.08.11
11:28
в справочник строкичеков добавить реквизит владелец с типом справочник чеки
3 Goggy
 
11.08.11
11:29
опять романтику сразу же испортили :(
4 pv94384
 
11.08.11
11:31
сделал СтрокиЧеков.Владелец = Справочники.Чеки.НайтиПоРеквизиту();

Вот не пойму что в скобках писать, если нет общих реквизитов
5 unregistered
 
11.08.11
11:31
(0) >> Общих полей у этих справочников нет.

Как так нет? Кто украл?

поле Ссылка справочника Чеки = поле Владелец справочника СтрокиЧеков.
6 Azverin
 
11.08.11
11:32
теперь точно испортили
7 unregistered
 
11.08.11
11:32
(4) Скажи что тебе конкретно надо.
А то складывается ощущение, что ты пытаешься левой рукой правое ухо почесать причем через ногу руку тянешь.
8 Жан Пердежон
 
11.08.11
11:33
(4) ты предлагаешь предметную область за тебя допридумать?
9 pv94384
 
11.08.11
11:36
Выгрузить из 2х вайлов дбф данные в справочники Чеки и СтрокиЧеков, так, чтобы СтрокиЧеков относились к определенному Чеку
10 unregistered
 
11.08.11
11:42
(9) %0

Так ты связываешь справочники или таблицы dbf ?

А по сути:

ЗагруженныйЧек = Справочники.Чек.СоздатьЭлемент();
// заполняем чек из dbf
ЗагруженныйЧек.Записать();
ЗагруженнаяСтрокаЧека = Справочники.СтрокиЧеков.СоздатьЭлемент();
// заполняем строку чека из dbf
ЗагруженнаяСтрокаЧека.Владелец = ЗагруженныйЧек.Ссылка;
ЗагруженнаяСтрокаЧека.Записать();
11 Ненавижу 1С
 
гуру
11.08.11
11:44
ой, а потом окажется что чеки лучше было сделать документами, а строки - их строками в ТЧ
12 Wobland
 
11.08.11
11:45
про документы ещё не говорили?
13 pv94384
 
11.08.11
11:45
(10) так делал, но пишет

{Форма.Форма(68)}: Ошибка при вызове метода контекста (Записать): Владелец не задан или задан неверно!
           СтрокиЧеков.Записать();
по причине:
Владелец не задан или задан неверно!
14 pv94384
 
11.08.11
11:46
(11) Согласен, но как говориться "Базы не выбирают" ))) Такая была )
15 Goggy
 
11.08.11
11:47
(13) весь код кинь
16 pv94384
 
11.08.11
11:48
(15)
Процедура КнопкаВыполнитьНажатие(Кнопка)
       База = Новый XBase;
   База.Кодировка=КодировкаXBase.OEM;
   База.ОткрытьФайл("C:\Users\Владимир\Desktop\DBF\09-01CH.dbf");
   
   Если База.Открыта() тогда
       Предупреждение("База открыта");
       База.Первая();
       
       Пока Не База.ВКонце() Цикл
           
           Чеки = Справочники.Чеки.СоздатьЭлемент();
                       
           Чеки.Дата = Дата(ТекущаяДата());
           Чеки.СуммаСкидки = СокрЛП(База.ПолучитьЗначениеПоля("SKIDKA"));
           Чеки.СуммаНал = СокрЛП(База.ПолучитьЗначениеПоля("NAL"));
           Чеки.Сумма = СокрЛП(База.ПолучитьЗначениеПоля("SUMMA"));
           Чеки.НомерЧекаККМ = СокрЛП(База.ПолучитьЗначениеПоля("CHECK_N"));

           Чеки.Записать();
           База.Следующая();
           
       КонецЦикла;
   Иначе
       Предупреждение("Не смогли открыть базу!!!",2);
   КонецЕсли;
   База.ЗакрытьФайл();
   
   
   База1 = Новый XBase;
   База1.Кодировка=КодировкаXBase.OEM;
   База1.ОткрытьФайл("C:\Users\Владимир\Desktop\DBF\09-01CH_.dbf");
   
   Если База1.Открыта() тогда
       Предупреждение("База1 открыта");
       База1.Первая();
       
       Пока Не База1.ВКонце() Цикл
           
           Чеки = Справочники.Чеки.СоздатьЭлемент();
           СтрокиЧеков = Справочники.СтрокиЧеков.СоздатьЭлемент();
           
           СтрокиЧеков.Количество = База1.ПолучитьЗначениеПоля("KOL");
           СтрокиЧеков.Цена = СокрЛП(База1.ПолучитьЗначениеПоля("CENA"));
           СтрокиЧеков.Сумма = СокрЛП(База1.ПолучитьЗначениеПоля("SUMMA"));
           
           СтрокиЧеков.Владелец = Чеки.Ссылка;

           СтрокиЧеков.Записать();
           База1.Следующая();
           
       КонецЦикла;
   Иначе
       Предупреждение("Не смогли открыть базу1!!!",2);
   КонецЕсли;
   База1.ЗакрытьФайл();
КонецПроцедуры
17 vtolga
 
11.08.11
11:52
у тебя Чеки еще не записан, когда ты к нему строки подцепить пытаешься
18 vtolga
 
11.08.11
11:53
и вообще, на момент записи строк чек уже есть? тогда зачем новый создавать?
19 vtolga
 
11.08.11
11:55
в файле строк чеков должно быть поле, идентифицирующее чек (предположительно CHECK_N), вот по нему чек и ищи.
20 pv94384
 
11.08.11
11:56
Понял, что вторая переменная Чеки не нужна, а вот как записать Чеки в новом цикле, если там идет взаимодействие с другим файлом дбф?
21 vtolga
 
11.08.11
11:57
У тебя, кстати, оба цикла по одному и тому же файлу. Так там чеки или строки?
22 palpetrovich
 
11.08.11
11:58
гыгы, опять? :)
v8: Загрузка из dbf в 1с
23 pv94384
 
11.08.11
12:00
(21) файлы разные (в одном окончание _)
(22) проблема актуальна
24 vtolga
 
11.08.11
12:02
Тогда см (19)
25 pv94384
 
11.08.11
12:03
(19) предполагаю что это поле "KOD_CH" и "KOD_CH_"...
http://s48.radikal.ru/i120/1108/a0/a8bd2e2f6461.jpg
26 palpetrovich
 
11.08.11
12:03
(23) эхехе, актуальна... ну выложи свои файлы в файлообменник, гляну че там не получается у тебя
27 lubja
 
11.08.11
12:09
а это... где ты в своей коде присваиваешь коды справочникам?
28 lubja
 
11.08.11
12:10
+27 по которым, по идеи, ты потом должен находить "соответствие"...
29 pv94384
 
11.08.11
12:33
30 palpetrovich
 
11.08.11
12:44
(29) а что ты там выложил?  ..неужели 2 файла dbf - 58мб? :)
31 pv94384
 
11.08.11
12:45
(30)+ база и обработка
32 palpetrovich
 
11.08.11
12:50
(31) ну это можно было и не кидать ...все-же надеюсь и файлы  dbf там есть :)
33 pv94384
 
11.08.11
12:50
(32) есть )
34 palpetrovich
 
11.08.11
12:53
(33)  жди тогда :)
и в личке мыло засвети
35 pv94384
 
11.08.11
12:54
(34) мыло [email protected]
36 pv94384
 
11.08.11
13:31
Убрал строку Чеки = Справочники.Чеки.СоздатьЭлемент();
теперь все строки присваиваются последней записи
37 palpetrovich
 
11.08.11
14:44
(35) смотри почту