Можно ли в 1С 7.7 ТиС 9.2 реализовать вот такое
http://extremallife.ru/analysis/postavshhiki-nom
Сам я с таким не справлюсь - не хватит моих знаний.
Сам я с таким не справлюсь - не хватит моих знаний.
По теме из базы знаний
- Установка цен номенклатуры по заказу поставщику
- Групповое создание заказов поставщикам для УПП 1.3 (обычное приложение)
- Номенклатура контрагента (поставщика) в реализации. ЕРП 2.4, УТ 11.4
- Анализ движения товаров по поставщикам с контактами и ценами – УТ 11.5, КА 2.5, ЕРП 2.5
- Анализ продаж товаров с отбором по поставщикам для БП 3.0
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Можно примерно так:
Есть в документе ЗаказПоставщику штатная процедура ЗаполнитьПоМинОстатку()
Вставить в неё код в начале код
чуть ниже внести исправление:
и при заполнении документа "По минимальному остатку" будет выходить только та номенклатура, которая в справочнике аналогов приписана к поставщику.
P.S. Писал сразу в браузере, за работоспособность не отвечаю :)
Есть в документе ЗаказПоставщику штатная процедура ЗаполнитьПоМинОстатку()
Вставить в неё код в начале код
ТекстЗапросаНоменклатурыПоставщика = "
Номенклатура = Справочник.Аналоги.Владелец;
Поставщик = Справочник.Аналоги.Каталог.ВладелецКаталога;
Условие(Поставщик = Контрагент);
Группировка Номенклатура Без групп;";
ЗапросНоменклатурыПоставщика = СоздатьОбъект("Запрос");
Если ЗапросНоменклатурыПоставщика.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат "Ошибка определения каталога номенклатуры поставщика";
КонецЕсли;
ТаблицаНоменклатурыПоставщика = СоздатьОбъект("ТаблицаЗначений");
НоменклатурыПоставщика.Выгрузить(ТаблицаНоменклатурыПоставщика,0,0);
Если ТаблицаНоменклатурыПоставщика.КоличествоСтрок() = 0 Тогда
Возврат "Каталог номенклатуры поставщика пуст";
КонецЕсли;
Показатьчуть ниже внести исправление:
Пока Запрос.Группировка(1) = 1 Цикл
КолЗаказа = Запрос.Номенклатура.МинОстаток - Запрос.КонОстНаличия + Запрос.КонОстРезерва - Запрос.КонОстЗаказа;
Если КолЗаказа <= 0 Тогда
Продолжить;
КонецЕсли;
// ТУТ НОВЫЕ СТРОКИ
Строчка = 0;
Если ТаблицаНоменклатурыПоставщика.НайтиЗначение(Запрос.Номенклатура,Строчка,"Номенклатура") = 0 Тогда
Продолжить;
КонецЕсли;
// ТУТ НОВЫЕ СТРОКИ ЗАКОНЧИЛИСЬ
Показатьи при заполнении документа "По минимальному остатку" будет выходить только та номенклатура, которая в справочнике аналогов приписана к поставщику.
P.S. Писал сразу в браузере, за работоспособность не отвечаю :)
(1)Получилось у Вас задуманное? Я делал немного иначе: добавил справочник КодПоставщика, подчиненный справочнику Номенклатура. В нем 2 поля: Поставщик и Код. Почему так делал: у 3-х поставщиков одинаковый товар Масло моторное... Моторное масло... , а у меня Масло Лукойл Супер 10/40 1л. (как пример). И у каждого Поставщика есть свой код в БД. Накладная от Поставщика идет с кодом, у меня есть загрузчик из .xls- файла, все грузится быстро. Если нет номенклатуры, например заказал новое в продажу, либо руками создам, либо автоматически запишется, но тогда нужно в группу переносить соответственно. И еще один плюс - есть обработка сравнения цены: каждому поставщику выслал один и тот-же заказ, получаю от них готовые накладные, а 1С сравнивает в обработке и останется только прочитать соообщения: строка №111 у такаго-то дешевле, строка 222 - у такого-то.
А штатный справочник Аналоги переписал для подбора аналогов позиции в собственной номенклатуре: ключ комбинированный 10мм Автодело / ключ комбинированный 10мм ДелоТехники (например). И таких позиций может быть больше. Есть кнопка ЗаписатьАналоги, которая прописывает соответствия и кнопка Аналоги открывает отчет ОстаткиТМЦ только по прописанным аналогам. Если интересно, могу поделиться
А штатный справочник Аналоги переписал для подбора аналогов позиции в собственной номенклатуре: ключ комбинированный 10мм Автодело / ключ комбинированный 10мм ДелоТехники (например). И таких позиций может быть больше. Есть кнопка ЗаписатьАналоги, которая прописывает соответствия и кнопка Аналоги открывает отчет ОстаткиТМЦ только по прописанным аналогам. Если интересно, могу поделиться
Извиняюсь, с тормозил, "По минимальному остатку" нашел.
Появилась ошибка:
НоменклатурыПоставщика.Выгрузить(ТаблицаНоменклатурыПоставщика,0,0);
{Документ.ЗаказПоставщику.Форма.Модуль(631)}: Значение не представляет агрегатный объект (Выгрузить)
Как ее исправить?
Появилась ошибка:
НоменклатурыПоставщика.Выгрузить(ТаблицаНоменклатурыПоставщика,0,0);
{Документ.ЗаказПоставщику.Форма.Модуль(631)}: Значение не представляет агрегатный объект (Выгрузить)
Как ее исправить?
(12) vcv, был бы программист (все занимаются только 8), я бы не заморачивался, как было хорошо когда не было этой 8, позвонил, пришли, сделали. Я бы больше сказал любитель-самоучка.
если я Вас еще не совсем замучил, то еще вопрос: как сделать "номенклатура, которая в справочнике аналогов приписана к поставщику", там только каталоги - поставщиков не видать.
если я Вас еще не совсем замучил, то еще вопрос: как сделать "номенклатура, которая в справочнике аналогов приписана к поставщику", там только каталоги - поставщиков не видать.
(14) Jill, еще пара, возможно глупых вопросов:
1. в аналогах все сделал (выбрав 4 товара с 0 остатком, установил им мин.остаток = 1), но когда делаю Заказ Поставщику по мин. остатку, то выходит только 2 товара.
2. можно ли и где (или как) присвоить группе номенклатуры какого-нибудь одного поставщика?
1. в аналогах все сделал (выбрав 4 товара с 0 остатком, установил им мин.остаток = 1), но когда делаю Заказ Поставщику по мин. остатку, то выходит только 2 товара.
2. можно ли и где (или как) присвоить группе номенклатуры какого-нибудь одного поставщика?
(15) Количество заказа определяется так (в том релизе, который у меня под рукой)
Если товар не включается в заказ, возможно он уже заказан (Запрос.КонОстЗаказа), возможно по нему висит ошибочный красный резерв (Запрос.КонОстРезерва).
Кстати, рекомендую, что бы меньше влияли косяки с резервами, заменить Запрос.КонОстРезерва на Макс(Запрос.КонОстРезерва,0)
Штатных средств для установки куче позиций номенклатуры одного поставщика/каталога нет.
Но сделать нештатное совершенно не сложно.
хорошо бы, кстати, сделать отчет, который будет показывать связь номенклатуры с поставщиком. А то легко запутаться и накосячить. Ну и, конечно, показывать бы в карточке номенклатуры список поставщиков.
КолЗаказа = Запрос.Номенклатура.МинОстаток - Запрос.КонОстНаличия + Запрос.КонОстРезерва - Запрос.КонОстЗаказа;
Если товар не включается в заказ, возможно он уже заказан (Запрос.КонОстЗаказа), возможно по нему висит ошибочный красный резерв (Запрос.КонОстРезерва).
Кстати, рекомендую, что бы меньше влияли косяки с резервами, заменить Запрос.КонОстРезерва на Макс(Запрос.КонОстРезерва,0)
Штатных средств для установки куче позиций номенклатуры одного поставщика/каталога нет.
Но сделать нештатное совершенно не сложно.
хорошо бы, кстати, сделать отчет, который будет показывать связь номенклатуры с поставщиком. А то легко запутаться и накосячить. Ну и, конечно, показывать бы в карточке номенклатуры список поставщиков.
(21) на первов скриншоте видно, что количество заказанного равно 1. Минимальный остаток тоже 1. Значит в заказ ничего не включается, потому что уже есть заказанное количество, и когда произойдёт ожидаемый 1С приход в количестве 1, фактический остаток станет равным минимальному. Значит и заказывать ничего не надо.
А вот надо разбираться в бардаке в учета заказов. В последовательности оформления заказов и поступлений. Кури отчет "Заказы поставщикам".
А вот надо разбираться в бардаке в учета заказов. В последовательности оформления заказов и поступлений. Кури отчет "Заказы поставщикам".
Для начала бы вставил в код после расчета КолЗаказа примерно так:
И исходя из увиденных цифр решал бы где косяк. Подозреваю два варианта - некорректные резервы (красные или или резерв больше наличия) или у вас не закрываются заказы и количество заказанного копится.
Сообщить("Номенклатура = "+Запрос.Номенклатура);
Сообщить("КолЗаказа = "+КолЗаказа);
Сообщить("МинОстаток = "+Запрос.Номенклатура.МинОстаток);
Сообщить("Наличие = "+Запрос.КонОстНаличия);
Сообщить("Резерв = "+Запрос.КонОстРезерва);
Сообщить("Уже заказано = "+Запрос.КонОстЗаказа);
И исходя из увиденных цифр решал бы где косяк. Подозреваю два варианта - некорректные резервы (красные или или резерв больше наличия) или у вас не закрываются заказы и количество заказанного копится.
Хотя, надо сказать, учет заказов в ТиС еще той долбанутости. Капризная довольно подсистема.
Можно, конечно, убрать остатки заказов в формуле расчета требуемого количества
но это "вредный" совет, лучше всё же навести порядок :)
Можно, конечно, убрать остатки заказов в формуле расчета требуемого количества
КолЗаказа = Запрос.Номенклатура.МинОстаток - Запрос.КонОстНаличия + Запрос.КонОстРезерва;
но это "вредный" совет, лучше всё же навести порядок :)
Правильно, что одного. Один реквизит - одно значение. А не куча.
Вариант первый, делать несколько реквизитов. Типа Поставщик1, Поставщик2, Поставщик3...
Вариант второй, отдельный справочник, который свяжет номенклатуру и поставщиков. Можно свой справочник, можно типовой справочник Аналоги, о котором уже в этой ветке говорили.
Вообще-то непонятно. Вроде обговорили здесь уже всё, а ты опять какую-то фигню (уж извини за прямоту) городишь.
Вариант первый, делать несколько реквизитов. Типа Поставщик1, Поставщик2, Поставщик3...
Вариант второй, отдельный справочник, который свяжет номенклатуру и поставщиков. Можно свой справочник, можно типовой справочник Аналоги, о котором уже в этой ветке говорили.
Вообще-то непонятно. Вроде обговорили здесь уже всё, а ты опять какую-то фигню (уж извини за прямоту) городишь.
(27) Несложно.
Предположим, таки используется справочник Аналогов, как тут обсуждалось. Тогда кладём на форму таблицу значений ТаблицаПоставщиков, а в модуле формы пишем примерно так:
И получаем первую таблицу - "поставщики данной позиции"
Основного поставщика проще всего будет хранить прямо в справочнике номенклатуры реквизитом.
Предположим, таки используется справочник Аналогов, как тут обсуждалось. Тогда кладём на форму таблицу значений ТаблицаПоставщиков, а в модуле формы пишем примерно так:
Процедура ЗаполнитьТаблицуПоставщиков()
ТаблицаПоставщиков.УдалитьСтроки();
Если Выбран() = 1 Тогда
ТекНоменклатура = ТекущийЭлемент();
ТекстЗапросаПоставщиковНоменклатуры = "
|Аналог = Справочник.Аналоги.ТекущийЭлемент();
|Номенклатура = Справочник.Аналоги.Владелец;
|НаименованиеПоставщика = Справочник.Аналоги.Наименование;
|Артикул = Справочник.Аналоги.ИдентификаторВКаталоге;
|Поставщик = Справочник.Аналоги.Каталог.ВладелецКаталога;
|Условие(Номенклатура = ТекНоменклатура);
|Группировка Аналог Без групп;";
ЗапросПоставщиковНоменклатуры = СоздатьОбъект("Запрос");
Если ЗапросПоставщиковНоменклатуры.Выполнить(ТекстЗапросаПоставщиковНоменклатуры) = 1 Тогда
Пока ЗапросПоставщиковНоменклатуры.Группировка(1) = 1 Цикл
ТаблицаПоставщиков.НоваяСтрока();
ТаблицаПоставщиков.Поставщик = ЗапросПоставщиковНоменклатуры.Поставщик;
ТаблицаПоставщиков.НаименованиеПоставщика = ЗапросПоставщиковНоменклатуры.НаименованиеПоставщика;
ТаблицаПоставщиков.Артикул = ЗапросПоставщиковНоменклатуры.Артикул;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии()
...
ТаблицаПоставщиков.НоваяКолонка("Поставщик",,,,"Поставщик");
ТаблицаПоставщиков.НоваяКолонка("НаименованиеПоставщика",,,,"Наименование");
ТаблицаПоставщиков.НоваяКолонка("Артикул",,,,"Артикул");
ЗаполнитьТаблицуПоставщиков();
...
КонецПроцедуры
ПоказатьИ получаем первую таблицу - "поставщики данной позиции"
Основного поставщика проще всего будет хранить прямо в справочнике номенклатуры реквизитом.
(27) С ценами чуток сложнее. Сначала нужно определиться, где их хранить. В штатном справочнике цен или еще где.
Если в справочнике цен, тогда понадобится привязка прайса к поставщику. Значит в справочнике ТипыЦен заводим реквизит Поставщик.
А для заполнения таблицы на форме пишем примерно такой-же код, что и для первой таблице, только в запросе обращаться нужно не к справочнику аналогов, а к справочнику цен.
Если в справочнике цен, тогда понадобится привязка прайса к поставщику. Значит в справочнике ТипыЦен заводим реквизит Поставщик.
А для заполнения таблицы на форме пишем примерно такой-же код, что и для первой таблице, только в запросе обращаться нужно не к справочнику аналогов, а к справочнику цен.
(32) vcv, сейчас пробую и получил ошибки
Если ЗапросПоставщиковНоменклатуры.Выполнить(ТекстЗапросаПоставщиковНоменклатуры) = 1 Тогда
{Справочник.Номенклатура.Форма.Модуль(29)}: Аналог = Справочник.Аналоги.ТекущийЭлемент <<?>> ();
Запрос[2] : Ожидается ';' перед '('
Если ЗапросПоставщиковНоменклатуры.Выполнить(ТекстЗапросаПоставщиковНоменклатуры) = 1 Тогда
{Справочник.Номенклатура.Форма.Модуль(29)}: Условие(Номенклатура = ТекНоменклатура <<?>> );
Запрос[7] : Ошибка в условии
Если ЗапросПоставщиковНоменклатуры.Выполнить(ТекстЗапросаПоставщиковНоменклатуры) = 1 Тогда
{Справочник.Номенклатура.Форма.Модуль(29)}: Группировка Аналог <<?>> Без групп;
Запрос[8] : Переменная 'Аналог' не опеределена
Что теперь делать?
Если ЗапросПоставщиковНоменклатуры.Выполнить(ТекстЗапросаПоставщиковНоменклатуры) = 1 Тогда
{Справочник.Номенклатура.Форма.Модуль(29)}: Аналог = Справочник.Аналоги.ТекущийЭлемент <<?>> ();
Запрос[2] : Ожидается ';' перед '('
Если ЗапросПоставщиковНоменклатуры.Выполнить(ТекстЗапросаПоставщиковНоменклатуры) = 1 Тогда
{Справочник.Номенклатура.Форма.Модуль(29)}: Условие(Номенклатура = ТекНоменклатура <<?>> );
Запрос[7] : Ошибка в условии
Если ЗапросПоставщиковНоменклатуры.Выполнить(ТекстЗапросаПоставщиковНоменклатуры) = 1 Тогда
{Справочник.Номенклатура.Форма.Модуль(29)}: Группировка Аналог <<?>> Без групп;
Запрос[8] : Переменная 'Аналог' не опеределена
Что теперь делать?
(35) vcv,
Да, было бы не плохо если бы за мои труды дали бы хоть 100 руб, а так говорят:"Это надо тебе, ты и делай."
Что я уж вчера только не делал, а вот попробовать убрать скобки не додумался, дома опробую.
Помогите, пожалуйста,
не прокатило, в реквизиты Аналог добавлять не надо?
А за деньги уже другой разговор может быть :)
Да, было бы не плохо если бы за мои труды дали бы хоть 100 руб, а так говорят:"Это надо тебе, ты и делай."
Убери после "Справочник.Аналоги.ТекущийЭлемент" круглые скобки.
Что я уж вчера только не делал, а вот попробовать убрать скобки не додумался, дома опробую.
Помогите, пожалуйста,
Условие(Номенклатура = ТекНоменклатура <<?>> );: Ошибка в условии
, что можно с этим сделать или хотя бы где прочитать?
Группировка Аналог <<?>> Без групп;: Переменная 'Аналог' не опеределена
- пробовал Перем Аналог
(36) Другие ошибки - скорее всего следствие первой. Типа синтаксическая ошибка в строке -> переменные, описанные в следующих строках запроса оказываются неопределенными -> ругается на условия и группировки, которые используют эти переменные.
Это еще лёгкий случай, бывает, забыв поставить где-то точку с запятой в глобальнике, получаешь "список ошибок" в несколько экранов :)
Это еще лёгкий случай, бывает, забыв поставить где-то точку с запятой в глобальнике, получаешь "список ошибок" в несколько экранов :)
(41) vcv,
Пока, что только с поставщиками, все работает правильно.
Таблица цена - нарисовал, поставщика в реквизиты поставил, но пока ничего хорошего не получилось, где-то накосячил.
Сейчас пока пытаюсь разобраться сам где. А вдруг додумаю. Пока не знаю как связать поставщика из ТипыЦен с Аналогами.
Если уж не додумаю, буду просить опять Вашей помощи.
Неужели и с табличкой цен справился?
Пока, что только с поставщиками, все работает правильно.
Таблица цена - нарисовал, поставщика в реквизиты поставил, но пока ничего хорошего не получилось, где-то накосячил.
Сейчас пока пытаюсь разобраться сам где. А вдруг додумаю. Пока не знаю как связать поставщика из ТипыЦен с Аналогами.
Если уж не додумаю, буду просить опять Вашей помощи.
(29) vcv, помогите разобраться
в таблицу ничего не выводит. Подскажите, что не так?
Хотелось бы в таблице получить: поставщик, дата ПоступленияТМЦ, цена ПоступленияТМЦ, валюта.
//******************************************************************************
//
Процедура ЗаполнитьТаблицуЦен()
ТаблицаЦен.УдалитьСтроки();
Если Выбран() = 1 Тогда
ТекЦена = ТекущийЭлемент();
ТекстЗапросаЦенНоменклатуры = "
|Цена = Справочник.ТипыЦен.ТекущийЭлемент;
|НаименованиеЦены = Справочник.Цены.Наименование;
|Валюта = Справочник.ТипыЦен.Валюта;
|Поставщик = Справочник.Аналоги.Каталог.ВладелецКаталога;
|Дата = Документ.ПоступлениеТМЦ.ДатаДок;
|Условие(Цена = ТекЦена);
|Группировка Цена Без групп;";
ЗапросЦенНоменклатуры = СоздатьОбъект("Запрос");
Если ЗапросЦенНоменклатуры.Выполнить(ТекстЗапросаЦенНоменклатуры) = 1 Тогда
Пока ЗапросЦенНоменклатуры.Группировка(1) = 1 Цикл
ТаблицаЦен.НоваяСтрока();
ТаблицаЦен.Поставщик = ЗапросЦенНоменклатуры.Поставщик;
ТаблицаЦен.НаименованиеЦен = ЗапросЦенНоменклатуры.НаименованиеЦены;
ТаблицаЦен.Дата = ЗапросЦенНоменклатуры.Дата;
ТаблицаЦен.Валюта = ЗапросЦенНоменклатуры.Валюта;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
.....
ТаблицаЦен.НоваяКолонка("Поставщик",,,,"Поставщик",25);
ТаблицаЦен.НоваяКолонка("Дата",,,,"Дата",10,"Д ДД.ММ.ГГ");
ТаблицаЦен.НоваяКолонка("НаименованиеЦен",,,,"Цена",7, "Ч15.2", 2 );
ТаблицаЦен.НоваяКолонка("Валюта",,,,"Валюта",5 );
ЗаполнитьТаблицуЦен();
.....
Показатьв таблицу ничего не выводит. Подскажите, что не так?
Хотелось бы в таблице получить: поставщик, дата ПоступленияТМЦ, цена ПоступленияТМЦ, валюта.
Прикрепленные файлы:

Если "Хотелось бы в таблице получить: поставщик, дата ПоступленияТМЦ, цена ПоступленияТМЦ, валюта", то всё не так. Из справочника цен дату поступления, в общем случае, не получишь.
Здесь скорее нужны остатки по партиям.
Примерно такой запрос:
Но для этого требуется, что бы у вас вёлся учет себестоимости не по среднему, а FIFO или LIFO
Здесь скорее нужны остатки по партиям.
Примерно такой запрос:
|Поставщик = Регистр.ПартииНаличие.Партия.Поставщик;
|ВалютаВзаиморасчетов = Регистр.ПартииНаличие.Партия.ДоговорПоставщика.ВалютаВзаиморасчетов;
|ЗакупочнаяЦена = Регистр.ПартииНаличие.Партия.ЗакупочнаяЦена;
|ДатаДок = Регистр.ПартииНаличие.Партия.ПриходныйДокумент.ДатаДок;
|Количество = Регистр.ПартииНаличие.Количество;
|Номенклатура = Регистр.ПартииНаличие.Номенклатура;
|Функция КоличествоКонОст = КонОст(Количество);
|Группировка Поставщик без групп;
|Группировка ВалютаВзаиморасчетов;
|Группировка ДатаДок;
|Группировка ЗакупочнаяЦена;
|Условие(Номенклатура = ТекущийЭлемент);
ПоказатьНо для этого требуется, что бы у вас вёлся учет себестоимости не по среднему, а FIFO или LIFO
(57) vcv, MD здесь , если нужна база, мне не жалко, но только для Вас на почту. dr.man37@yandex.ru
но похоже у меня проблемы с запросом.
Процедура ЗаполнитьТаблицуЦен()
ТаблицаЦен.УдалитьСтроки();
Если Выбран() = 1 Тогда
ТекНоменклатура = ТекущийЭлемент();
ТекстЗапросаЦенНоменклатуры = "
|Поставщик = Регистр.ПартииНаличие.Партия.Поставщик;
|ВалютаВзаиморасчетов = Регистр.ПартииНаличие.Партия.ДоговорПоставщика.ВалютаВзаиморасчетов;
|ЗакупочнаяЦена = Регистр.ПартииНаличие.Партия.ЗакупочнаяЦена;
|ДатаДок = Регистр.ПартииНаличие.Партия.ПриходныйДокумент.ДатаДок;
|Количество = Регистр.ПартииНаличие.Количество;
|Номенклатура = Регистр.ПартииНаличие.Номенклатура;
|Функция КоличествоКонОст = КонОст(Количество);
|Группировка Поставщик без групп;
|Группировка ВалютаВзаиморасчетов;
|Группировка ДатаДок;
|Группировка ЗакупочнаяЦена;
|Условие(Номенклатура = ТекНоменклатура);
|"
;
ЗапросЦенНоменклатуры = СоздатьОбъект("Запрос");
Если ЗапросЦенНоменклатуры.Выполнить(ТекстЗапросаЦенНоменклатуры) = 1 Тогда
Пока ЗапросЦенНоменклатуры.Группировка(1) = 1 Цикл
ТаблицаЦен.НоваяСтрока();
ТаблицаЦен.Поставщик = ЗапросЦенНоменклатуры.Поставщик;
ТаблицаЦен.НаименованиеЦен = ЗапросЦенНоменклатуры.ЗакупочнаяЦена;
ТаблицаЦен.Дата = ЗапросЦенНоменклатуры.ДатаДок;
ТаблицаЦен.Валюта = ЗапросЦенНоменклатуры.ВалютаВзаиморасчетов;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
.......
ТаблицаЦен.НоваяКолонка("Поставщик",,,,"Поставщик",25);
ТаблицаЦен.НоваяКолонка("Дата",,,,"Дата",10,"Д ДД.ММ.ГГ");
ТаблицаЦен.НоваяКолонка("НаименованиеЦен",,,,"Цена",7, "Ч15.2", 2 );
ТаблицаЦен.НоваяКолонка("Валюта",,,,"Валюта",5 );
ЗаполнитьТаблицуЦен();
.....
Показатьно похоже у меня проблемы с запросом.
vcv,
Где поменять учет нашел, правда не понимаю в чем там разница, но да ладно.
А нельзя это вытащить из Истории Цен, там ведь без разницы (если я правильно понял) как ведется учет?
учет себестоимости не по среднему, а FIFO или LIFO
Где поменять учет нашел, правда не понимаю в чем там разница, но да ладно.
А нельзя это вытащить из Истории Цен, там ведь без разницы (если я правильно понял) как ведется учет?
(46) Разница в том, что получить дату поступления можно только из партии, если партионный учет ведётся.
Посмотреть настройки партионного учета можно в фирме (юр.лице) на закладке "Учетная политика", на сколько помнится.
Из истории цен вытащить дату поступления, в общем случае, нельзя. Цены (прайсы) никак не связаны с поступлениями. Единственное исключение, если при каждом поступлении делать обновление цен в прайсе на дату поступления. Тогда да, дата установки цены будет соответствовать дате поступления. А если пользователи забудут обновить цены при поступлении? Это же автоматом не делается.
Посмотреть настройки партионного учета можно в фирме (юр.лице) на закладке "Учетная политика", на сколько помнится.
Из истории цен вытащить дату поступления, в общем случае, нельзя. Цены (прайсы) никак не связаны с поступлениями. Единственное исключение, если при каждом поступлении делать обновление цен в прайсе на дату поступления. Тогда да, дата установки цены будет соответствовать дате поступления. А если пользователи забудут обновить цены при поступлении? Это же автоматом не делается.
(47) vcv, помогите доделать.
Ставил и по FIFO и LIFO все равно ни цен, ни даты нет, что я неправильно сделал?
И можно ли дату партионного учета сдвинуть назад, скажем года на два?
Ставил и по FIFO и LIFO все равно ни цен, ни даты нет, что я неправильно сделал?
И можно ли дату партионного учета сдвинуть назад, скажем года на два?
ТаблицаЦен.НоваяСтрока();
ТаблицаЦен.Поставщик = ЗапросЦенНоменклатуры.Поставщик;
ТаблицаЦен.НаименованиеЦен = ЗапросЦенНоменклатуры.ЗакупочнаяЦена;
ТаблицаЦен.Дата = ЗапросЦенНоменклатуры.ДатаДок;
ТаблицаЦен.Валюта = ЗапросЦенНоменклатуры.ВалютаВзаиморасчетов;
.....
ТаблицаЦен.НоваяКолонка("Поставщик",,,,"Поставщик",25);
ТаблицаЦен.НоваяКолонка("Дата",,,,"Дата",10,"Д ДД.ММ.ГГ");
ТаблицаЦен.НоваяКолонка("НаименованиеЦен",,,,"Цена",7, "Ч15.2", 2 );
ТаблицаЦен.НоваяКолонка("Валюта",,,,"Валюта",5 );
ЗаполнитьТаблицуЦен();
.....
Показать
Дёргать по пустякам метод учета себестоимости не стоит. Это периодическое значение, означающее, как приходуются/списываются партии (учитывается отдельно каждая партия, или обезличенно без партий). Изменение её влияет не на текущее состояние учета, а на проведение документов. Если чего накрутил - посмотри историю этого реквизита и почисть свои эксперименты лишнее.
Для начала посмотри ведомость по партиям с детализацией по партиям. Есть ли партии в отчете, или только "пустые партии"? От этого зависит, как и откуда можно будет собирать желаемую информацию.
Наличие партионного учета делает возможным получение отчетов с информацией: сколько остатка на складе, когда поступило и по какой цене. Но добавляет особенностей в учете себестоимости.
Если нет партионного учета, узнать, когда поступил остаток на складе и по какой цене, в общем случае, нельзя.
Для начала посмотри ведомость по партиям с детализацией по партиям. Есть ли партии в отчете, или только "пустые партии"? От этого зависит, как и откуда можно будет собирать желаемую информацию.
Наличие партионного учета делает возможным получение отчетов с информацией: сколько остатка на складе, когда поступило и по какой цене. Но добавляет особенностей в учете себестоимости.
Если нет партионного учета, узнать, когда поступил остаток на складе и по какой цене, в общем случае, нельзя.
Забирай. http://1drv.ms/1fPfgW4
Я там немножко распустил руки в справочнике номенклатуры. В другие места лезть не стал. Объедини со своим МДшником только справочник номенклатуры.
Я там немножко распустил руки в справочнике номенклатуры. В другие места лезть не стал. Объедини со своим МДшником только справочник номенклатуры.
(63) Самоделкин,
А как именно хочется показать таблицу в форме подбора? Если так, что бы лежала на форме и показывала информацию об выбранной номенклатуре, то, боюсь, тормозить сильно будет. А вот сделать кнопочку, показывающую информацию о номенклатуре просто. Кнопка с открытием какой-нибудь обработки, показывающей нужную информацию. Доступ к обработке давать штатными правами в конфигураторе.
хотелось бы такую таблицу цен иметь на вкладке подбора (нарисовать таблицу и прописать код смогу), но проблема в другом - можно ли сделать так чтобы я видел эту таблицу, а продавцы нет?
А как именно хочется показать таблицу в форме подбора? Если так, что бы лежала на форме и показывала информацию об выбранной номенклатуре, то, боюсь, тормозить сильно будет. А вот сделать кнопочку, показывающую информацию о номенклатуре просто. Кнопка с открытием какой-нибудь обработки, показывающей нужную информацию. Доступ к обработке давать штатными правами в конфигураторе.
(70) vcv, помогите, не получается получить среднюю цену товара:
получаю только последнюю сумму. ????????????
Далее вроде бы правильно:
Сумма = 0;
СчетчикЦикла = 0;
Для СчетчикЦикла = 1 По ТаблицаЦен.КоличествоСтрок() Цикл
Цена = РезультатЗапроса.ЗакупочнаяЦена;
Остаток = РезультатЗапроса.КоличествоКонОст;
Сумма = Цена * Остаток;
КонецЦикла;
Сумма = Сумма;
получаю только последнюю сумму. ????????????
Далее вроде бы правильно:
ОбщееКолво = ТаблицаЦен.Итог(5);
СредняяЦена = Сумма / ОбщееКолво;
(72) Самоделкин,
Извините, что вмешиваюсь в ваш с vcv разговор.
Ошибка в том, что значение переменной "Сумма" вы каждый раз переписываете заново.
Должно быть приблизительно так:
Извините, что вмешиваюсь в ваш с vcv разговор.
Ошибка в том, что значение переменной "Сумма" вы каждый раз переписываете заново.
Должно быть приблизительно так:
Сумма = 0;
СчетчикЦикла = 0;
Для СчетчикЦикла = 1 По ТаблицаЦен.КоличествоСтрок() Цикл
Цена = РезультатЗапроса.ЗакупочнаяЦена;
Остаток = РезультатЗапроса.КоличествоКонОст;
Сумма = Сумма + Цена * Остаток; // подсчет общей суммы в ценах поступления
КонецЦикла;
(75) Самоделкин,
Проверяй, во-первых, что содержит таблица. Вполне возможно, что колонки Цена и Остаток содержат не число, а форматированную строку.
ОбщееКолво = ТаблицаЦен.Итог(5) не очень хорошо. Привязываешься к номеру колонки, который может взять и поменяться при пакой-нибудь доработке заполнения таблицы. Лучше брать итог по имени колонки. И, опять таки, проверь, что колонка содержить именно число.
Смотри в отладчике, что и как считается. Или вставь после строки "Сумма = Сумма + Цена * Остаток;" контрольную печать типа "Сообщить("Сумма="+Сумма);".
Проверяй, во-первых, что содержит таблица. Вполне возможно, что колонки Цена и Остаток содержат не число, а форматированную строку.
ОбщееКолво = ТаблицаЦен.Итог(5) не очень хорошо. Привязываешься к номеру колонки, который может взять и поменяться при пакой-нибудь доработке заполнения таблицы. Лучше брать итог по имени колонки. И, опять таки, проверь, что колонка содержить именно число.
Смотри в отладчике, что и как считается. Или вставь после строки "Сумма = Сумма + Цена * Остаток;" контрольную печать типа "Сообщить("Сумма="+Сумма);".
(77) Самоделкин,
Непонятно, почему три строки "Сумма=", когда в таблице значений две строки.
Судя по первой и второй строке контрольной печати, рекомендация из (73) не выполнена.
Попробуй изменить строку так:
Сумма = Сумма + Число(Цена) * Число(Остаток);
И что за вертикальная черка в третьей строке контрольной печати?
И в каком месте стоит "сообщить" которое выводит последние три строки?
Непонятно, почему три строки "Сумма=", когда в таблице значений две строки.
Судя по первой и второй строке контрольной печати, рекомендация из (73) не выполнена.
Попробуй изменить строку так:
Сумма = Сумма + Число(Цена) * Число(Остаток);
И что за вертикальная черка в третьей строке контрольной печати?
И в каком месте стоит "сообщить" которое выводит последние три строки?
(78) vcv,
все правильно - строки две - две суммы, третья сумма - это, как я понимаю, общая сумма.
Делал именно так.
Просто мышкой щелкнул.
Это после всех циклов, это для меня.
Непонятно, почему три строки "Сумма=", когда в таблице значений две строки.
все правильно - строки две - две суммы, третья сумма - это, как я понимаю, общая сумма.
Сумма = Сумма + Число(Цена) * Число(Остаток);
Делал именно так.
И что за вертикальная черта в третьей строке контрольной печати?
Просто мышкой щелкнул.
И в каком месте стоит "сообщить" которое выводит последние три строки?
Это после всех циклов, это для меня.
(81) vcv,
Процедура ЗаполнитьТаблицуЦен()
ТаблицаЦен.УдалитьСтроки();
Если Форма.Параметр.ТекущийЭлемент().ЭтоГруппа() = 0 Тогда
ТекНоменклатура = Форма.Параметр.ТекущийЭлемент();
ТекстЗапросаЦенНоменклатуры = "
|Поставщик = Регистр.ПартииНаличие.Партия.Поставщик;
|ВалютаВзаиморасчетов = Регистр.ПартииНаличие.Партия.ДоговорПоставщика.ВалютаВзаиморасчетов;
|ЗакупочнаяЦена = Регистр.ПартииНаличие.Партия.ЗакупочнаяЦена;
|ПриходныйДокумент = Регистр.ПартииНаличие.Партия.ПриходныйДокумент;
|Количество = Регистр.ПартииНаличие.Количество;
|Номенклатура = Регистр.ПартииНаличие.Номенклатура;
|Функция КоличествоКонОст = КонОст(Количество);
|Группировка Поставщик без групп;
|Группировка ВалютаВзаиморасчетов;
|Группировка ПриходныйДокумент;
|Группировка ЗакупочнаяЦена;
|Условие(Номенклатура = ТекНоменклатура);
|"
;
ЗапросЦенНоменклатуры = СоздатьОбъект("Запрос");
Если ЗапросЦенНоменклатуры.Выполнить(ТекстЗапросаЦенНоменклатуры) = 1 Тогда
РезультатЗапроса = СоздатьОбъект("ТаблицаЗначений");
ЗапросЦенНоменклатуры.Выгрузить(РезультатЗапроса,0,0);
РезультатЗапроса.НоваяКолонка("ДатаДок","Дата");
РезультатЗапроса.ВыбратьСтроки();
Пока РезультатЗапроса.ПолучитьСтроку() = 1 Цикл
РезультатЗапроса.ДатаДок = РезультатЗапроса.ПриходныйДокумент.ДатаДок;
КонецЦикла;
РезультатЗапроса.Свернуть("Поставщик,ВалютаВзаиморасчетов,ДатаДок,ЗакупочнаяЦена","КоличествоКонОст");
РезультатЗапроса.Сортировать("Поставщик,ВалютаВзаиморасчетов,ДатаДок,ЗакупочнаяЦена");
РезультатЗапроса.ВыбратьСтроки();
Пока РезультатЗапроса.ПолучитьСтроку() = 1 Цикл
ТаблицаЦен.НоваяСтрока();
ТаблицаЦен.Поставщик = РезультатЗапроса.Поставщик;
ТаблицаЦен.НаименованиеЦен = РезультатЗапроса.ЗакупочнаяЦена;
ТаблицаЦен.Дата = РезультатЗапроса.ДатаДок;
ТаблицаЦен.Валюта = РезультатЗапроса.ВалютаВзаиморасчетов;
ТаблицаЦен.Остаток = РезультатЗапроса.КоличествоКонОст;
//ТаблицаЦен.Единица = БазоваяЕдиница;
Сумма = 0;
СчетчикЦикла = 0;
Для СчетчикЦикла = 1 По ТаблицаЦен.КоличествоСтрок() Цикл
Цена = РезультатЗапроса.ЗакупочнаяЦена;
Остаток = РезультатЗапроса.КоличествоКонОст;
Сумма = Сумма + Число(Цена) * Число(Остаток);
Сообщить("Сумма="+Сумма);
КонецЦикла;
КонецЦикла;
КонецЕсли;
ОбщееКолво = ТаблицаЦен.Итог(5);
Сообщить (ОбщееКолво);
СредняяЦена = Сумма1 / ОбщееКолво;
Сообщить (СредняяЦена);
КонецПроцедуры
Показать
(82) Самоделкин,
То что вы написали даст вам в итоге не среднюю цену, а что-то совсем другое.
Много непонятного, я исходил из того, что в запросе у вас "ЗакупочнаяЦена" - это числовой реквизит, а не ссылочный.
Например:
То что вы написали даст вам в итоге не среднюю цену, а что-то совсем другое.
Много непонятного, я исходил из того, что в запросе у вас "ЗакупочнаяЦена" - это числовой реквизит, а не ссылочный.
Например:
Процедура ЗаполнитьТаблицуЦен()
ТаблицаЦен.УдалитьСтроки();
Если Форма.Параметр.ТекущийЭлемент().ЭтоГруппа() = 0 Тогда
ТекНоменклатура = Форма.Параметр.ТекущийЭлемент();
ТекстЗапросаЦенНоменклатуры = "
|Поставщик = Регистр.ПартииНаличие.Партия.Поставщик;
|ВалютаВзаиморасчетов = Регистр.ПартииНаличие.Партия.ДоговорПоставщика.ВалютаВзаиморасчетов;
|ЗакупочнаяЦена = Регистр.ПартииНаличие.Партия.ЗакупочнаяЦена;
|ПриходныйДокумент = Регистр.ПартииНаличие.Партия.ПриходныйДокумент;
|Количество = Регистр.ПартииНаличие.Количество;
|Номенклатура = Регистр.ПартииНаличие.Номенклатура;
|Функция КоличествоКонОст = КонОст(Количество);
|Группировка Поставщик без групп;
|Группировка ВалютаВзаиморасчетов;
|Группировка ПриходныйДокумент;
|Группировка ЗакупочнаяЦена;
|Условие(Номенклатура = ТекНоменклатура);
|"
;
ЗапросЦенНоменклатуры = СоздатьОбъект("Запрос");
Если ЗапросЦенНоменклатуры.Выполнить(ТекстЗапросаЦенНоменклатуры) = 1 Тогда
РезультатЗапроса = СоздатьОбъект("ТаблицаЗначений");
ЗапросЦенНоменклатуры.Выгрузить(РезультатЗапроса,0,0);
РезультатЗапроса.НоваяКолонка("ДатаДок","Дата");
РезультатЗапроса.ВыбратьСтроки();
Пока РезультатЗапроса.ПолучитьСтроку() = 1 Цикл
РезультатЗапроса.ДатаДок = РезультатЗапроса.ПриходныйДокумент.ДатаДок;
КонецЦикла;
РезультатЗапроса.Свернуть("Поставщик,ВалютаВзаиморасчетов,ДатаДок,ЗакупочнаяЦена","КоличествоКонОст");
РезультатЗапроса.Сортировать("Поставщик,ВалютаВзаиморасчетов,ДатаДок,ЗакупочнаяЦена");
РезультатЗапроса.ВыбратьСтроки();
Пока РезультатЗапроса.ПолучитьСтроку() = 1 Цикл
ТаблицаЦен.НоваяСтрока();
ТаблицаЦен.Поставщик = РезультатЗапроса.Поставщик;
ТаблицаЦен.НаименованиеЦен = РезультатЗапроса.ЗакупочнаяЦена;
ТаблицаЦен.Дата = РезультатЗапроса.ДатаДок;
ТаблицаЦен.Валюта = РезультатЗапроса.ВалютаВзаиморасчетов;
ТаблицаЦен.Остаток = РезультатЗапроса.КоличествоКонОст;
//ТаблицаЦен.Единица = БазоваяЕдиница;
КонецЦикла;
КонецЕсли;
Сумма = 0;
СчетчикЦикла = 0;
ТаблицаЦен.ВыбратьСтроки();
Пока ТаблицаЦен.ПолучитьСтроку()=1 Цикл
Сумма = Сумма + ТаблицаЦен.НаименованиеЦен*ТаблицаЦен.Остаток;
Сообщить("Сумма="+Сумма);
КонецЦикла;
ОбщееКолво = ТаблицаЦен.Итог(5);
Сообщить (ОбщееКолво);
СредняяЦена = Сумма / ОбщееКолво;
Сообщить (СредняяЦена);
КонецПроцедуры
Показать
(83) l_user, Только зачем два цикла? Всё идеально делается в одном:
Процедура ЗаполнитьТаблицуЦен()
ОбщееКолво = 0;
ОбщаяСумма = 0;
ТаблицаЦен.УдалитьСтроки();
Если Форма.Параметр.ТекущийЭлемент().ЭтоГруппа() = 0 Тогда
ТекНоменклатура = Форма.Параметр.ТекущийЭлемент();
ТекстЗапросаЦенНоменклатуры = "
|Поставщик = Регистр.ПартииНаличие.Партия.Поставщик;
|ВалютаВзаиморасчетов = Регистр.ПартииНаличие.Партия.ДоговорПоставщика.ВалютаВзаиморасчетов;
|ЗакупочнаяЦена = Регистр.ПартииНаличие.Партия.ЗакупочнаяЦена;
|ПриходныйДокумент = Регистр.ПартииНаличие.Партия.ПриходныйДокумент;
|Количество = Регистр.ПартииНаличие.Количество;
|Номенклатура = Регистр.ПартииНаличие.Номенклатура;
|Функция КоличествоКонОст = КонОст(Количество);
|Группировка Поставщик без групп;
|Группировка ВалютаВзаиморасчетов;
|Группировка ПриходныйДокумент;
|Группировка ЗакупочнаяЦена;
|Условие(Номенклатура = ТекНоменклатура);
|"
;
ЗапросЦенНоменклатуры = СоздатьОбъект("Запрос");
Если ЗапросЦенНоменклатуры.Выполнить(ТекстЗапросаЦенНоменклатуры) = 1 Тогда
РезультатЗапроса = СоздатьОбъект("ТаблицаЗначений");
ЗапросЦенНоменклатуры.Выгрузить(РезультатЗапроса,0,0);
РезультатЗапроса.НоваяКолонка("ДатаДок","Дата");
РезультатЗапроса.ВыбратьСтроки();
Пока РезультатЗапроса.ПолучитьСтроку() = 1 Цикл
РезультатЗапроса.ДатаДок = РезультатЗапроса.ПриходныйДокумент.ДатаДок;
КонецЦикла;
РезультатЗапроса.Свернуть("Поставщик,ВалютаВзаиморасчетов,ДатаДок,ЗакупочнаяЦена","КоличествоКонОст");
РезультатЗапроса.Сортировать("Поставщик,ВалютаВзаиморасчетов,ДатаДок,ЗакупочнаяЦена");
РезультатЗапроса.ВыбратьСтроки();
Пока РезультатЗапроса.ПолучитьСтроку() = 1 Цикл
ТаблицаЦен.НоваяСтрока();
ТаблицаЦен.Поставщик = РезультатЗапроса.Поставщик;
ТаблицаЦен.НаименованиеЦен = РезультатЗапроса.ЗакупочнаяЦена;
ТаблицаЦен.Дата = РезультатЗапроса.ДатаДок;
ТаблицаЦен.Валюта = РезультатЗапроса.ВалютаВзаиморасчетов;
ТаблицаЦен.Остаток = РезультатЗапроса.КоличествоКонОст;
//ТаблицаЦен.Единица = БазоваяЕдиница;
ОбщееКолво = ОбщееКолво + РезультатЗапроса.КоличествоКонОст;
ОбщаяСумма = ОбщаяСумма + РезультатЗапроса.КоличествоКонОст * РезультатЗапроса.ЗакупочнаяЦена;
КонецЦикла;
КонецЕсли;
КонецЕсли;
СредняяЦена = ОбщаяСумма / ОбщееКолво;
Сообщить (СредняяЦена);
КонецПроцедуры
Показать
924) не без изъянов, но нормально там работает. юзал такие времена когда по одной заявке покупателя исходной - дерево подчиненности на 20-30 листов - вполне обычное дело было. при этом теуыва хуча заказов поставщикам и прочей оабудени. и все вообщем шттано. закавыки есть, но они несмертельные. но по опыту мало кто юзает систеиму заявки-закащзаы, или даже просто вменяемо "заказы"
Что-то не то, цикл по ТЗ ТаблицаЦен, а внутри цикла выборка из РезультатЗапроса.
Скорее всего, надо и в цикле обращаться к ТаблицаЦен:
Скорее всего, надо и в цикле обращаться к ТаблицаЦен:
Для СчетчикЦикла = 1 По ТаблицаЦен.КоличествоСтрок() Цикл
ТаблицаЦен.ПолучитьСтрокуПоНомеру(СчетчикЦикла);
Цена = ТаблицаЦен.ЗакупочнаяЦена;
Остаток = ТаблицаЦен.КоличествоКонОст;
Сумма = Сумма + Цена * Остаток; // подсчет общей суммы в ценах поступления
КонецЦикла;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот