Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Ошибка при списании себестоимости по ФИФО          
YuraRoss Подменю пользователя
сообщение 06.08.14, 11:50
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 13
Спасибо сказали: 0 раз
Рейтинг: 0

Я начинающий программист 1С. Получил такую задачу – добавить возможность ведения учета товаров по ФИФО, партией будет документ поступление товаров. Для написания текста пользовался статьей – [необходимо зарегистрироваться для просмотра ссылки] . Но при проверке модуля есть 3 ошибки в которых не могу разобраться.
{Документ.ПоступлениеТоваров.МодульОбъекта(148,82)}: Очікується символ ‘)’
Сообщение.Текст = “Не хватает ” + Строка(ВыборкаНоменклатура.КоличествоВДокументе<> – ВыборкаНоменклатура.КоличествоОстаток) + ” единиц номенклатуры ” + ВыборкаНоменклатура.Номенклатура + “. Проведение невозможно.”; (Перевірка: Сервер)
{Документ.ПоступлениеТоваров.МодульОбъекта(185,35)}: Очікується ключове слово ‘КонецЦикла’ (‘EndDo’)
ОсталосьСписать = ОсталосьСписать <>– КСписанию; (Перевірка: Сервер)
{Документ.ПоступлениеТоваров.МодульОбъекта(189,1)}: Очікується ключове слово ‘КонецПроцедуры’ (‘EndProcedure’)
<>КонецЦикла; (Перевірка: Сервер)
По первой там проверял количество открытых и закрытых скобок, но причина не в этом. А 2 и 3 так же не понимаю потому что цикл и процедура закрыты.
А вот сам текст -
Запрос=Новый Запрос;
Запрос.Текст=
“ВЫБРАТЬ
| ПоступлениеТоваровТовары.Номенклатура,
| СУММА(ПоступлениеТоваровТовары.Количество) КАК Количество,
| СУММА(ПоступлениеТоваровТовары.Сумма) КАК Сумма
|ПОМЕСТИТЬ ВТ
|ИЗ
| Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
|ГДЕ
| ПоступлениеТоваровТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ПоступлениеТоваровТовары.Номенклатура
|;
|ВЫБРАТЬ
| ВТ.Номенклатура КАК Номенклатура,
| ВТ.Количество КАК КоличествоВДокументе,
| ВТ.Сумма КАК ВДокументе,
| ОстаткиТоваровОстатки.Партии,
| ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(ОстаткиТоваровОстатки.СуммаОстаток, 0) КАК СуммаОстаток
|ИЗ
| ВТ КАК ВТ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
| &МоментВремени,
| Номенклатура В
| (ВЫБРАТЬ
| ВТ.Номенклатура
| ИЗ
| ВТ КАК ВТ)) КАК ОстаткиТоваровОстатки
| ПО ВТ.Номенклатура = ОстаткиТоваровОстатки.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| ОстаткиТоваровОстатки.Партия.МоментВремени ВОЗР
|ИТОГИ
| МАКСИМУМ(КоличествоВДокументе),
| МАКСИМУМ(СуммаВДокументе),
| СУММА(КоличествоОстаток),
| СУММА(СуммаОстаток)
|ПО
| Номенклатура”;
Запрос.УстановитьПараметр(“МоментВремени”, МоментВремени());
Запрос.УстановитьПараметр(“Ссылка”,Ссылка);

ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаНоменклатура.Следующий() Цикл

Если ВыборкаНоменклатура.КоличествоОстаток < ВыборкаНоменклатура.КоличествоВДокументе Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не хватает " + Строка(ВыборкаНоменклатура.КоличествоВДокументе – ВыборкаНоменклатура.КоличествоОстаток) + " единиц номенклатуры " + ВыборкаНоменклатура.Номенклатура + ". Проведение невозможно.";
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;

Если Отказ Тогда
Продолжить;
КонецЕсли;

ОсталосьСписать = ВыборкаНоменклатура.КоличествоВДокументе;

ВыборкаДетЗаписи = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаДетЗаписи.Следующий() И ОсталосьСписать 0 Цикл

КСписанию = Мин(ОсталосьСписать, ВыборкаДетЗаписи.КоличествоОстаток);

СуммаСписания = ?(ВыборкаДетЗаписи.КоличествоОстаток =КСписанию,
ВыборкаДетЗаписи.СуммаОстаток,
ВыборкаДетЗаписи.СуммаОстаток/ВыборкаДетЗаписи.КоличествоОстаток * КСписанию);

НовоеДвижение = Движения.ОстаткиНоменклатуры.ДобавитьРасход();
НовоеДвижение.Период = Дата;
НовоеДвижение.Регистратор = Ссылка;
НовоеДвижение.Количество = КСписанию;
НовоеДвижение.Номенклатура = ВыборкаДетЗаписи.Номенклатура;
НовоеДвижение.Партия = ВыборкаДетЗаписи.Партия;
НовоеДвижение.Сумма = СуммаСписания;

НовоеДвижение = Движения.Продажи.Добавить();
НовоеДвижение.Активность = Истина;
НовоеДвижение.Период = Дата;
НовоеДвижение.Регистратор = Ссылка;
НовоеДвижение.Номенклатура = ВыборкаДетЗаписи.Номенклатура;
НовоеДвижение.Сумма = ВыборкаДетЗаписи.СуммаВДокументе;

НовоеДвижение.Количество = КСписанию;
НовоеДвижение.Себестоимость = СуммаСписания;
ОсталосьСписать = ОсталосьСписать – КСписанию;

КонецЦикла;

КонецЦикла;
КонецПроцедуры

Буду благодарен за помощь.


 ! 

Правила, п.12
 


Сообщение отредактировал logist - 06.08.14, 13:17

pablo Подменю пользователя
сообщение 06.08.14, 13:02
Сообщение #2

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

Цитата
{Документ.ПоступлениеТоваров.МодульОбъекта(148,82)}: Очікується символ ‘)’
Сообщение.Текст = “Не хватает ” + Строка(ВыборкаНоменклатура.КоличествоВДокументе<> – ВыборкаНоменклатура.КоличествоОстаток) + ” единиц номенклатуры ” + ВыборкаНоменклатура.Номенклатура + “. Проведение невозможно.”; (Перевірка: Сервер)

Что здесь делает <> ?


Signature
Правильно поставленный вопрос содержит до 90% ответа.

YuraRoss Подменю пользователя
сообщение 06.08.14, 13:08
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 13
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(pablo @ 06.08.14, 14:02) *
Что здесь делает <> ?

Я так понимаю что "<>" таким способом програма показывакт место где есть ошибка. Потому что я скинул кроме текста ошибок и сам текст программы и если вы вниманетельно посмотрите, то увидите что в тексте нету такого "<>".

ignsv Подменю пользователя
сообщение 06.08.14, 13:13
Сообщение #4

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 193
Спасибо сказали: 60 раз
Рейтинг: 0

Пока ВыборкаДетЗаписи.Следующий() И ОсталосьСписать 0 Цикл


">" - пропустили походу
я бы рекомендовал сайт Чистова, там люды выкладывают свои решения и они рабочие. Здесь не понятно или Вы синтакс.ошибок наделали или там где качали.

Petre Подменю пользователя
сообщение 06.08.14, 13:13
Сообщение #5

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2902
Из: Київ, Україна
Спасибо сказали: 1144 раз
Рейтинг: 1225

Пока ВыборкаДетЗаписи.Следующий() И ОсталосьСписать 0 Цикл


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

YuraRoss Подменю пользователя
сообщение 06.08.14, 13:17
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 13
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(ignsv @ 06.08.14, 14:13) *
Пока ВыборкаДетЗаписи.Следующий() И ОсталосьСписать 0 Цикл


">" - пропустили походу
я бы рекомендовал сайт Чистова, там люды выкладывают свои решения и они рабочие. Здесь не понятно или Вы синтакс.ошибок наделали или там где качали.

Спасибо не заметил этого. Там где я качал так же без ">".

YuraRoss Подменю пользователя
сообщение 06.08.14, 15:39
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 13
Спасибо сказали: 0 раз
Рейтинг: 0

Думаю тему можно закрывать. Ответа не нашел, но задание мне нужно было выполнить к концу дня. Спасибо за внимание.

YuraRoss Подменю пользователя
сообщение 22.08.14, 10:13
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 13
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

Petre Подменю пользователя
сообщение 22.08.14, 10:40
Сообщение #9

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2902
Из: Київ, Україна
Спасибо сказали: 1144 раз
Рейтинг: 1225

Когда код копипастится из Интернета, надо всегда быть готовым к потерям и заменам символов.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 23:35
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!