Связать 2 таблицы

  1. 9 г. назад
    02.12.2014 17:58:28 отредактировано Масянька

    Есть 2 таблицы.
    1-ая: номенклатура - нач. количество - нач. сумма
    2-ая: документ - номенклатура - количество - сумма
    Нужно: во 2-ой таблице заполнить 4 колонки (нач. количество - нач. сумма - кон. количество - кон. сумма).
    Пример:
    1-ая таблица: фигня - 4 (кол-во) - 20 (сумма).
    2-ая таблица: док № 1 (приход) - фигня - 2 (кол-во) - 12 (сумма) (нужно добавить нач. кол-во и сумму и кон. кол-во и сумму - 6 и 32)
    док № 2 (расход) - фигня - 1 - 6 (а тут уже нач. кол-во и сумма - 6 и 32, кон.кол-во и сумма - 5 и 26).
    Что скажете?

    Ответы: (27) (32)
  2. Не нужно во второй таблице ничего заполнять. Если даже это и делать - то все тормозить будет сильнее чем у тебя голова.

    Ответы: (2)
  3. (1) А я говорю "нужно".

    Ответы: (3)
  4. (2) Нужно сделать третью таблицу и Свернуть().
    Сама подумай? Вот до чего бабы-дуры - слов нет. :(

    Ответы: (4) (8)
  5. (3) Да думала я... Сворачивать по чем?

  6. А откуда таблицы-то? Может проще черный запрос с итогами чтобы сразу все в одном месте и было?

    Ответы: (6)
  7. (5) Из регистра. Не получаются у меня черные-пречерные запросы...

    Ответы: (10)
  8. склеить обе и свернуть по номенклатуре

    Ответы: (9) (11)
  9. (3) И (я не уверена - завтра попробую) свертка не пойдет: для первого док-та начальный остаток берется из 1-ой таблицы, а для второй (встречается второй раз) - начальный остаток уже должен быть с учетом первого вхождения.

    Ответы: (9)
  10. (7) См. (8). Хотя, завтра - попробую... Но, чет есть сомнения у меня.

  11. (6) Да это простейший же. Переменная документ и четыре функции, начальный и конечный остатки, приход, расход. Все в разрезе документа. Он те готовую и вернет как ты хочешь.

    Ответы: (12) (13)
  12. (7) Не свернуть их по номенклатуре, там же документы еще.

  13. (10) Не дает остатки по номенклатуре. Не дает. Только если группировать по номенклатуре. А мне нужно по документам.

    Ответы: (14) (15)
  14. (10) Точнее номенклатура, а периодика в разрезе документов. Слабо помню как их писать, редко сейчас с семеркой, но если погуглить или в той же типовой примеры поискать - легко получается.

  15. (12) Так одно другому не мешает )

    Ответы: (16)
  16. Масянька, устрой меня на работу? Я тебе все сделаю, кроме куниллингуса.
    Скажешь: специалист из Ленинграда. Всегда мечтал на юг переехать.
    А то, понимаешь, последние предприятия на 7.7 загибаются.

    (12)
    Каша у тебя в голове. Иди борщ вари и спать. Утро-вечера мудренее.

    Ответы: (16)
  17. (14)(15) Вот запрос по движениям:

    	"//{{ЗАПРОС(Сформировать)
    	|Период с ДатаНачала по ДатаКонца;
    	|Фирма			= Регистр.ПартииНаличие.Фирма;
    	|УпрАналитика	= Регистр.ПартииНаличие.Фирма.УпрАналитика;
    	|ЮрЛицо 		= Регистр.ПартииНаличие.Фирма.ЮрЛицо;
    	|СтатусПартии 	= Регистр.ПартииНаличие.СтатусПартии;
    	|Номенклатура	= Регистр.ПартииНаличие.Номенклатура;
    	|КодНоменклатуры= Регистр.ПартииНаличие.Номенклатура.Код;
    	|МОЛ			= Регистр.ПартииНаличие.МОЛ;
    	|Партия			= Регистр.ПартииНаличие.Партия;
    	|СвойствоПартии	= Регистр.ПартииНаличие.Партия.Свойство;
    	|Поставщик		= Регистр.ПартииНаличие.Партия.Поставщик;
    	|Док			= Регистр.ПартииНаличие.ТекущийДокумент;
    	|КодОперации	= Регистр.ПартииНаличие.КодОперации;
    	|Количество 	= Регистр.ПартииНаличие.Количество;
    	|Сумма 			= Регистр.ПартииНаличие.СуммаБезНДС;
    	|Функция НомерНачало = Сумма(1);	
    	|Функция НачОстС = НачОст(Сумма);
    	|Функция ПриходС = Приход(Сумма);
    	|Функция РасходС = Расход(Сумма);
    	|Функция КонОстС = КонОст(Сумма);
    	|Функция НачОстК = НачОст(Количество);
    	|Функция ПриходК = Приход(Количество);
    	|Функция РасходК = Расход(Количество);
    	|Функция КонОстК = КонОст(Количество);
    	|Функция ПриходПоДокументу = Сумма(Сумма) Когда ((КодОперации = КодОперацииПоступление) ИЛИ (КодОперации = КодОперацииТР));
    	|Функция КолВоПоДокументу  = Сумма(Количество);
    	|Функция РасходПоДокументу = Сумма(Сумма) Когда ((КодОперации = КодОперацииРеализация) ИЛИ (КодОперации = КодОперацииРозница));
    	|Функция ПриходСумма = Приход(Сумма) Когда ((КодОперации = КодОперацииПоступление) ИЛИ (КодОперации = КодОперацииТР));
    	|Функция ПриходКолВо = Приход(Количество) Когда ((КодОперации = КодОперацииПоступление) ИЛИ (КодОперации = КодОперацииТР));
    	|Функция РасходСумма = Расход(Сумма) Когда ((КодОперации = КодОперацииРеализация) ИЛИ (КодОперации = КодОперацииРозница));
    	|Функция РасходКолВо = Расход(Количество) Когда ((КодОперации = КодОперацииРеализация) ИЛИ (КодОперации = КодОперацииРозница));
    	|Группировка Док;
    	|Группировка Номенклатура Без Групп;
    	|";
    

    И?

    Ответы: (17)
  18. 02.12.2014 18:47:05 отредактировано Дядя Вася

    (16) Так как-то:

    	
            ТекстЗапроса = 
    	"//{{ЗАПРОС(Сформировать)
    	|Период с НачДата по КонДата;
    	|Товар = Регистр.ОстаткиТМЦ.Номенклатура;
    	|Склад = Регистр.ОстаткиТМЦ.Склад;
    	|Фирма = Регистр.ОстаткиТМЦ.Фирма;
    	|ТекущийДокумент = Регистр.ОстаткиТМЦ.ТекущийДокумент;
    	|Количество = Регистр.ОстаткиТМЦ.Количество;
    	|Функция КоличествоНачОст = НачОст(Количество);
    	|Функция КоличествоПриход = Приход(Количество);
    	|Функция КоличествоРасход = Расход(Количество);
    	|Функция КоличествоКонОст = КонОст(Количество);
    	|Группировка Товар без групп;
    	|Группировка ТекущийДокумент;
    	|"//}}ЗАПРОС
    	;
    
    Ответы: (21)
  19. ДвижениеТовара.ert.7z
    Лови ert'шку, практически то же, что тебе и надо. Регистр только свой поставить, да суммы добавить. Ну и условия как те надо.

    Ответы: (19) (25)
  20. (18) Испортил мне всю малину. Москаль!
    Зачем ей помогать? Все равно она ни черта не понимает. Гораздо лучше организовать симбиоз по квалификации.

    Ответы: (20)
  21. (19) Да задачи-то у нее уж больно простые, квалификации не требующие...

    Ответы: (21)
  22. (17)Не-а, не так. Сначала группировка по документу, а потом по номенклатуре. Разницу, думаю, понимаешь.
    (20)Простая, да не совсем.
    Обработку гляну завтра. Пока - просто спасибо.

    Ответы: (22)
  23. (21) Ну так поменяй местами-то, я ж не против )

    Ответы: (23)
  24. (22) Хотя описанное в сабже, как раз если сначала номенклатура... Да в общем там и не обработка, а отчет с макетом. Сразу увидишь на что похоже.

  25. Рваный баян же. Чорный запрос не выводит остатки на момент регистратора. Любой типовой отчет посмотри - там эти остатки считаются по методу "закат солнца вручную"

    Ответы: (25)
  26. (24) Чо? Пример отчета из (18) (кусочек с доками за одну дату):
    -image-

  27. А... Хотя да. По докам-то нету, по номенклатуре только...

  28. (0) дежавю. мы же, вроде, уже обсуждали что-то подобное

    Ответы: (29)
  29. сиське не были показаны, потому и нет результата

  30. (27) Ага. Надежда умирает последней. (С)

    Ответы: (30)
  31. (29) добавляешь новые колонки в таблицу2 и заполняешь из таблицы1.
    в чем вопрос-то?

    Ответы: (31) (32)
  32. (30) а теперь - в запросе :)

    Ответы: (32)
  33. (30) В (0) описала что нужно. Как?
    Пример:
    1-ая таблица: фигня - 4 (кол-во) - 20 (сумма).
    2-ая таблица: док № 1 (приход) - фигня - 2 (кол-во) - 12 (сумма) (нужно добавить нач. кол-во и сумму и кон. кол-во и сумму - 6 и 32)
    док № 2 (расход) - фигня - 1 - 6 (а тут уже нач. кол-во и сумма - 6 и 32, кон.кол-во и сумма - 5 и 26).
    (31) Я уже согласная и без запроса...

    Ответы: (33) (34)
  34. +(32) Фишка в том, что в док-ах номенклатура может повторяться. Для первого вхождения - понятно: остатки из первой таблицы (остатков), а вот для второго вхождения остатки нужно вывести с учетом начальных остатков и первого вхождения.

    Ответы: (35) (36) (38)
  35. (32) ну, обходи таблицу, выполняй поиск по 2-й таблице, вычисляй, добавляй

  36. (33) отсортируй

  37. (33) Это-то как раз легко свернуть...

    Ответы: (37)
  38. (36) По чем сворачивать-то?!

    Ответы: (43)
  39. Масянька вот для второго вхождения остатки нужно вывести с учетом начальных остатков и первого вхождения.

    где проблема, в чем вопрос?
    ты же находишь строку из таблицы1? вычти количество

    Ответы: (39)
  40. (38) А если это первое вхождение? А какое количество нужно вычитать?

  41. Я тут нарисовала...
    Безымянный.jpg

    Ответы: (41) (62) (63)
  42. (40) и? ) мне код написать чтоли ? )

  43. как-то так, наверное

  44. (37) Дык по всем полям ТЧ, какие используешь, и будет у тебя в документе не два раза номенклатура по одной штуке, а один раз 2 штуки на выходе. В чем сложность-то?

  45. Что-то типа:

    Тп = СоздатьОбъект("ИндексированнаяТаблица");
    Тп.Загрузить(Т);
    Тп.ДобавитьИндекс("Клиент", "Клиент");

    Твр = СоздатьОбъект("ИндексированнаяТаблица");
    Твр.Загрузить(Т1);
    Твр.ДобавитьИндекс("Клиент", "Клиент");

    Тп.Объединить(Твр, "Клиент");
    Тп.Свернуть("Клиент", "СуммаПр,Сумма1");

    Ответы: (45) (47) (50) (54)
  46. (44)кстати, а в чем профит индексированной?
    в скорости или в дополнительных методах?

    Ответы: (46)
  47. (45) и скорость, и методы. отбор по индексу например

  48. (44) А можно для первой индекс по номенклатуре, а для второй по документу + номенклатуре и потом объединять и сворачивать?

    Ответы: (48) (50)
  49. 03.12.2014 16:51:10 отредактировано sf

    (47) а смысл? как математику "приход/расход" при объединении сделать?

    Ответы: (49)
  50. (48) А пока сама не понимаю...

  51. Масянька (44) А можно для первой индекс по номенклатуре, а для второй по документу + номенклатуре и потом объединять и сворачивать?

    И там и там индекс "Номенклатура", поле "Документ" подцепится само

    Ответы: (51)
  52. (50) А почему первую объединять со второй?

  53. Объединить(ТЗ [, Индекс = ''''] [, Колонки = ''''])
    Назначение:
    добавляет строки из таблицы - источника в текущую таблицу. Если в таблице - источнике есть колонки, которых нет в текущей, то они создаются. Объединение осуществляется с учётом индекса и фильтра таблицы - источника.

    Ответы: (53)
  54. (52) А у тебя есть пример работы с индексированной таблицей?

  55. В (44)
    В Тп итоги запросу по одному периоду, в Твр по другому
    В Тп получается таблица сравнения продаж

    Ответы: (55)
  56. (54) Вот чего наваяла:

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

    Если в Свернуть есть Док - нет остатков, если Док убрать - док-ов нет вообще...
    Или я что-то не так делаю или ...
    Кстати, гляну в С++: индексированная таблица есть, а класса Объединить - не вижу... С++ 3.2.2.8 у меня.

  57. ИндексТабОстатков.Объединить(ИндексТабДвижений, "Номенклатура");
    ИндексТабОстатков.Свернуть("Док, Номенклатура", "НачОстС, НачОстК");
    ИндексТабДвижений.Показать();

    Чё там?

  58. А лучше так:
    ИндексТабОстатков.Объединить(ИндексТабДвижений, "Номенклатура");
    ИндексТабДвижений.Показать();
    ИндексТабОстатков.Свернуть("Док, Номенклатура", "НачОстС, НачОстК");
    ИндексТабДвижений.Показать();

    Ответы: (58) (59)
  59. (57) Афигенно!!!!!!!!!!!!
    Усе одинаково (оба раза): док-т, номенклатура, нач. остатки = 0, расход/приход - есть.

  60. (57) Прости дурынду!!!
    Накосячила в коде...

    	ИндексТабОстатков.Объединить(ИндексТабДвижений, "Номенклатура");
    	ИндексТабОстатков.Показать();
    	ИндексТабОстатков.Свернуть("Док, Номенклатура", "НачОстС, НачОстК, КонОстС, КонОстС");
    	ИндексТабОстатков.Показать();
    

    Показывает оба раза одинаково:
    сначала - номенклатура, остатки (нет док-ов, нет движений) (номенклатура вся)
    потом - номенклатура, док-к, остатки = 0, движения есть (документы правильные).

    Ответы: (60)
  61. Масянька потом - номенклатура, док-к, остатки = 0

    А были?

    Ответы: (62)
  62. Аня, тебе остатки нарастающим итогом надо?

    Ответы: (62)
  63. (60) Есть (в Показать) номенклатура без док-ов, и там как раз есть остатки.
    (61) Общий начальный остаток - просто сумма (без детализации), потом док-ты с детализацией номенклатуры и для каждой номенклатуры - нач. остаток, приход/расход, кон. остаток. Группировка по док-там. В (40) даже нарисовала.

    Ответы: (63)
  64. Масянька В (40) даже нарисовала.

    ну так "ручками" пробежать - долго получается?

    Ответы: (64)
  65. (63) Да нет. Но как-то не красиво... Неужели нет более красивого способа?

    Ответы: (71)
  66. прямой запрос

    Ответы: (66) (67)
  67. (65) только один нюанс. а как в прямом запросе "нарастающий итог" сделать?

    Ответы: (68)
  68. (65) Ты уже это говорил. А я уже тоже говорила - у блондинки (она такая белая) не получаются черные-пречерные запросы.

    Ответы: (68)
  69. (66) тут где-то была ветка с запросоложеством, там еще не такое вытворяли

    (67) А я уже отвечал, что блондинкам для успешного программирования необходимо показывать сиське

    Ответы: (69) (70)
  70. (68) Вот и поговорили.

  71. Гефест запросоложеством

    на 1cpp?

    Ответы: (73)
  72. Масянька Но как-то не красиво..

    ты главное, никому не показывай )

    Ответы: (72)
  73. (71) Ну, я-то вижу!

  74. (70) здесь

    Ответы: (74)
  75. (73) я имел в виду, можно ли на 1с++ делать такие запросы. Вообще, уже не помню, там временные таблицы, хоть поддерживаются?

    Ответы: (75)
  76. (74) так запрос выполняет скуль, что он умеет, то и поддерживается, а 1с++ просто передаст.
    в файловом варианте хз как

    Ответы: (76)
  77. Гефест 1с++ просто передаст.

    хм. я всегда думал, что "то, что умеет драйвер" не обязательно == "то, что умеет скуль"

  78. А есть вариант: сначала получить запросом движения (то есть 2-ую таблицу), а потом запросом получить остатки номенклатуры, которая попала во 2-ую таблицу? Не, не кошерно?

    Ответы: (78)
  79. (77) кошерно.
    такое ощущение, что ты вместо того, чтобы решать задачу придумываешь какие-то дополнительные.
    сделай как 77 и проверь скорость. если не устроит - уже можно думать дальше.
    про "красиво" в семерке, я бы вообще не грел голову.

  80. а чтобы было красиво - добавь в комментарий

    _____________________¶¶¶¶¶¶¶¶¶¶¶¶¶¶
    __________________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶
    _______________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶
    ______________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶
    _____________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶
    ___________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶__¶¶¶¶¶¶¶
    __________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶________¶¶¶¶¶
    _________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶_________¶¶¶¶¶¶¶
    _________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶_____________¶¶¶¶¶
    ________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶______¶¶¶¶¶¶¶¶¶¶¶¶
    _______¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶_____¶¶¶¶¶¶_¶¶¶¶¶¶
    _______¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶_______¶¶¶¶__¶¶¶¶¶
    _______¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶______¶¶_________¶¶¶¶¶¶
    ______¶¶¶¶¶¶¶¶¶¶¶¶¶¶________¶¶_________¶¶¶¶¶¶
    _______¶¶¶¶¶¶¶¶¶¶¶¶_________¶¶________¶¶¶¶¶¶¶
    ______¶¶¶¶¶¶¶¶¶¶¶¶¶¶__________________¶¶¶¶¶¶¶
    ______¶¶¶¶¶¶¶¶¶¶¶¶¶¶______¶¶¶¶¶¶_____¶¶¶¶¶¶¶
    _______¶¶¶¶¶¶¶¶¶¶¶¶¶¶_______________¶¶¶¶¶¶
    _______¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶_______¶¶¶¶¶¶¶¶¶
    ______¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶__¶¶_¶¶¶¶¶¶¶¶
    ________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶__¶¶¶¶¶¶¶¶¶¶
    ____¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶___¶¶¶¶¶¶¶¶¶¶¶
    ____¶¶¶¶_______¶¶¶¶¶¶¶¶¶¶¶¶____¶¶¶¶¶¶¶¶¶¶¶
    ___¶¶¶¶¶___________¶¶¶¶¶¶¶¶_¶__¶¶¶¶¶¶¶¶¶¶¶¶¶
    ___¶¶______________¶_¶¶¶¶___¶¶_¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶__¶
    ___¶_______________¶¶¶¶¶________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶_¶
    __¶________________¶¶¶¶__________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶
    _¶¶¶_______________________________¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶
    _¶¶__________________________________¶¶¶¶¶¶¶¶¶¶¶¶
    _¶_____________________________________¶¶¶¶¶¶¶¶
    ¶¶__________________¶¶___________________¶
    ¶___________________¶_____________________¶
    ¶__________________¶________________¶¶_____¶
    ¶_________________¶¶_________________¶¶____¶¶
    ¶_________________¶____________________¶_____¶
    ¶¶________________¶_____________________¶_____¶
    _¶________________¶_________________¶¶¶_¶______¶¶¶
    _¶________________¶_________________¶¶¶¶¶______¶¶
    _¶¶_______________¶_________________¶¶¶¶¶_____¶¶
    _¶¶_______________¶__¶¶________________¶_____¶¶
    __¶¶¶_____________¶___¶¶¶¶___________¶¶___¶¶¶
    __¶¶______________¶______¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶
    __¶¶______________¶________¶¶¶¶¶¶___¶¶
    __¶¶¶_____________¶_____________¶____¶
    _¶¶¶¶_____________¶____________¶¶__¶¶
  81. Эльниньо - ты почему мне не намекнул про левое/правое соединение? [smile=:D]
    Тебе
    Спасибо.jpg
    cute_smiley55.gif

или зарегистрируйтесь чтобы ответить!