×
×
+ Ответить в теме
Показано с 1 по 19 из 19
  1. #1
    Клерк
    Регистрация
    02.06.2010
    Сообщений
    16

    Не цепляет дату хранения в Торговле+Складе

    В приходных документах по складу в табличной части добавил поле "ДатаОкончанияХранения". Дата в документах сохраняется.

    Через регистр делаю запрос

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

    Пока Запрос.Группировка(1) = 1 Цикл
    Если Запрос.Номенклатура.ЭтоГруппа() <> 1 Тогда
    КолНаим = КолНаим + 1;
    Пока Запрос.Группировка(2) = 1 Цикл
    КолДок = КолДок + 1;

    Табл.НоваяСтрока();

    Табл.Номенклатура = Запрос.Номенклатура;
    Табл.ПриходныйДокумент = Строка(Запрос.ПриходныйДокумент) + " Автор: " + Запрос.ПриходныйДокумент.Автор;
    Табл.Ед = Запрос.Номенклатура.БазоваяЕдиница;
    Табл.Остаток = Запрос.КоличествоКонОст;
    Табл.ДатаПоступления = Запрос.ПриходныйДокумент.ДатаДок;
    Табл.ХранитьДо = Запрос.ПриходныйДокумент.ДатаОкончанияХранения;
    Но дата окончания хранения оказывается пустой. Почему?
    Поделиться с друзьями

  2. #2
    Клерк
    Регистрация
    10.08.2006
    Сообщений
    12
    Посмотрите отладчиком на этой строке:
    "Табл.ХранитьДо = Запрос.ПриходныйДокумент.ДатаОкончанияХранения;"
    заполнена ли дата в "Запрос.ПриходныйДокумент.ДатаОкончанияХранения"?

  3. #3
    Клерк
    Регистрация
    18.03.2010
    Адрес
    Химки
    Сообщений
    1,459
    табличной части добавил поле "ДатаОкончанияХранения

    а выборки в запросе и после по тч прихдока нет

    или в партию реквизит добавь

  4. #4
    Клерк-клерик Аватар для Octopus
    Регистрация
    04.12.2008
    Адрес
    Пермь
    Сообщений
    2,187
    Цитата Сообщение от natal09 Посмотреть сообщение
    Если Запрос.Номенклатура.ЭтоГруппа() <> 1 Тогда
    Лишнее условие. В запросе же ясно указано - "без групп"

    Цитата Сообщение от natal09 Посмотреть сообщение
    Группировка ПриходныйДокумент без групп;
    Здесь наоборот, лишнее "без групп"

    Приходный документ не обязательно будет приходной накладной. В некоторых случаях он вообще может быть пустым

    Ну и АнонимХ правильно сказал, что для того, чтобы цеплялся реквизит из табличной части, его надо или садить в регистр, или перебирать строки документа и сравнивать с номенклатурой. Но последнее чревато боком, если в документе будет несколько строк с одним и тем же товаром.
    Если бы я не был программистом, я б наверное хирургом стал. Люблю, знаете ли, покопаться во всякой фигне непонятной...

  5. #5
    Клерк
    Регистрация
    02.06.2010
    Сообщений
    16
    Цитата Сообщение от Octopus Посмотреть сообщение
    для того, чтобы цеплялся реквизит из табличной части, его надо садить в регистр
    Учел.

    В регистре ПартииНаличие добавил реквизит ДатаОкончанияХранения. Открыл таблицу этого регистра и с помощью MS Access заполнил это поле датами.

    Сделал отчет, код по заполнению находится ниже. Все поля этого отчета заполняются значениями, кроме поля ХранитьДо. Оно пустое. Что может быть неправильным в запросе?

    Процедура Обновить()

    Табл.Очистить();

    Запрос = СоздатьОбъект("Запрос");

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

    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;

    Табл.НоваяКолонка("Раскраска");
    Табл.НоваяКолонка("Номенклатура",,,,,50);
    Табл.НоваяКолонка("ПриходныйДокумент","Строка",,,,50);
    Табл.НоваяКолонка("Ед",,,,,10);
    Табл.НоваяКолонка("Остаток","Число",15,3);
    Табл.НоваяКолонка("ДатаПоступления","Дата");
    Табл.НоваяКолонка("ХранитьДо","Дата");
    Табл.НоваяКолонка("Очередность");
    Табл.ВидимостьКолонки("Раскраска",0);
    Табл.ВидимостьКолонки("Очередность",0);
    КолНаим = 0;
    КолДок = 0;
    КолДней = 0;

    Пока Запрос.Группировка(1) = 1 Цикл
    КолНаим = КолНаим + 1;
    Пока Запрос.Группировка(2) = 1 Цикл

    КолДок = КолДок + 1;

    Табл.НоваяСтрока();

    Табл.Номенклатура = Запрос.Номенклатура;
    Табл.ПриходныйДокумент = Строка(Запрос.ПриходныйДокумент) + " Автор: " + Запрос.ПриходныйДокумент.Автор;
    Табл.Ед = Запрос.Номенклатура.БазоваяЕдиница;
    Табл.Остаток = Запрос.КоличествоКонОст;
    Табл.ДатаПоступления = Запрос.ПриходныйДокумент.ДатаДок;

    Табл.ХранитьДо = Запрос.ДатаОкончанияХранения;

    КолДней = Табл.ХранитьДо - Табл.ДатаПоступления;

    Если Табл.ДатаПоступления + Окр(КолДней * 0.75,0) < ТекущаяДата() Тогда
    Табл.Раскраска = "BRUSH[13311]";
    Табл.Очередность = 0;
    ИначеЕсли Табл.ДатаПоступления + Окр(КолДней * 0.5,0) < ТекущаяДата() Тогда
    Табл.Раскраска = "BRUSH[16776960]";
    Табл.Очередность = 1;
    Иначе
    Табл.Раскраска = "";
    Табл.Очередность = 2;
    КонецЕсли;

    КонецЦикла;
    КонецЦикла;
    Табл.Сортировать("Очередность,ХранитьДо");
    Сообщить("На складе " + КолНаим + " номенклатурных наименований по " + КолДок + " приходным документам");
    КонецПроцедуры

  6. #6
    Клерк-клерик Аватар для Octopus
    Регистрация
    04.12.2008
    Адрес
    Пермь
    Сообщений
    2,187
    Группировка ДатаОкончанияХранения;
    Если бы я не был программистом, я б наверное хирургом стал. Люблю, знаете ли, покопаться во всякой фигне непонятной...

  7. #7
    Клерк
    Регистрация
    02.06.2010
    Сообщений
    16
    Цитата Сообщение от Octopus Посмотреть сообщение
    Группировка ДатаОкончанияХранения;
    Сделал. Результат тот же. Поле с датой пустое (((

    Процедура Обновить()

    Табл.Очистить();

    Запрос = СоздатьОбъект("Запрос");

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

    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;

    Табл.НоваяКолонка("Раскраска");
    Табл.НоваяКолонка("Номенклатура",,,,,50);
    Табл.НоваяКолонка("ПриходныйДокумент","Строка",,,,50);
    Табл.НоваяКолонка("Ед",,,,,10);
    Табл.НоваяКолонка("Остаток","Число",15,3);
    Табл.НоваяКолонка("ДатаПоступления","Дата");
    Табл.НоваяКолонка("ХранитьДо","Дата");
    Табл.НоваяКолонка("Очередность");
    Табл.ВидимостьКолонки("Раскраска",0);
    Табл.ВидимостьКолонки("Очередность",0);
    КолНаим = 0;
    КолДок = 0;
    КолДней = 0;

    Пока Запрос.Группировка(1) = 1 Цикл
    КолНаим = КолНаим + 1;
    Пока Запрос.Группировка(2) = 1 Цикл
    Пока Запрос.Группировка(3) = 1 Цикл

    КолДок = КолДок + 1;

    Табл.НоваяСтрока();

    Табл.Номенклатура = Запрос.Номенклатура;
    Табл.ПриходныйДокумент = Строка(Запрос.ПриходныйДокумент) + " Автор: " + Запрос.ПриходныйДокумент.Автор;
    Табл.Ед = Запрос.Номенклатура.БазоваяЕдиница;
    Табл.Остаток = Запрос.КоличествоКонОст;
    Табл.ДатаПоступления = Запрос.ПриходныйДокумент.ДатаДок;

    Табл.ХранитьДо = Запрос.ДатаОкончанияХранения;

    КолДней = Табл.ХранитьДо - Табл.ДатаПоступления;

    Если Табл.ДатаПоступления + Окр(КолДней * 0.75,0) < ТекущаяДата() Тогда
    Табл.Раскраска = "BRUSH[13311]";
    Табл.Очередность = 0;
    ИначеЕсли Табл.ДатаПоступления + Окр(КолДней * 0.5,0) < ТекущаяДата() Тогда
    Табл.Раскраска = "BRUSH[16776960]";
    Табл.Очередность = 1;
    Иначе
    Табл.Раскраска = "";
    Табл.Очередность = 2;
    КонецЕсли;

    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    Табл.Сортировать("Очередность,ХранитьДо");
    Сообщить("На складе " + КолНаим + " номенклатурных наименований по " + КолДок + " приходным документам");
    КонецПроцедуры

  8. #8
    Клерк-клерик Аватар для Octopus
    Регистрация
    04.12.2008
    Адрес
    Пермь
    Сообщений
    2,187
    Каюсь, не заметил сразу... Из функций только КонОст, а реквизиты цепляются исключительно к оборотам (т.е. Приход - Расход). Если надо брать остатками, придется делать не реквизит, а измерение... Либо делать отчет по оборотам.
    Если бы я не был программистом, я б наверное хирургом стал. Люблю, знаете ли, покопаться во всякой фигне непонятной...

  9. #9
    Клерк
    Регистрация
    18.03.2010
    Адрес
    Химки
    Сообщений
    1,459
    Табл.Номенклатура = Запрос.Номенклатура;
    Табл.ДатаПоступления = Запрос.ПриходныйДокумент
    ...
    Тов=Запрос.Номенклатура;
    Прих=Запрос.ПриходныйДокумент;
    Прих.ВыбратьСтроки()
    Пока Прих.ПолучитьСтроку()
    Если Тов=Прих.Товар(или как там в доке он называется)
    ХранитьДо=Прих.ДатаОкончанияХранения;
    Прервать;
    КонецЕсли;
    КонецЦикла

  10. #10
    Клерк-клерик Аватар для Octopus
    Регистрация
    04.12.2008
    Адрес
    Пермь
    Сообщений
    2,187
    АнонимХ, не будет работать в случае, когда в документе несколько одинаковых позиций с разными датами хранения...
    Если бы я не был программистом, я б наверное хирургом стал. Люблю, знаете ли, покопаться во всякой фигне непонятной...

  11. #11
    Клерк
    Регистрация
    18.03.2010
    Адрес
    Химки
    Сообщений
    1,459
    ну, это вопрос реализации
    можно привязать к номеру строки
    это ж рыба

  12. #12
    Клерк-клерик Аватар для Octopus
    Регистрация
    04.12.2008
    Адрес
    Пермь
    Сообщений
    2,187
    К номеру строки тоже не универсальный вариант. Сильно осложняется написание, к примеру, отчета о товаре, чей срок хранения равен определенной дате. Или находится в определенном диапазоне. Тут уже не обойтись простым условием в запросе.
    Если бы я не был программистом, я б наверное хирургом стал. Люблю, знаете ли, покопаться во всякой фигне непонятной...

  13. #13
    Клерк
    Регистрация
    02.06.2010
    Сообщений
    16
    Цитата Сообщение от АнонимХ Посмотреть сообщение
    ну, это вопрос реализации
    можно привязать к номеру строки
    это ж рыба
    Как может выглядить код с привязкой к номеру строки?

  14. #14
    Клерк
    Регистрация
    02.06.2010
    Сообщений
    16
    Цитата Сообщение от Octopus Посмотреть сообщение
    АнонимХ, не будет работать в случае, когда в документе несколько одинаковых позиций с разными датами хранения...
    Да, сроки хранения разные.

  15. #15
    Клерк-клерик Аватар для Octopus
    Регистрация
    04.12.2008
    Адрес
    Пермь
    Сообщений
    2,187
    Цитата Сообщение от natal09 Посмотреть сообщение
    Как может выглядить код с привязкой к номеру строки?
    |НомерСтроки = Регистр.ПартииНаличие.НомерСтроки;

    Работать будет при условии, что этот атрибут регистра заполнен документом. Т.е. при проведении выполняются действия вида:
    РегПартии.ПривязыватьСтроку(ТаблНоменклатуры.НомерСтрокиДокумента);

    В ТиС это работает. В некоторых партнерских конфигурациях - нет.
    Если бы я не был программистом, я б наверное хирургом стал. Люблю, знаете ли, покопаться во всякой фигне непонятной...

  16. #16
    Клерк
    Регистрация
    18.03.2010
    Адрес
    Химки
    Сообщений
    1,459
    а разве в тис не сворачивается таблица по номенклатуре перед проведением?

    самое правильное в партию добавить
    Последний раз редактировалось АнонимХ; 26.10.2010 в 17:26.

  17. #17
    Клерк
    Регистрация
    18.03.2010
    Адрес
    Химки
    Сообщений
    1,459
    или в свойсто записывать, тогда и переделывать ниче ненадо

  18. #18
    Клерк-клерик Аватар для Octopus
    Регистрация
    04.12.2008
    Адрес
    Пермь
    Сообщений
    2,187
    Цитата Сообщение от АнонимХ Посмотреть сообщение
    а разве в тис не сворачивается таблица по номенклатуре перед проведением?
    Нет, не сворачивается. По крайней мере, в приходе.

    Цитата Сообщение от АнонимХ Посмотреть сообщение
    самое правильное в партию добавить
    Это тоже вариант, тут я полностью согласен.
    Если бы я не был программистом, я б наверное хирургом стал. Люблю, знаете ли, покопаться во всякой фигне непонятной...

  19. #19
    Клерк
    Регистрация
    02.06.2010
    Сообщений
    16
    Цитата Сообщение от АнонимХ Посмотреть сообщение
    самое правильное в партию добавить
    в партию добавил. Неплохо получилось. Спасибо.

+ Ответить в теме

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы можете создавать новые темы
  • Вы можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •