8.х Ошибка с одинаковыми позициями номенклатуры

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

  1. TopicStarter Overlay
    swamp
    Offline

    swamp

    Регистрация:
    21 янв 2009
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Подскажите пожалуйста, надо срочно решить проблему.
    Кусок кода:

    СтрокаСуммСписания = ТаблицаСуммСписания.Найти(ВыборкаСтрокТовары.Номенклатура ,"Номенклатура");
    ЦенаУчет = ?(ВыборкаСтрокТовары.Количество = 0, 0, СтрокаСуммСписания.Сумма / ВыборкаСтрокТовары.Количество);


    В результате если номенклатура присутствует в единичном числе, то все работает как надо, но вот если номенклатура повторяется в одном документе, например "Пиво разливное" идет двумя строками с количеством 0,33 и 0,5 литра.... вот тут выходит ошибочка. Количество получаем правильно, а вот сумму списания мы всегда получаем одну и туже - сумму первой по счету повторяющейся номенклатуры.
    Подскажите куда лучше копать, 1С пока только у меня на стадии изучения. :unsure:
  2. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Используй "НайтиСтроки", а потом перебери их.
    А вообще запросом надо. Тем более что-то мне подсказывает что "ТаблицаСуммСписания" это и есть результат запроса.
  3. TopicStarter Overlay
    swamp
    Offline

    swamp

    Регистрация:
    21 янв 2009
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    ТаблицаСуммСписания = БухгалтерскийУчет.ПолучитьСуммуСписанияАктивов(ЭтотОбъект,мМассивКредитовыхСчетов);


    а вот сама функция ПолучитьСуммуСписанияАктивов:

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

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

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

    Возврат ТаблицаСуммСписания;
  4. TopicStarter Overlay
    swamp
    Offline

    swamp

    Регистрация:
    21 янв 2009
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Все, осинило :)

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

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

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

    Возврат ТаблицаСуммСписания;


    И уже потом:

    СтрокаСуммСписания = ТаблицаСуммСписания.Найти(ВыборкаСтрокТовары.Номенклатура ,"Номенклатура");
    ЦенаУчет =СтрокаСуммСписания.Цена;
    :unsure:

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