Имя: Пароль:
1C
1C 7.7
v7: Соотношение закупочной и розничной цен
, ,
0 Xilen
 
20.01.15
00:04
Приветствую!
Дали задание, сделать соотношение цен закупочных и розничных в базе 1С. Как я понял, закупочные цены лежат в Документ.ПоступлениеТМЦ, а розничные в Справочник.Цены, который подчинен Номенклатуре. Хотя, я могу ошибаться с закупочными ценами, но в карточке номенклатуры я их не нашел. Лишь в общем журнале документах, документах поступления тмц.
Соответственно в ПоступлениеТМЦ есть табличная часть, в которой указывается Номенклатура, Цена и т.д.
И собственно вопрос: как правильно организовать сверку? Ибо:


Процедура Сформировать()
    ДатаНачала = глЗначениеПоУмолчанию("ОсновнаяДатаНачалаОтчетов");
    ДатаКонца = ПолучитьДатуТА();
    
    Если глПроверкаДаты(ДатаНачала,ДатаКонца)=0 Тогда
        Возврат;
    КонецЕсли;
    
    СпрНом = СоздатьОбъект("Справочник.Номенклатура");
    СпрНом.ПорядокНаименований();
    СпрНом.ВыбратьЭлементы();  
    
    ДокТМЦ = СоздатьОбъект("Документ.ПоступлениеТМЦ");      
    ДокТМЦ.ВыбратьДокументы();        
        
    Если ((ПустоеЗначение(ДатаНачала)=0) и (ПустоеЗначение(ДатаКонца)=0)) Тогда //если не пустое значение
        ДокТМЦ.ВыбратьДокументы(ДатаНачала, ДатаКонца);  // за указанный период
     Иначе    
        ДокТМЦ.ВыбратьДокументы(,);  // за весь период
    КонецЕсли;
                                
    Пока (ДокТМЦ.ПолучитьДокумент()=1) Цикл                
        Пока (СпрНом.ПолучитьЭлемент()=1) Цикл
            Если СпрНом.ЭтоГруппа()=1 Тогда
                Продолжить;
            КонецЕсли;
        
            Если (ДокТМЦ.Номенклатура = СпрНом.ТекущийЭлемент()) Тогда
                НомНам = СпрНом.Наименование;
                НомЦена = СпрНом.Цена;
                ДокЦена = ДокТМЦ.Цена;
                Соотн = НомЦена / ДокЦена;
                Сообщить(НомНам + " | " + НомЦена + " | " + ДокЦена + " | " + Соотн);
              КонецЕсли;
          КонецЦикла;
    КонецЦикла;      


КонецПроцедуры

не срабатывает. Пробовал разные варианты условия, но тоже не работают. Пришел к выводу, что не правильно обращаюсь или же условие в корне неверно задано.

Помогите пожалуйста, объясните начинающему)
1 floody
 
20.01.15
00:10
Под розничными ценами может подразумеваться как цена из справочника, так и цена, по которой товар переместили в розницу.

А под закупочной - как цена из поступления, так и цена из справочника.

И что же на самом деле нужно?

Цена кстати - реквизит периодический обычно (в типовых).
2 Xilen
 
20.01.15
00:13
(1) Препод сказал так: "Возьми и сделай прогонку по справочникам, сделай соотношение розничной цены и закупочной цены". Я понял так, что взять цену, по которой магазин продает товар, и соотнести к цене, по которой он этот же товар и закупает.
3 floody
 
20.01.15
00:16
(2) Если все цены есть в справочнике "Цены", тогда можно из него все взять. Не увидел у вас правильной работы с подчиненным справочником "Цены", да еще и с периодическим реквизитом "Цена".

Торговля и склад - я правильно понял?
4 floody
 
20.01.15
00:19
Если в справочнике есть цены и они актуальны, тогда в тис есть функция глПолучитьЦену(). Посмотрите ее параметры внимательно и вам этого хватит для вашего задания.
5 floody
 
20.01.15
00:21
Хотя правильней конечно же работать запросами, но написание запросов в 7.7 несколько сложновато для новичка, я считаю.
6 Xilen
 
20.01.15
00:22
(3) Да, ТиС, 1С 7.7. Нет, в справочнике Цены только те цены, по которым фирма продает товары, как я понял. Я залез в карточку номенклатуры, на форме кнопка "Справочники" -> "Цены", выдает таблицу "Тип" (Розничные) "Цена" (сумма) "Валюта" (руб)  "ЕдиницаИзмерения" (пар) и "% наценки" (пусто).

Вот я и не знаю, как правильно и даже куда обратиться
7 Wirtuozzz
 
20.01.15
00:26
1:2 в редком случае когда 1:3. Все понятно.
8 Xilen
 
20.01.15
00:27
(7) Соотношение то примерно так и есть) Смотрел по поступлениям тмц и по цене в карточке товара) Но это же надо как то показать)
9 Xilen
 
20.01.15
00:31
(5) Можешь подсказать тогда, как реализовать решение задачи?) А то я не совсем тебя понимаю)
10 floody
 
20.01.15
00:32
В регистре партий у измерения "партия" есть реквизит "закупочная цена".

посмотри, можешь ли его достать. тут лучше запросом. но если не знаешь пока запросы, то можно и из регистра доставать объектной техникой. хотя это запрос в цикле получится.
11 Xilen
 
20.01.15
00:37
(10) Есть регистр ПартияНаличие, где в измерениях есть ЦенаПрод, в реквизитах ПродСтоимость

А с запросами я еще не знаком.
12 Xilen
 
20.01.15
00:42
Изначально я думал брать из документов поступления ТМЦ по номенклатуре (реквизит в табличной части) и соотносить к цене в документе. Только реализация не получается)
13 floody
 
20.01.15
00:47
(11) В регистре ПартииНаличие есть измерение Партия, у которого есть реквизит ЗакупочнаяЦена.

Если с регистрами не знаком, доставай из документов.
14 Xilen
 
20.01.15
00:50
(13) в этом регистре измерение Партия является справочником Партия с реквизитом "ЗакупочнаяЦена" )

Не знаком) Поэтому я и спросил, как обратиться к документу поступление тмц и сделать соотношение цен)
15 floody
 
20.01.15
00:52
(14) Нарисуй блок-схемку сначала. Вот выберешь ты документ, в нем 5 товаров. Как-то из должен обойти. Выберешь следующий документ - в нем 3 товара из первого документа повторяется, и еще 1 товар новый. Дальше что? В общем, методом тыка думаю не получится. Подумай сначала.
16 floody
 
20.01.15
00:52
из = их*
17 Xilen
 
20.01.15
00:58
(15) Вот ты меня сейчас в тупик поставил)))
18 Xilen
 
20.01.15
01:14
Кстати, заглянул в справочник партии - он пуст)
19 Cap_1977
 
20.01.15
01:16
(18) Как смотрел пустоту справочника ?
20 floody
 
20.01.15
01:16
Если вместо последней закупочной цены устроит средняя себестомость, то возьми из регистра партий. Но тут запросом желательно.

Помочь?
21 Xilen
 
20.01.15
01:18
(20) Буду признателен, а то я не соображаю как... =(
22 floody
 
20.01.15
01:20
(21) А вы вообще каким образом к 1С относитесь? Не было желания поизучать для начала? Начать с задачек простых.
23 Xilen
 
20.01.15
01:23
(22) Начал изучать. Но т.к. препод мне поменял тему курсовой на эту (ибо с прошлой он ошибся, как он сказал), а сдать надо до 24 января, то времени на основы, мягко говоря, не хватает.
Однако в университете изучал с++
24 floody
 
20.01.15
01:31
Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Номенклатура = Регистр.ПартииНаличие.Номенклатура;
    |Количество = Регистр.ПартииНаличие.Количество;
    |СуммаРуб = Регистр.ПартииНаличие.СуммаРуб;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Функция СуммаРубКонОст = КонОст(СуммаРуб);
    |Группировка Номенклатура без групп;
    |Условие(Количество <> 0);
    |Условие(СуммаРуб <> 0);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    ДатаТА = ПолучитьДатуТА();
    Пока Запрос.Группировка(1) = 1 Цикл
        // Заполнение полей Номенклатура
        
        Сообщить("Среднее отношение цен на товар: " + Запрос.Номенклатура + " равно " +  глПолучитьЦену(Запрос.Номенклатура, ТипРозничнойЦены, ДатаТА)*Запрос.КоличествоКонОст/Запрос.СуммаРубКонОст);
        
        
    КонецЦикла;
25 floody
 
20.01.15
01:31
В этом куске конечно есть недоделки, неоптимальности, и условности. Но я и не хотел за вас все решать. Дальше все в ваших руках.
26 floody
 
20.01.15
01:35
Среднее отношение на товар: Пылесос BOSCH GAS 25 равно 1.34052864950331694909
Среднее отношение на товар: Пылесос BOSCH GAS 50 равно 1.33780316980656940051
Среднее отношение на товар: Пылесос BOSCH GAS 50М равно 1.30142311462664368049

вот пример вывода
27 Xilen
 
20.01.15
01:36
(25) Огромное спасибо! Завтра буду пробовать и пытаться!)
28 Злопчинский
 
20.01.15
01:42
во-первых - надо внимательно втыкнуть какая закупочная цена указывается в справочнике партий - там это указывается тупо числом. а содержит ли это число НДС или нет? скорее всего да - и с какой розничной ценой ее соотносить - ибо в общем случае розничная цена может быть как рассчитываемая динамически так и хранящаяся в базе - и эта цена в общем случае может также быть с ндс и без.

в той постановке задач - особенно фраза "ПРОГОНИ ПО СПРАВОЧНИКАМ" - подразумевает тупой перебор по выборке (или запросом) номенклатуры, для каждой номенклатуры получить цену с типом "Закупочная" и "Розничная" - посчитать соотношение ГДЕ /ЕГО МОЖНО ОПРЕДЕЛИТЬ (то есть там где одновременно определены обе цены для номенклатуры).

Для гарантированной оценки пять по куросвики надо задавить препода интеллектом:
1. в случае если не определена закупочная цена - в качестве закупочной вытащить последнюю цену поступления из дока поступления,
2. в качестве розничной если она не определена - вытащить из  регистра остатков по розничному складу из измерения ЦенаПрод (или вытащить из документа отчет ККМ)

Вариант без задавливания препода интеллектом реализуется примерно строк в 20... и то - большая часть - красивая печтаная форма, если выводить в табо то как раз наверное строк 20...
29 Злопчинский
 
20.01.15
01:45
в (24) есть тонкость в том, что будет вывод не для всей номенклатуры, а только той что есть на остатках

точно также как ив (28) - есть тонкости и недомолвки.. ;-)

для корректной работы следует сделать некоторые допущения, например: что и закупочный тип цен и розничный тип цен - с НДС, в противном случае - надомодифицировать их сравненеи

ну и т.д.

успехов!!
30 Xilen
 
20.01.15
01:48
(29) а можно по подробней про "без задавливания препода интеллектом" ?)
31 Злопчинский
 
20.01.15
04:15
Внимание, я здесь! ;-)
ПРи нечеткой постановке задачи в части исходных данных - а у тебя как раз такая ситуация - хз что имел в виду препод:
1. топать к преподу и уточнять исходные данные в части: что понимается и откуда брать закупочные и розничные цены (вангую что из справочника цен)
2. или самому принимать решения - то ли самостоятельно считать п.1 правильным, то ли шуршать по (28), (20) и т.д.