8.х Остаток конкретного товара на данную секунду получить

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Geek, 6 апр 2008.

  1. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    1. Во-первых пользуйтесь тэгом code
    2. Во вторых - не надо делать установки цен при каждом приходе
    Если вы перепроведете какой-нибудь дкоумент поступления задним числом или же распроведете, то что у вас получится???
    3. Первый запрос может и правильный, но выборку вы некорректно осуществляете:
    Код:
    Если ВыбКонтрагент.Следующий() Тогда
    Контрагент = ВыбКонтрагент.Контрагент;
    КонецЕсли;
    
    
    4. Правильно или нет написали вы себестоимость я думаю вы сами должны проверять - запустив запрос на своей базе и глянув какие результаты он дает
  2. TopicStarter Overlay
    Geek
    Offline

    Geek Опытный в 1С

    Регистрация:
    3 апр 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    О мудрейший Эмин. Точно, выборка неправильно была. Сейчас все вышло :)
    Себестоимость по моему запросу дает правильно.
    И все же,что я должен зделать, как я понял.

    В документа реализации при проведении. зделать
    1. Высчитать мин цену продажи ( а. сначала получить ср. себестоимость номенклатуры,
    б. выяснить от какого контрагента она пришла
    в. в зависимости от контрагента добавить процент наценки присущий данному контрагенту для выяснения мин.цены)
    2.проверить не нарушена ли мин цена хоть по одной из позиций в табличной части.
    3 вслучае нарушения - отказ проведегния.

    Тоесть не стоит проверять соответствие мин цены в самом документе до проведения? и никак по другому?
  3. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    за мудрейшего - отдельнео спасибо :)
    Я скромный и думаю, что это чересчур....

    Вы можете проверять минимальную цену при выборе номенклатуры. при изменении цены и т.д. но этого все равно будет мало, смотрите как можно обойти:
    1. Допустим раньше товар приходил по маленькой цене и себестоимость маленькая.
    2. Ставим дату документа на несколько дней назад и устанавливаем нужные цены (еще не записывая, никаких проблем нет)
    3. Ставим дату на текущую и проводим - если нет контроля при проведении документа - вы окажетесь обманутыми, так зачем же напрягать и менеджера во время выписывания накладной и себя - прописывая на каждое событие все, если можно решить проблему разом!

    Вы можете использовать подход как я изложил, просто в процедуру по расчету себестоимости внести корректировки с учетом ваших наценок и сравнивать уже с ценой рассчитанной по формуле. У нас была задача именно с проверкой на себестоимость, поэтому и реализация другая.
  4. TopicStarter Overlay
    Geek
    Offline

    Geek Опытный в 1С

    Регистрация:
    3 апр 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    Хотелось бы что бы менеджеры видели мин цену в самом документе, но стоит не разрешимая проьлема - обновления табличной части при не "ручном "добавлении данных тоесть не идет пересчет если выбран пересчет при изменении.
    может кнопку какую добавить перед проведением - вроде обновить?

    я раньше ответил чем прочел..
    Если переработать получение средней себестоимости то таже проблема
    При выборе номенклатуры вручную - да будет считаться правильно. НО есть такая кнопка подбор и если через нее добавлять номенклатуру то средняя себестоимость - поле вообще пустое в документе.
    А Дату документа я прибью гвоздями к реальной дате :) Ну разве что изменить время на компьютере .. можно обойти .. мда

    Извини Эмин. Насчет Вашего подхода ,если можно чуть "разложить" мне сам подход :) Куда мы пишем . что мы пишем, наверное я не доконца понял. и как оно будет работать.
  5. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Подбор можно точно так же отработать как вы хотите (событие ОбработкаВыбора в форме документа).

    Насчет даты документа - не поможет, так как с утра себестоимость все равно отличается от вечерней, если в течение дня были приходы.

    Я бы лучше сделал так - вытащил кнопочку, типа "Проверить цены" - она бы всю табличную часть разом проверяла и сообщала об отклонениях в конкретных строчках. И точно такую же проверку при проведении - чтобы менеджер если решил не проверять цены - как минимум не смог бы провести документ нерентабельный и получил бы сводку о некорректных строчках, в которых вы бы и сообщали - какая минимальаня цена должна быть.

    Вы можете сделать и расчетное поле в табличнйо части документа, но вам придется очень много событий отработать, проверить все варианты связанные с копированием документа, в общем действительно провести гораздо больший объем работ, нежели предлагаемый мной. Но только вам решать какими вы хотите видеть дкоументы. Если нужна колонка чтобы менеджер понимал какую цену он может назначить - ее тоже можно сделать, но как быть с ситуацией:
    Менеджер набил документ, все четко по минимальным ценам и не стал пока проводить, а только записал документ, так как решил, что еще часть товара добьет вечером (например ждет окончания заявки от клиента). Вечером себестоимость изменилась, ему опять все цены перебивать. А вам - кстати пересчитывать.

    В общем с такими вещами самое проверенное решение - это контроль в момент проведения, а остальное - нужно очень четко оговаривать как хотят пользователи. Как правило от всяких лишних колоночек они отказываются.
  6. TopicStarter Overlay
    Geek
    Offline

    Geek Опытный в 1С

    Регистрация:
    3 апр 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    Тоесть событие ОбработкаВыбора в форме документа это и есть та кнопорчка подбор?И если я туда пропишу все она будет работать при добавлении подбором или копированием?
    Кнопочка проверить цены - мне нравится, но попробую это реализовать, осилю ли.
    Отвел себе на отработку этой проблемы неделю, уже среда. Буду пытаться. она краеугольная. Если будет помощь по коду с кнопочкой и ее же обработка при проведении буду признателен. :)

    А в модуль проведения я должен записать проверку такую ?

    1. Высчитать мин цену продажи ( а. сначала получить ср. себестоимость номенклатуры,
    б. выяснить от какого контрагента она пришла
    в. в зависимости от контрагента добавить процент наценки присущий данному контрагенту для выяснения мин.цены)
    2.проверить не нарушена ли мин цена хоть по одной из позиций в табличной части.
    3 вслучае нарушения - отказ проведегния.
  7. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    ОбработкаВыбора - это событие - не нажатие конкретно кнопки подбор, но именно сам подбор - там в коде увидите, анализируется тип справочника в подборе, табличная часть и так далее.

    Кнопочка "ПроверитьЦены" и контроль в проведении документа - практически одинаковые.
    1. Высчитать мин цену продажи
    а. сначала получить ср. себестоимость номенклатуры,
    б. Выяснить от какого контрагента она пришла
    в. В зависимости от контрагента добавить процент наценки присущий данному контрагенту для выяснения мин.цены
    2. Проверить не нарушена ли мин цена хоть по одной из позиций в табличной части.
    3. В случае нарушения - отказ проведения. - этот пункт просто появляется дополнительно при проведении

    А как сделать проверку - вы можете использовать подход который я прямо с кодом вам написал - с парой общих процедурок - одна просто формирует таблицу себестоимости (или минимальной цены) ,а вторая сравнивает табличную часть товары с таблицей минимальной цены.
  8. TopicStarter Overlay
    Geek
    Offline

    Geek Опытный в 1С

    Регистрация:
    3 апр 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    Мне нужно будет вложить в запрос еще один запрос?


    Код:
    Функция вфСебестоимостьОрг(Номенклатура, Дата, Организация = Неопределено) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ПартииТоваровКомпанииОстатки.Номенклатура,
    |    СУММА(ПартииТоваровКомпанииОстатки.СтоимостьОстаток) КАК Стоимость,
    |    СУММА(ПартииТоваровКомпанииОстатки.КоличествоОстаток) КАК Количество
    |ИЗ
    |    РегистрНакопления.ПартииТоваровКомпании.Остатки(&Дата, Номенклатура В (&Номенклатура))
    |                КАК ПартииТоваровКомпанииОстатки
    |ГДЕ
    |    ПартииТоваровКомпанииОстатки.ДокументПоставки.Организация = &Организация
    |
    |СГРУППИРОВАТЬ ПО
    |    ПартииТоваровКомпанииОстатки.Номенклатура";
    Запрос.УстановитьПараметр("Дата",Дата);
    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    Запрос.УстановитьПараметр("Организация",Организация);
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ = Запрос.Выполнить().Выгрузить();
    ТЗ.Колонки.Добавить("Себестоимость");
    Для каждого Стр Из ТЗ Цикл
    Запрос.Текст="ВЫБРАТЬ
    | ПартииТоваровКомпанииОстатки.Партия.Контрагент КАК Контраген 
    |ИЗ
    | РегистрНакопления.ПартииТоваровКомпании.Остатки(, Номенклатура = &Номенклатура) 
    |                     КАК ПартииТоваровКомпанииОстатки";
    Запрос.УстановитьПараметр("Номенклатура",СтрокаТабличнойЧасти.Номенклатура);
    Запрос.УстановитьПараметр("СкладКомпании",ЭтаФорма.ЭлементыФормы.СкладКомпании.Значение);
    ВыбКонтрагент=Запрос.Выполнить().Выбрать();
    Если ВыбКонтрагент.Следующий() Тогда
    Контр= ВыбКонтрагент.Контрагент;
    Если Контрагент<>Справочники.Контрагенты.НайтиПоНаименованию("Корея") тогда
    МинЦенапродажи=Себестоимость*1.2;
    иначе
    МинЦенаПродажи=Себестоимость*1.38;
    КонецЕсли;
    
    КонецЦикла; 
    
    Возврат ТЗ;
    
    КонецФункции // вфСебестоимость()
    
    Ох ... замучаюсь я с запросом.
    Это не моя сильная сторона.
  9. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Похоже на то =) Не забывайте об округлении. я бы тут
    Код:
    МинЦенаПродажи=Себестоимость*1.38;
    
    
    Сделал
    Код:
    МинЦенаПродажи=Окр(Себестоимость*1.38, 2);
    
    
    Это избавит менеджера от раздумий - почему он не может установить цену до 4 знака, а до 2 знака после запятой его цена не катит :)
  10. TopicStarter Overlay
    Geek
    Offline

    Geek Опытный в 1С

    Регистрация:
    3 апр 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    "Похоже на то =)"
    Это насчет того,что замучаюсь или что придется делать вложенный запрос? :)

    "МинЦенаПродажи=Окр(Себестоимость*1.38, 2);"

    А если
    МинЦенаПродажи=Окр(Себестоимость*1.38, 0); будет округление до целого по арифметическим правилам? нужно в большую сторону.
  11. TopicStarter Overlay
    Geek
    Offline

    Geek Опытный в 1С

    Регистрация:
    3 апр 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    С виртуальными таблицами я не на ты и их сравнением.
    Сравнение виртуальных таблиц и выгрузка в них для меня пока темное пятно.
  12. TopicStarter Overlay
    Geek
    Offline

    Geek Опытный в 1С

    Регистрация:
    3 апр 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    Вот написал и чего вышло, похоже? Проверить пока не могу . нужно собрать все воедино. но это код точный не для примера, а тот что будет конкретно в моем случае.
    Код:
    
    Функция  вфСебестоимостьОрг(Дата,Номенклатура,СкладКомпании) Экспорт     
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    
    |    ПартииТоваровКомпанииОстатки.Номенклатура,  
    |    ПартииТоваровКомпанииОстатки.КоличествоОстаток КАК Количество,
    |     ПартииТоваровКомпанииОстатки.СуммаОстаток КАК Сумма
    | ИЗ
    |     РегистрНакопления.ПартииТоваровКомпании.Остатки(&Дата, Номенклатура = &Номенклатура)
    |КАК ПартииТоваровКомпанииОстатки
    |СГРУППИРОВАТЬ ПО
    |    ПартииТоваровКомпанииОстатки.Номенклатура";
    Запрос.УстановитьПараметр("Дата",Дата);
    Запрос.УстановитьПараметр("СкладКомпании",СкладКомпании);
    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    ТЗ = Новый ТаблицаЗначений;
    ТЗ = Запрос.Выполнить().Выгрузить(); 
    ТЗ.Колонки.Добавить("Себестоимость");
    ТЗ.Колонки.Добавить("МинЦенаПродажи");
    Для каждого Стр Из ТЗ Цикл
    Стр.Себестоимость = ?(Стр.Количество = 0, 0,Стр.Сумма/Стр.Количество); 
    Запрос=Новый Запрос; 
    Запрос.Текст="ВЫБРАТЬ
    |      ПартииТоваровКомпанииОстатки.Партия.Контрагент КАК Контрагент               
    |ИЗ
    |      РегистрНакопления.ПартииТоваровКомпании.Остатки(,Номенклатура = &Номенклатура) 
    |КАК ПартииТоваровКомпанииОстатки";
    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    Запрос.УстановитьПараметр("СкладКомпании",СкладКомпании);
    ВыбКонтрагент=Запрос.Выполнить().Выбрать();
    Если ВыбКонтрагент.Следующий() Тогда
    Контрагент= ВыбКонтрагент.Контрагент;
    Если Контрагент <> Справочники.Контрагенты.НайтиПоНаименованию("Корея")  Тогда
    Стр.МинЦенаПродажи=Окр(Стр.Себестоимость*1.2,2);
    Иначе
    Стр.МинЦенаПродажи=Окр(Стр.Себестоимость*1.38,2);
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Возврат ТЗ;
    КонецФункции 
    
    
    
    
    
    
  13. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Округлить15КАК20
  14. TopicStarter Overlay
    Geek
    Offline

    Geek Опытный в 1С

    Регистрация:
    3 апр 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    Эмин, я никогда не был в Индии, очень понравились фотографии. :)

    "ТЦ = вфТаблицаЦен(Ссылка);"

    А где мы ее получаем? Из уже набранного документа реализации?
    Номенклатура - "Цена" (как Сумма/количество) тк цена розницы не изменяется, изменяется только процент скидки
    а соответственно сравнивать нужно минцена из виртуальной таблицы и сумма/количество из табличной части документа.

    Спрошу проще .. :)
    Как , где, получить таблицу ТЦ, куда передать и при каких обстоятельствах.


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

    2 .Получив виртуальную таблицу себестоимости мы сгруппировали ее по номенклатуре табличного документа.
    Затем получаем реальную таблицу документа реализации ( или виртуальную?)
    Тоже группируем ее по номенклатуре?
    Что бы сравнение шло с одинаковыми номенклатурными позициями.

    3. Затем в кнопочке Проверить цены вызываем обе таблицы,(из общего модуля?, и туда же параметры наверное нужно передать), сравниваем и ругаемся на строки несоответствия.
    В проведении тоже самое .только не даем провести.
    Еще параметр времени задать правильно бы (дата.КонецДня()) или как то так.

    Я уже дозреваю ... :) еще чуть собрать в голове фрагменты осталось

    Пример с ТЦ очень бы мне облегчил мои раздумья. :)
  15. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    С округлением, вчера такую формулу писал на 10.3. Нужно было подставлять себестоимость (с увеличением до ближайшей копейки вверх) в качестве цены при проведении.

    Суть такая, пусть есть стоимость и количество, округлить 15 как 20 - не подойдет:

    Код:
    СебестоимостьЕдиницыОкр = ОКР(ЦЕЛ(100*Стоимость/Количество + 0.5)/100, 2);
    
    
    В общем, в таком случае себестоимость вида *.4949 округлиться до *.5, а не до *0.49


    Про таблицы -
    Код:
    Для Каждого Стр Из ТаблицаЗначений
    
    - отличный способ перебора =)

    А вообще как работает - можете в моем коде посмотреть. Сначала делаем ТЗ по себестоимости (виртуальаня таблица, где подсчитали), потом сравниваем с текущей табличной частью дкоумента - для каждой строки из табличнйо части находим соответствие в таблице виртуальной (через НайтиСтроку).
  16. TopicStarter Overlay
    Geek
    Offline

    Geek Опытный в 1С

    Регистрация:
    3 апр 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    перенес в другую тему
  17. TopicStarter Overlay
    Geek
    Offline

    Geek Опытный в 1С

    Регистрация:
    3 апр 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    ТЦ Так получить?

    Код:
    Функция ТаблТЦ(ДокСсылка)Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |(или ДокСсылка?)Чек.Товары.Номенклатура КАК Номенклатура,
    |(или ДокСсылка?) Чек.Товары.Количество КАК Количество,
    |(или ДокСсылка?)Чек.Товары.СуммаВсего КАК СуммаВсего,
    | ИЗ
    | Документ.Чек.Товары КАК ДокументЧекТовары
    | СГРУППИРОВАТЬ ПО
    | Чек.Товары.Номенклатура";
    ТЦ = Новый ТаблицаЗначений;
    ТЦ = Запрос.Выполнить().Выгрузить();
    ТЦ.Колонки.Добавить("РеалЦена");
    Для каждого Стр Из ТЦ Цикл
    Стр.РеалЦена=Стр.СуммаВсего/Стр.Количество;
    КонецЦикла;
    Возврат ТЦ;
    КонецФункции
    
    
    
    
    
    
    
    
    Сравнивать с ЦЕНА нельзя тк это цена розницы и она не меняется а РелЦена(за которую продаем) это цена после скидок и ее нет в реальной таблице.


    Эмин ,запустил Вашу схему и вот
    Код:
    Функция  МинЦенаТЗ(Дата,Номенклатура,СкладКомпании) Экспорт     
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ  
    |    ПартииТоваровКомпанииОстатки.Номенклатура,  
    |    ПартииТоваровКомпанииОстатки.КоличествоОстаток КАК Количество,
    |     ПартииТоваровКомпанииОстатки.СуммаОстаток КАК Сумма
    | ИЗ
    |     РегистрНакопления.ПартииТоваровКомпании.Остатки(&Дата, Номенклатура = &Номенклатура)
    |КАК ПартииТоваровКомпанииОстатки
    |СГРУППИРОВАТЬ ПО
    |    ПартииТоваровКомпанииОстатки.Номенклатура";
    Запрос.УстановитьПараметр("Дата",Дата);
    Запрос.УстановитьПараметр("СкладКомпании",СкладКомпании);
    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    ТЗ = Новый ТаблицаЗначений;
    ТЗ = Запрос.Выполнить().Выгрузить(); 
    ТЗ.Колонки.Добавить("Себестоимость");
    ТЗ.Колонки.Добавить("МинЦенаПродажи");
    Для каждого Стр Из ТЗ Цикл
    Стр.Себестоимость = ?(Стр.Количество = 0, 0,Стр.Сумма/Стр.Количество);
    СтрНоменклатура=Стр.Номенклатура;
    Запрос=Новый Запрос; 
    Запрос.Текст="ВЫБРАТЬ
    |      ПартииТоваровКомпанииОстатки.Партия.Контрагент КАК Контрагент               
    |ИЗ
    |      РегистрНакопления.ПартииТоваровКомпании.Остатки(,Номенклатура = &Номенклатура) 
    |КАК ПартииТоваровКомпанииОстатки";
    Запрос.УстановитьПараметр("Номенклатура",СтрНоменклатура);
    Запрос.УстановитьПараметр("СкладКомпании",СкладКомпании);
    ВыбКонтрагент=Запрос.Выполнить().Выбрать();
    Если ВыбКонтрагент.Следующий() Тогда
    Контрагент= ВыбКонтрагент.Контрагент;
    Если Контрагент <> Справочники.Контрагенты.НайтиПоНаименованию("Корея")  Тогда
    Стр.МинЦенаПродажи=Окр(Стр.Себестоимость*1.2,2);
    Иначе
    Стр.МинЦенаПродажи=Окр(Стр.Себестоимость*1.38,2);
    КонецЕсли;
    Сообщить(Стр.МинЦенаПродажи);
    КонецЕсли;
    КонецЦикла;
    Возврат ТЗ;
    КонецФункции 
    
    
    Мне сообщает только выделенную в табличной части номенклатуру - ее мин цену, а не весь список .

    Параметр я передал
    Номенклатура =СтрокаТабличнойЧасти.Номенклатура;
    если
    Номенклатура=ЭтаФорма.ЭлементыФормы.Товары.Номенклатура; то не выводит вообще ничего :(
  18. TopicStarter Overlay
    Geek
    Offline

    Geek Опытный в 1С

    Регистрация:
    3 апр 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    Может так?
    Код:
    Функция  МинЦенаТЗ(Дата,Номенклатура,СкладКомпании) Экспорт 
    Запрос = Новый Запрос;     
    Запрос.Текст = "ВЫБРАТЬ      
    |    ПартииТоваровКомпанииОстатки.Номенклатура,      
    |    ПартииТоваровКомпанииОстатки.КоличествоОстаток КАК Количество,    
    |    ПартииТоваровКомпанииОстатки.СуммаОстаток КАК Сумма,
    |    ПартииТоваровКомпанииОстатки.Партия.Контрагент КАК Контрагент, 
    | ИЗ    
    |     РегистрНакопления.ПартииТоваровКомпании.Остатки(&Дата, Номенклатура = &Номенклатура)    
    |     КАК ПартииТоваровКомпанииОстатки";     
    Запрос.УстановитьПараметр("Дата",Дата);   
    Запрос.УстановитьПараметр("СкладКомпании",СкладКомпании);    
    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);    
    ТЗ=Новый ТаблицаЗначений;    
    ТЗ=Запрос.Выполнить().Выгрузить();     
    ТЗ.Колонки.Добавить("Себестоимость");    
    ТЗ.Колонки.Добавить("МинЦенаПродажи");
    Для каждого Стр Из ТЗ Цикл    
    Стр.Себестоимость = ?(Стр.Количество = 0, 0,Стр.Сумма/Стр.Количество);                                    
    Контрагент= Стр.Контрагент;       
    Если Контрагент <> Справочники.Контрагенты.НайтиПоНаименованию("Корея")  
    Тогда        Стр.МинЦенаПродажи=Окр(Стр.Себестоимость*1.2,2);        
    Иначе        Стр.МинЦенаПродажи=Окр(Стр.Себестоимость*1.38,2);    
    КонецЕсли;    Сообщить(Стр.МинЦенаПродажи);        
    КонецЦикла;     
    Возврат ТЗ; 
    КонецФункции 
    
    Код:
    {ОбщийМодуль.дкДокументы(624)}: Ошибка при вызове метода контекста (Выполнить): {(6, 2)}: Синтаксическая ошибка "ИЗ"
    <<?>>ИЗ
    ТЗ=Запрос.Выполнить().Выгрузить(); 

    У вас вот тут:
    Код:
    "         |    ПартииТоваровКомпанииОстатки.Партия.Контрагент КАК Контрагент, 
    | ИЗ"
    
    лишняя запятая. Старайтесь использовать для запросов конструктор, он вас от таких ошибок избавит.
    Отредактировал Эмин.
  19. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    1. Вы правильн определяете цену через сумму/количество
    2. Вы не правильно делаете запросы и передаете параметры. Если посмотрите повнимательнее мое описание процедур, то номенклатурой выступает список значений, а вы передаете конкретно одну номенклатуру.
    У вас результатом первого запроса в процедуре МинЦенаТЗ будет таблица значений с ОДНОЙ строкой, так как вы не передали туда корректно параметры.
    Попробуйте не Номенклатура = &Номенклатура, а Номенклатура В(&Номенклатура)

    И внимательно посмотрите как написано у меня (не лучшим образом, конечно, но тогда требовалась стабильность и скорость разработки, сейчас я бы написал все по-другому, но сложнее разъяснять было бы).
  20. TopicStarter Overlay
    Geek
    Offline

    Geek Опытный в 1С

    Регистрация:
    3 апр 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    я подозреваю ,что не правильно делаю запросы, опыта еще не хватает .
    Огромное Вам спасибо. А если еще и до ума доведу эту тему , то я буду счастлив :) тк долго уже с ней сижу.
    Передать список значений номенклатуры из табличной части как можно? не достаточно указать что это элемент формы - товары.номенклатура ?

    Возможно ли так написать запрос тоесть объединить два моих те что выше в один как этот?

Поделиться этой страницей