Списание материалов из эксплуатации с добавленного счета

1. marina_infostart 18.02.21 15:06 Сейчас в теме
Всем привет, конфа бух 3.0.88.28. Добавили свой забалансовый счет МЦ.06, на нем ведем учет номенклатуры с видом Учебная литература.
Требуется поменять проводки документа Списание материалов из эксплуатации, чтобы этот вид номенклатуры списывал со счета МЦ.06.
В обработке проведения док идет в общий модуль УчетМатериаловВЭксплуатации.СформироватьДвиженияСписаниеИнвентаряИзЭксплуатации(..)
Там дальше есть функция, которая запросом проверяет достаточно ли остатка на счете для списания.
Как придумать, как подставить туда в запрос условие, что номенклатуру с видом "Уч.литература" искать на счете МЦ.06 ?
Стандартно ставит не МЦ.04 (ИнвентарьИХозяйственныеПринадлежностиВЭксплуатации). как сделать выбор ?
Вот текст функции:
Функция ПодготовитьТаблицуСписанныйИзЭксплуатацииИнвентарь(ТаблицаМатериалы, Реквизиты, Отказ)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТаблицаМатериалы.ИмяСписка КАК ИмяСписка,
    |    ТаблицаМатериалы.СинонимСписка КАК СинонимСписка,
    |    ТаблицаМатериалы.НомерСтроки КАК НомерСтроки,
    |    ТаблицаМатериалы.СчетМЦ КАК СчетМЦ,
    |    ТаблицаМатериалы.Номенклатура КАК Номенклатура,
    |    ТаблицаМатериалы.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации,
    |    ЕСТЬNULL(ТаблицаМатериалы.ФизЛицо, ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)) КАК ФизЛицо,
    |    ТаблицаМатериалы.КоличествоМЦ КАК КоличествоМЦ,
    |    ТаблицаМатериалы.Содержание КАК Содержание
    |ПОМЕСТИТЬ ТаблицаМатериалы
    |ИЗ
    |    &ТаблицаМатериалы КАК ТаблицаМатериалы
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    СчетМЦ,
    |    Номенклатура,
    |    ПартияМатериаловВЭксплуатации,
    |    ФизЛицо
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    |    ТаблицаМатериалы.ИмяСписка КАК ИмяСписка,
    |    ТаблицаМатериалы.СинонимСписка КАК СинонимСписка,
    |    ТаблицаМатериалы.НомерСтроки КАК НомерСтроки,
    |    ТаблицаМатериалы.СчетМЦ КАК СчетМЦ,
    |    ТаблицаМатериалы.Номенклатура КАК Номенклатура,
    |    ТаблицаМатериалы.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации,
    |    ТаблицаМатериалы.ФизЛицо КАК ФизЛицо,
    |    &Подразделение КАК Подразделение,
    |    ТаблицаМатериалы.КоличествоМЦ КАК КоличествоМЦ,
    |    ТаблицаМатериалы.Содержание КАК Содержание,
    |    ЕСТЬNULL(ХозрасчетныйОстаткиМЦ.КоличествоОстатокДт, 0) КАК КоличествоМЦОстаток,
    |    ЕСТЬNULL(ХозрасчетныйОстаткиМЦ.СуммаОстатокДт, 0) КАК ПервоначальнаяСтоимостьКонечныйОстаток,
    |    ЕСТЬNULL(ХозрасчетныйОстаткиМЦ.СуммаНУОстатокДт, 0) КАК ПервоначальнаяСтоимостьНУКонечныйОстаток,
    |    ЕСТЬNULL(ХозрасчетныйОстаткиМЦ.СуммаПРОстатокДт, 0) КАК ПервоначальнаяСтоимостьПРКонечныйОстаток,
    |    ЕСТЬNULL(ХозрасчетныйОстаткиМЦ.СуммаВРОстатокДт, 0) КАК ПервоначальнаяСтоимостьВРКонечныйОстаток
    |ИЗ
    |    ТаблицаМатериалы КАК ТаблицаМатериалы
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(
    |                &Период,
    |                Счет В (&СчетаУчетаИнвентаряЗабалансовый),
    |                &ВидыСубконтоИнвентарь,
    |                Организация = &Организация
    |                    И (Подразделение = &Подразделение
    |                        ИЛИ Подразделение ЕСТЬ NULL)) КАК ХозрасчетныйОстаткиМЦ
    |        ПО ТаблицаМатериалы.СчетМЦ = ХозрасчетныйОстаткиМЦ.Счет
    |            И ТаблицаМатериалы.Номенклатура = ХозрасчетныйОстаткиМЦ.Субконто1
    |            И ТаблицаМатериалы.ПартияМатериаловВЭксплуатации = ХозрасчетныйОстаткиМЦ.Субконто2
    |            И ТаблицаМатериалы.ФизЛицо = ХозрасчетныйОстаткиМЦ.Субконто3
    |
    |УПОРЯДОЧИТЬ ПО
    |    ИмяСписка,
    |    НомерСтроки";

Запрос.УстановитьПараметр("ТаблицаМатериалы", ТаблицаМатериалы);
    Запрос.УстановитьПараметр("Период", Новый Граница(Новый МоментВремени(Реквизиты.Период, Реквизиты.Регистратор), ВидГраницы.Исключая));
    Запрос.УстановитьПараметр("Организация",       Реквизиты.Организация);
    Запрос.УстановитьПараметр("Подразделение",      Реквизиты.Подразделение);
    Запрос.УстановитьПараметр("СчетаУчетаИнвентаряЗабалансовый",
    
    БухгалтерскийУчетПовтИсп.СчетаВИерархии(ПланыСчетов.Хозрасчетный.ИнвентарьИХозяйственныеПринадлежностиВЭксплуатации));
    
    ВидыСубконтоИнвентарь = Новый Массив;
    ВидыСубконтоИнвентарь.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);
    ВидыСубконтоИнвентарь.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ПартииМатериаловВЭксплуатации);
    ВидыСубконтоИнвентарь.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.РаботникиОрганизаций);
    Запрос.УстановитьПараметр("ВидыСубконтоИнвентарь", ВидыСубконтоИнвентарь);
    
    ТаблицаСписанныеМатериалы = Запрос.Выполнить().Выгрузить();
    
    ТаблицаСписанныеМатериалы.Колонки.Добавить("СуммаМЦ",   ОбщегоНазначения.ОписаниеТипаЧисло(15,2));
    ТаблицаСписанныеМатериалы.Колонки.Добавить("СуммаМЦНУ", ОбщегоНазначения.ОписаниеТипаЧисло(15,2));
    ТаблицаСписанныеМатериалы.Колонки.Добавить("СуммаМЦПР", ОбщегоНазначения.ОписаниеТипаЧисло(15,2));
    ТаблицаСписанныеМатериалы.Колонки.Добавить("СуммаМЦВР", ОбщегоНазначения.ОписаниеТипаЧисло(15,2));
    
    Для Каждого СтрокаТаблицы Из ТаблицаСписанныеМатериалы Цикл
        
        // Проверяем, достаточный ли остаток по количеству (на забалансовом счете МЦ)
        Если СтрокаТаблицы.КоличествоМЦ > СтрокаТаблицы.КоличествоМЦОстаток Тогда
        
            ТекстОшибки = НСтр("ru='Указанное количество превышает остаток по счету %1.
                |Остаток: %2; Не хватает: %3'");
            ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки,
                СтрокаТаблицы.СчетМЦ,
                СтрокаТаблицы.КоличествоМЦОстаток,
                СтрокаТаблицы.КоличествоМЦ - СтрокаТаблицы.КоличествоМЦОстаток);
            ТекстСообщения = ОбщегоНазначенияКлиентСервер.ТекстОшибкиЗаполнения("Колонка", "Корректность",
                НСтр("ru = 'Количество'"),
                СтрокаТаблицы.НомерСтроки,
                СтрокаТаблицы.СинонимСписка,
                ТекстОшибки);
            Поле = СтрокаТаблицы.ИмяСписка + "[" + Формат(СтрокаТаблицы.НомерСтроки - 1, "ЧН=0; ЧГ=") + "].Количество";

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

    Возврат ТаблицаСписанныеМатериалы;

КонецФункции
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 18.02.21 17:46 Сейчас в теме
4. marina_infostart 20.02.21 14:14 Сейчас в теме
(2) подчинить можно только группе счетов. а МЦ.04 - это не группа. и сделать группой его не могу. т.к его нужо использовать в проводках
5. RustamZz 20.02.21 18:12 Сейчас в теме
(4)
Прикрепленные файлы:
8. marina_infostart 24.02.21 00:40 Сейчас в теме
(5) интересно.. а мне дает выбрать только группы счетов
Конфа Бух 3.0.88.28
Прикрепленные файлы:
10. RustamZz 25.02.21 10:24 Сейчас в теме
(8) Корректировка данных, Режим разработчика.
3. marina_infostart 20.02.21 14:11 Сейчас в теме
Пробую так:


ВЫБРАТЬ
    |    ТаблицаМатериалы.ИмяСписка КАК ИмяСписка,
    |    ТаблицаМатериалы.СинонимСписка КАК СинонимСписка,
    |    ТаблицаМатериалы.НомерСтроки КАК НомерСтроки,
    |    ТаблицаМатериалы.СчетМЦ КАК СчетМЦ,
    |    ТаблицаМатериалы.Номенклатура КАК Номенклатура,
    |    ТаблицаМатериалы.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации,
    |    ЕСТЬNULL(ТаблицаМатериалы.ФизЛицо, ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)) КАК ФизЛицо,
    |    ТаблицаМатериалы.КоличествоМЦ КАК КоличествоМЦ,
    |    ТаблицаМатериалы.Содержание КАК Содержание
    |ПОМЕСТИТЬ ТаблицаМатериалы
    |ИЗ
    |    &ТаблицаМатериалы КАК ТаблицаМатериалы
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    СчетМЦ,
    |    Номенклатура,
    |    ПартияМатериаловВЭксплуатации,
    |    ФизЛицо
    |;
    |
    ////////////////////////////////////////////////////////////­////////////////////

    |ВЫБРАТЬ
    |    ТаблицаМатериалы.ИмяСписка КАК ИмяСписка,
    |    ТаблицаМатериалы.СинонимСписка КАК СинонимСписка,
    |    ТаблицаМатериалы.НомерСтроки КАК НомерСтроки,
    |    ТаблицаМатериалы.СчетМЦ КАК СчетМЦ,
    |    ТаблицаМатериалы.Номенклатура КАК Номенклатура,
    |    ТаблицаМатериалы.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации,
    |    ТаблицаМатериалы.ФизЛицо КАК ФизЛицо,
    |    ТаблицаМатериалы.КоличествоМЦ КАК КоличествоМЦ,
    |    ТаблицаМатериалы.Содержание КАК Содержание,
    |    СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры
    |ПОМЕСТИТЬ ТаблицаМатериалы2
    |ИЗ
    |    ТаблицаМатериалы КАК ТаблицаМатериалы
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
    |        ПО ТаблицаМатериалы.Номенклатура = СправочникНоменклатура.Наименование
    |;
    |
    ////////////////////////////////////////////////////////////­////////////////////

    |ВЫБРАТЬ
    |    ТаблицаМатериалы2.ИмяСписка КАК ИмяСписка,
    |    ТаблицаМатериалы2.СинонимСписка КАК СинонимСписка,
    |    ТаблицаМатериалы2.НомерСтроки КАК НомерСтроки,
    |    ТаблицаМатериалы2.СчетМЦ КАК СчетМЦ,
    |    ТаблицаМатериалы2.Номенклатура КАК Номенклатура,
    |    ТаблицаМатериалы2.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации,
    |    ТаблицаМатериалы2.ФизЛицо КАК ФизЛицо,
    |    &Подразделение КАК Подразделение,
    |    ТаблицаМатериалы2.КоличествоМЦ КАК КоличествоМЦ,
    |    ТаблицаМатериалы2.Содержание КАК Содержание,
    |    ЕСТЬNULL(ХозрасчетныйОстаткиМЦ.КоличествоОстатокДт, 0) КАК КоличествоМЦОстаток,
    |    ЕСТЬNULL(ХозрасчетныйОстаткиМЦ.СуммаОстатокДт, 0) КАК ПервоначальнаяСтоимостьКонечныйОстаток,
    |    ЕСТЬNULL(ХозрасчетныйОстаткиМЦ.СуммаНУОстатокДт, 0) КАК ПервоначальнаяСтоимостьНУКонечныйОстаток,
    |    ЕСТЬNULL(ХозрасчетныйОстаткиМЦ.СуммаПРОстатокДт, 0) КАК ПервоначальнаяСтоимостьПРКонечныйОстаток,
    |    ЕСТЬNULL(ХозрасчетныйОстаткиМЦ.СуммаВРОстатокДт, 0) КАК ПервоначальнаяСтоимостьВРКонечныйОстаток,
    |    ТаблицаМатериалы2.ВидНоменклатуры КАК ВидНоменклатуры
    |ИЗ
    |    ТаблицаМатериалы2 КАК ТаблицаМатериалы2
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(
    |                &Период,
    |                ,
    |                &ВидыСубконтоИнвентарь,
    |                Подразделение = &Подразделение
    |                    ИЛИ Подразделение ЕСТЬ NULL) КАК ХозрасчетныйОстаткиМЦ
    |        ПО ТаблицаМатериалы2.СчетМЦ = ХозрасчетныйОстаткиМЦ.Счет
    |            И ТаблицаМатериалы2.Номенклатура = ХозрасчетныйОстаткиМЦ.Субконто1
    |            И ТаблицаМатериалы2.ПартияМатериаловВЭксплуатации = ХозрасчетныйОстаткиМЦ.Субконто2
    |            И ТаблицаМатериалы2.ФизЛицо = ХозрасчетныйОстаткиМЦ.Субконто3
    |ГДЕ
    |    ХозрасчетныйОстаткиМЦ.Организация = &Организация
    |    И ВЫБОР
    |            КОГДА ХозрасчетныйОстаткиМЦ.Субконто1.ВидНоменклатуры = &ВидНоменклатуры
    |                ТОГДА &СчетаУчетаИнвентаряЗабалансовыйМЦ06
    |            ИНАЧЕ &СчетаУчетаИнвентаряЗабалансовый
    |        КОНЕЦ
    |
    |УПОРЯДОЧИТЬ ПО
    |    ИмяСписка,
    |    НомерСтроки;
Показать


Ошибка - по причине:
{(73, 4)}: Операция не разрешена в предложении "ГДЕ"
И <<?>>ВЫБОР

видимо нельзя передавать &ВидНоменклатуры.
Но как по другому? если ВидНоменклатуры тоже добавлен свой , не предопределенный
6. RustamZz 20.02.21 18:21 Сейчас в теме
(3) Результат
Выбор ... Конец
должен иметь тип Булево у вас подозреваю не так.
7. marina_infostart 23.02.21 00:22 Сейчас в теме
(6) возможно.
Мне нужно реализовать выбор счета в зависимости от вида номенклатуры. не могу придумать, как обойтись без параметра здесь &СчетаУчетаИнвентаряЗабалансовыйМЦ06, когда счет не предопределенный, а использовать НайтиПоКоду() в запросе нельзя. Подскажи, пожалуйста
11. RustamZz 25.02.21 10:34 Сейчас в теме
(7) То что у вас написано в ГДЕ нужно перенести в ВЫБРАТЬ. Я бы сделал это во втором запросе из пакета
9. marina_infostart 24.02.21 12:30 Сейчас в теме
(6) думаю, что надо не этот запрос править, а при формировании &ТаблицаМатериалы использовать нужный счет.
Формирование таблицы здесь, но как туда подставить нужный счет?
Процедура СформироватьДвиженияСписаниеИнвентаряИзЭксплуатации(ТаблицаМатериалы, ТаблицаРеквизиты, Движения, Отказ) Экспорт

	Если Не ЗначениеЗаполнено(ТаблицаМатериалы) Тогда
		Возврат;
	КонецЕсли;
	
	Параметры = ПодготовитьПараметрыСписаниеИнвентаряИзЭксплуатации(ТаблицаМатериалы, ТаблицаРеквизиты);
	Реквизиты = Параметры.Реквизиты[0];

	// ПОДГОТОВКА ПРОВЕДЕНИЯ ПО ДАННЫМ ИНФОРМАЦИОННОЙ БАЗЫ

	ТаблицаСписанныйИнвентарь = ПодготовитьТаблицуСписанныйИзЭксплуатацииИнвентарь(
		Параметры.ТаблицаМатериалы, Реквизиты, Отказ);

	// ФОРМИРОВАНИЕ ДВИЖЕНИЙ

	СформироватьПроводкиСписаниеМатериаловИзЭксплуатацииМЦ(
		ТаблицаСписанныйИнвентарь, Реквизиты, Движения, Отказ);
	
КонецПроцедуры

Функция ПодготовитьПараметрыСписаниеИнвентаряИзЭксплуатации(ТаблицаМатериалы, ТаблицаРеквизиты)
	
	Параметры = Новый Структура;
	
	// Подготовка таблицы Параметры.ТаблицаМатериалы
	
	СписокОбязательныхКолонок = ""
	+ "ИмяСписка,"                     // <Строка,0> - имя списка в документе
	+ "СинонимСписка,"                 // <Строка,0> - синоним списка
	+ "НомерСтроки,"                   // <Число> - номер строки в списке
	+ "СчетМЦ,"                        // <ПланСчетовСсылка.Хозрасчетный> - забалансовый счет учета материалов в эксплуатации (МЦ)
	+ "Номенклатура,"                  // <СправочникСсылка.Номенклатура> - номенклатура материалов в эксплуатации
	+ "ПартияМатериаловВЭксплуатации," // <Характеристика.ВидыСубконтоХозрасчетные> - партия материалов в эксплуатации
	+ "ФизЛицо,"                       // <СправочникСсылка.ФизическиеЛица> - материально-ответственное лицо
	+ "КоличествоМЦ,"                  // <Число,15,3> - количество материалов для погашения стоимости
	+ "Содержание";                    // <Строка,150> - содержание проводки
	
	Параметры.Вставить("ТаблицаМатериалы", 
		ОбщегоНазначенияБПВызовСервера.ПолучитьТаблицуПараметровПроведения(ТаблицаМатериалы, СписокОбязательныхКолонок));
	
	// Подготовка таблицы Параметры.Реквизиты
	
	СписокОбязательныхКолонок = ""
	+ "Регистратор,"                   // <ДокументСсылка.*> - документ-регистратор движений
	+ "Период,"                        // <Дата> - период движений - дата документа
	+ "Организация,"                   // <СправочникСсылка.Организации>
	+ "Подразделение";                 // <Ссылка на справочник подразделений> - производственное подразделение организации
	
	Параметры.Вставить("Реквизиты", 
		ОбщегоНазначенияБПВызовСервера.ПолучитьТаблицуПараметровПроведения(ТаблицаРеквизиты, СписокОбязательныхКолонок));
	
	Возврат Параметры;
	
КонецФункции
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот