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

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> - содержание проводки
	
	Параметры.Вставить("ТаблицаМатериалы", 
		ОбщегоНазначенияБПВызовСервера.ПолучитьТаблицуПараметровПроведения(ТаблицаМатериалы, СписокОбязательныхКолонок));
	
	// Подготовка таблицы Параметры.Реквизиты
	
	СписокОбязательныхКолонок = ""
	+ "Регистратор,"                   // <ДокументСсылка.*> - документ-регистратор движений
	+ "Период,"                        // <Дата> - период движений - дата документа
	+ "Организация,"                   // <СправочникСсылка.Организации>
	+ "Подразделение";                 // <Ссылка на справочник подразделений> - производственное подразделение организации
	
	Параметры.Вставить("Реквизиты", 
		ОбщегоНазначенияБПВызовСервера.ПолучитьТаблицуПараметровПроведения(ТаблицаРеквизиты, СписокОбязательныхКолонок));
	
	Возврат Параметры;
	
КонецФункции
Показать
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)